2016-07-08 3 views
0

私はいくつかの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); 

スキャンmaheshage25が格納されているを示し\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 
  1. それは(上記の場合のように)byte[]として数値データを格納するために提供しませんどのような利点が、私はHBaseの中だけで数値と文字列データを格納されます考えるか、文字列として:また、なぜ

    lPut.add(Bytes.toBytes("f"), Bytes.toBytes("age"), Bytes.toBytes("25")); //instead of toBytes(25) 
    
  2. 文字列はそのまま保存され、Java APIを使用してもbyte[]にシリアル化されませんか?

答えて

1

あなたはhbaseの詳細を読む必要があると思います。 Hbaseはすべてをbyte []として格納します。テーブルをスキャンすると、シェル出力が文字列に変換されます。そして、整数のような非文字列データが正しく変換されないことがあります。しかし、これは人間が読めるようにしようとしているhbaseシェルです。内部的にはすべてがbyte []です。 so

1-整数を格納する場合、整数を格納する必要があります。したがって、整数を格納する必要があります。文字列として格納する場合は常に4バイトを使用します。長さあたり1バイト、おそらく2バイトを使用します。

2文字列は上記のようにバイト[]に変換されるので、これは単なるシェルであり、あなたはそのように考えることができます。

+0

私はそれを得ました...私は不必要にその格納文字列をそのまま考えていました。 '\ x00 \ x00 \ x00 \ x19 =(11001)bin =(25)dec' 25の適切な' byte [] '形式と思われます。 '。 – Mahesha999

関連する問題