我试图使用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