0

对于具有两个整数的复合行键的表,从 hbase shell 获取行的命令应该是什么。

我创建了这个示例 ruby​​ 脚本

include Java
import org.apache.hadoop.hbase.util.Bytes

id   = ARGV[0]
sid  = ARGV[1]

byte [] rowkey = Bytes.add(Bytes.toBytes(id.to_i),Bytes.toBytes(sid.to_i))
puts Bytes.toStringBinary (rowkey) 
....
....
....

当我调用 hbase org.jruby.Main script.rb 10 20 \x00\x00\x00\x00\x00\x00\x00\x0A\x00\x00\x00\x00\x00\x00\x00\x14 时看到的输出这清楚地显示了 16 个字节长。如何确保它是 8 个字节长(4 个用于 id,4 个用于 sid)。

4

1 回答 1

0

这是因为toBytes被重载以同时接受longint参数,并且 JRuby 总是转换Fixnumlong. 无法使用int参数选择重载。

相反,您必须使用另一种方法来创建数组。首先初始化一个空数组,然后添加每个ID:

rowkey = Java::byte[8].new
Bytes.putInt(rowkey, 0, id.to_i)
Bytes.putInt(rowkey, 4, sid.to_i)
于 2013-01-19T20:14:43.587 回答