Techioz Blog

Cassandra Datastax Ruby 挿入エラー

概要

カサンドラを使用したRubyでの挿入クエリに問題があります。

これは私のテーブルです:

CREATE TABLE testkeyspace.ticket (
    id int,
    uid text,
    annule boolean,
    avoir decimal,
    caisse int,
    clotureid int,
    couverts decimal,
    creation_iso timestamp,
    modif_iso timestamp,
    montantencaisse decimal,
    montantttc decimal,
    nb_articles int,
    numero int,
    remise decimal,
    remise_montant decimal,
    remise_type text,
    remise_valeur decimal,
    rendu decimal,
    stats_iso timestamp,
    PRIMARY KEY (id, uid)
) 

Rubyではprepareステートメントを作成しました。

insert_table_ticket = session.prepare("INSERT INTO ticket(id, uid, annule, avoir, caisse, clotureid, couverts,creation_iso, modif_iso, montantencaisse, montantttc, nb_articles, numero, remise,remise_montant, remise_type, remise_valeur, rendu,stats_iso) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)")

そして、私はテストのためにこれらの値を入れました:

session.execute(insert_table_ticket,
                      1,
                      "test",
                      true,
                      1.1,
                      1,
                      1,
                      1.0,
                      1415350203,
                      1415350203,
                      1.1,
                      1.1,
                      1,
                      1,
                      1.1,
                      1.1,
                      "tests",
                      1.1,
                      1.1,
                      1415350203
      )

このエラーが発生しました:

私の問題について何か考えがありましたか?ありがとうございます

解決策

問題は浮動小数点数にありました。

float 内の Ruby は、cassandra では double または float として解釈されます。 cassandra に 10 進数を入れるには、Ruby に BigDecimal を入れる必要があります。

ソース: “http://datastax.github.io/ruby-driver/features/basics/”

解決 :

session.execute(insert_table_ticket,
                  1,
                  "test",
                  true,
                  BigDecimal.new('1.1'),
                  1,
                  1,
                  BigDecimal.new('1.0'),
                  1415350203,
                  1415350203,
                  BigDecimal.new('1.1'),
                  BigDecimal.new('1.1'),
                  1,
                  1,
                  BigDecimal.new('1.1'),
                  BigDecimal.new('1.1'),
                  "tests",
                  BigDecimal.new('1.1'),
                  BigDecimal.new('1.1'),
                  1415350203
  )