私はいくつかのhbaseコードを試しています。すべての整数をhbaseのbyte []ではなくStringとして保存してもよろしいですか?
hbase(main):001:0> create 'employee', {NAME => 'f'}
hbase(main):003:0> put 'employee', 'ganesh','f:age',30
hbase(main):004:0> put 'employee', 'ganesh','f:desg','mngr'
hbase(main):005:0> scan 'employee'
ROW COLUMN+CELL
ganesh column=f:age, timestamp=1467926618738, value=30
ganesh column=f:desg, timestamp=1467926639557, value=mngr
しかし、私は、Java APIを使用してデータを入れたときに、文字列以外のものは次のようにシリアライズされます:私は、私はputコマンドは、すべてのもの(数値と文字列の両方)を使用して、HBaseのシェルを介してデータを挿入すると、文字列として置かれていることに気づきましたbyte[]
:HBaseのシェルで
Cluster lNodes = new Cluster();
lNodes.add("digitate-VirtualBox:8090");
Client lClient= new Client(lNodes);
RemoteHTable remoteht = new RemoteHTable(lClient, "employee");
Put lPut = new Put(Bytes.toBytes("mahesh"));
lPut.add(Bytes.toBytes("f"), Bytes.toBytes("age"), Bytes.toBytes(25));
lPut.add(Bytes.toBytes("f"), Bytes.toBytes("desg"), Bytes.toBytes("dev"));
remoteht.put(lPut);
スキャンmahesh
のage
25
が格納されているを示し\x00\x00\x00\x19
として:
hbase(main):006:0> scan 'employee'
ROW COLUMN+CELL
ganesh column=f:age, timestamp=1467926618738, value=30
ganesh column=f:desg, timestamp=1467926639557, value=mngr
mahesh column=f:age, timestamp=1467926707712, value=\x00\x00\x00\x19
mahesh column=f:desg, timestamp=1467926707712, value=dev
それは(上記の場合のように)
byte[]
として数値データを格納するために提供しませんどのような利点が、私はHBaseの中だけで数値と文字列データを格納されます考えるか、文字列として:また、なぜlPut.add(Bytes.toBytes("f"), Bytes.toBytes("age"), Bytes.toBytes("25")); //instead of toBytes(25)
文字列はそのまま保存され、Java APIを使用しても
byte[]
にシリアル化されませんか?
私はそれを得ました...私は不必要にその格納文字列をそのまま考えていました。 '\ x00 \ x00 \ x00 \ x19 =(11001)bin =(25)dec' 25の適切な' byte [] '形式と思われます。 '。 – Mahesha999