Кассандра Руби драгоценный камень получить столбцы - PullRequest
2 голосов
/ 05 марта 2012

Я получаю доступ к Кассандре из рубинового камня.Я хочу получить данные из Cassandra DB, указав, какие столбцы я хочу.всякий раз, когда я запускаю этот

conn.get (: column_family, 'key1', [63,62])

я получаю следующую ошибку,

 TypeError: can't convert Array into String
    from /home/ubuntu/.rvm/gems/ruby-1.9.2-p180@spaghetti/gems/thrift-0.8.0/lib/thrift/transport/framed_transport.rb:84:in `write'
    from /home/ubuntu/.rvm/gems/ruby-1.9.2-p180@spaghetti/gems/thrift-0.8.0/lib/thrift/protocol/binary_protocol.rb:112:in `write_string'
    from /home/ubuntu/.rvm/gems/ruby-1.9.2-p180@spaghetti/gems/thrift-0.8.0/lib/thrift/client.rb:35:in `write'
    from /home/ubuntu/.rvm/gems/ruby-1.9.2-p180@spaghetti/gems/thrift-0.8.0/lib/thrift/client.rb:35:in `send_message'
    from /home/ubuntu/.rvm/gems/ruby-1.9.2-p180@spaghetti/bundler/gems/cassandra-7474449189f3/vendor/0.8/gen-rb/cassandra.rb:107:in `send_multiget_slice'
    from /home/ubuntu/.rvm/gems/ruby-1.9.2-p180@spaghetti/bundler/gems/cassandra-7474449189f3/vendor/0.8/gen-rb/cassandra.rb:102:in `multiget_slice'
    from /home/ubuntu/.rvm/gems/ruby-1.9.2-p180@spaghetti/bundler/gems/thrift_client-00893a3accc5/lib/thrift_client/abstract_thrift_client.rb:150:in `handled_proxy'
    from /home/ubuntu/.rvm/gems/ruby-1.9.2-p180@spaghetti/bundler/gems/thrift_client-00893a3accc5/lib/thrift_client/abstract_thrift_client.rb:60:in `multiget_slice'
    from /home/ubuntu/.rvm/gems/ruby-1.9.2-p180@spaghetti/bundler/gems/cassandra-7474449189f3/lib/cassandra/protocol.rb:64:in `_multiget'
    from /home/ubuntu/.rvm/gems/ruby-1.9.2-p180@spaghetti/bundler/gems/cassandra-7474449189f3/lib/cassandra/cassandra.rb:619:in `multi_get'
    from /home/ubuntu/.rvm/gems/ruby-1.9.2-p180@spaghetti/bundler/gems/cassandra-7474449189f3/lib/cassandra/cassandra.rb:592:in `get'
    from (irb):5:in `block in irb_binding'
    from /home/ubuntu/.rvm/gems/ruby-1.9.2-p180@spaghetti/gems/connection_pool-0.1.0/lib/connection_pool.rb:41:in `with'
    from (irb):4
    from /home/ubuntu/.rvm/rubies/ruby-1.9.2-p180/bin/irb:16:in `<main>'

Пакет python 'pycassa' предоставляет возможность указать, какие столбцы нужно извлечь.Как это сделать в рубине?

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

В настоящее время .get() и .multi_get() не принимают список имен столбцов. Для этого на GitHub есть открытый вопрос . В качестве обходного пути вы можете использовать .get_columns() вместо.

conn.get_columns(:column_family, 'key1', [63,62])

Возвращает массив значений в том же порядке, который вы указали для имен столбцов. В качестве альтернативы вы можете использовать камень cassandra-cql:

handle.execute("select 63,62 from column_family where KEY = 'key1'").fetch
0 голосов
/ 05 марта 2012

Исходя из того, что я прочитал драгоценный камень, именно ваш [63,62] выбрасывает драгоценный камень.Синтаксис для третьего аргумента предполагает наличие строки для подколонки.

Из тестов в исходном коде :

@twitter.get(:Users, key, 'user') #@twitter == your conn

Существует также @twitter.multi_get(:Users, [key + '1', key + '2', 'bogus'])это позволяет вам получить много предметов одновременно.

...