2013-01-19 36 views
0

對於具有兩個整數的組合行鍵的表,應該從hbase shell獲取一行。在HBase shell中使用組合rowkey獲取表

我創造了這個示例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)。

回答

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

最後一個澄清,我已加入下列到.irbrc以便能夠從HBase的殼DEF PGET(ID,SID) rowkey = Java調用: :byte [8] .new Bytes.putInt(rowkey,0,id.to_i) Bytes.putInt(rowkey,4,sid.to_i) key = Bytes.toStringBinary(rowkey) get'table',「 {key}「 }當我給:> pget 10 20來自hbase shell,我沒有得到結果。但是,給出'table',「\ x00 \ x00 \ x00 \ x0A \ x00 \ x00 \ x00 \ x14」將返回該行。我在Ruby腳本中丟失了什麼? –