2011-12-11 4 views
6

わかっているように、hbaseには、特定の行と特定の列が最近の変更値をタイムスタンプで記録できるという機能があります。 私の質問は、HBaseコマンドを使って変更された値をすべて一覧表示する方法です。私はたくさんのGoogle検索を行ったが、役に立つリンクは見つけられなかった。HBaseの特定の行と列から複数のバージョンを取得する方法

答えて

7

あなたがスキャンのために取得するバージョンの数を指定して取得し、それはそれらを取得することができます。

HTable tbl = new HTable(tableName); 
Get q= new Get(Bytes.toBytes(key)); 
q.setMaxVersions(numberOfVersionsYouWant); 
Result row= tbl.get(q); 
NavigableMap<byte[],NavigableMap<byte[],NavigableMap<Long,byte[]>>> allVersions=row.getMap(); 
7

同じはHBaseのシェルで達成することができる使用:

get 'tablename', 'rowid', {COLUMN => 'cf:info', VERSIONS => 3} 

上記の意志可能であれば、セルの最大3バージョンを表示します。

+0

最小3つのバージョンを取得する方法はありますか? –

10

デフォルトでは、バージョン管理は有効になっていません。したがって、テーブルを作成する際に指定しています。ここで

create 'student',{NAME=>"personal",Versions=>5},'school' 

列に対して有効になっているバージョニング「個人」ではなく、あなたが personalについては、表

hbase(main):009:0> describe 'student' 
Table student is ENABLED 
student 
COLUMN FAMILIES DESCRIPTION 
{NAME => 'personal', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '5', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'} 
{NAME => 'school', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'} 

を記述する場合、これを見ることができる

列 '学校のためにそれschoolについてはVERSIONS => '5'示し、それVERSIONS => '1'を示しています。テーブルが既に作成されている場合は

は、予想通り

alter 'student',NAME=>'school',VERSIONS =>3 

hbase(main):011:0> describe 'student' 
Table student is ENABLED 
student 
COLUMN FAMILIES DESCRIPTION 
{NAME => 'personal', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '5', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'} 
{NAME => 'school', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '3', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'} 

ではない、それは schoolについては VERSIONS => '3'を示して変更することができます。

テーブルにデータを入れます。同じセルに複数回入力してください。そして、テーブルをスキャンします。

put 'student','1','personal:name','kaushik' 
put 'student','1','personal:name','kaushik_again' 
put 'student','1','school:name','great_school' 
put 'student','1','school:name','great_school_again' 

scan 'student',{VERSIONS=>10} 
ROW COLUMN+CELL 
1 column=personal:name, timestamp=1443002303208, value=kaushik_again 
1 column=personal:name, timestamp=1443002294049, value=kaushik 
1 column=school:name, timestamp=1443002320753, value=great_school_again 
1 column=school:name, timestamp=1443002311421, value=great_school 

予想通り、新しい値と古い値が表示されます。

関連する問題