2014-11-07 4 views
0

У меня есть проблема с запросом вставить в рубине с Кассандрой,Cassandra Datastax Рубин Вставка ошибка

Это мой стол:

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) 
) 

В рубина я сделал подготовить заявление:

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 
    ) 

Я получил эту ошибку:

/home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/protocol/cql_byte_buffer.rb:275:in to_s': wrong number of arguments (1 for 0) (ArgumentError) from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/protocol/cql_byte_buffer.rb:275:in append_decimal' from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/protocol/type_converter.rb:287:in decimal_to_bytes' from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/protocol/type_converter.rb:85:in call' from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/protocol/type_converter.rb:85:in to_bytes' from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/protocol/requests/execute_request.rb:93:in block in encode_values' from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/protocol/requests/execute_request.rb:92:in each' from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/protocol/requests/execute_request.rb:92:in each_with_index' from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/protocol/requests/execute_request.rb:92:in encode_values' from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/protocol/requests/execute_request.rb:39:in initialize' from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/cluster/client.rb:190:in new' from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/cluster/client.rb:190:in execute' from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/session.rb:81:in execute_async' from /home/florian/.rvm/gems/ruby-2.1.4/gems/cassandra-driver-1.0.0.rc.1/lib/cassandra/session.rb:103:in execute' from /home/florian/Projects/hadoop-ticket-server/import_cassandra.rb:60:in block (3 levels) in <top (required)>' from /home/florian/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/benchmark.rb:279:in measure' from /home/florian/Projects/hadoop-ticket-server/import_cassandra.rb:35:in block (2 levels) in <top (required)>' from /home/florian/Projects/hadoop-ticket-server/import_cassandra.rb:34:in each' from /home/florian/Projects/hadoop-ticket-server/import_cassandra.rb:34:in block in <top (required)>' from /home/florian/Projects/hadoop-ticket-server/import_cassandra.rb:33:in execute' from /home/florian/Projects/hadoop-ticket-server/import_cassandra.rb:33:in <top (required)>' from -e:1:in load' from -e:1:in `'

Вы имели представление о моей проблеме? Спасибо

+0

Так у вас есть ошибки, указывающие на конкретные строки кода, поэтому следующий шаг должен смотреть на ссылочного кода. Но вы не дали нам эту информацию. –

ответ

3

Проблема была с номером поплавка.

Ruby in float интерпретируется как double или float в cassandra. Чтобы положить десятичный символ в cassandra, мы должны поместить BigDecimal в Ruby.

источник: «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 
)