我試圖使用Datastax驅動程序將值作爲int, time, hash
提供到Cassandra中。Ruby:如何將哈希值插入到Cassandra映射中
- INT
- 時間戳
- 地圖
- PK(INT,時間戳)
我可以:作爲{ "Q17.1_4"=>"val", "Q17.2"=>"other", ...
}
中定義了表作爲顯示
哈希得到PK插入確定,但我很難將哈希值強制轉換成Cassandra可以應付的東西。
已經創建了一個事先準備好的聲明,並使用它,而(試圖)通過價值循環:
stmt = session.prepare("insert into forms(id, stamp, questions) values (?,?,?)")
...
json_val.each{ |key,val|
result = session.execute(stmt, val[ 'ID' ].to_i, Time.parse(val[ 'tDate' ]).to_i, val)
}
如果我插入「VAL」作爲哈希我得到這個錯誤:
/lib/cassandra/statements/prepared.rb:53:in `bind': expecting exactly 3 bind parameters, 2 given (ArgumentError)
這(對我來說)沒有一種方法可以將哈希轉換成卡桑德拉想要的。
如果我插入VAL作爲字符串(使用hash.to_s
)我得到這個錯誤:
/lib/cassandra/protocol/type_converter.rb:331:in
varchar_to_bytes': undefined method
encode' for 1:Fixnum (NoMethodError)
...這同樣適用於將其轉換爲一個JSON字符串,改變雙引號來單等。
我可以插入使用cqlsh(命令行)(EG insert into forms (id, stamp, questions) values (123, 12345678, { 'one':'two','three':'four'});
)值
所以,問題是 - 我怎麼得到這個紅寶石散列成卡桑德拉司機將接受的格式?
使用:
- 紅寶石2.1.3
- 卡桑德拉2.0(帶最新的Datastax司機)
編輯:
的JSON值 '問題' 散列{「Q17.1_4」:「val」,「Q17.2」:「其他」,...}
另外 - 我可以插入前兩列就好了。省略插入語句中的第三個值,因此我知道這兩個值不是這裏的罪魁禍首。
什麼是'json_val'?是否:'{「Q17.1_4」=>「val」,「Q17.2」=>「other」,...}'就像你發佈的那樣? – Surya 2014-10-18 12:58:45