web-dev-qa-db-ja.com

セルのすべてのタイムスタンプ付きの値を取得するHBase

hbaseインスタンスに次のシナリオがあります

hbase(main):002:0> create 'test', 'cf'
0 row(s) in 1.4690 seconds

hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.1480 seconds

hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0070 seconds

hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0120 seconds

hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value4'
0 row(s) in 0.0070 seconds

ご覧のとおり、最後の2つの挿入は、同じ列ファミリー、同じ列、同じキーに対するものです。しかし、hbaseを正しく理解していれば、cf:c + row3は、タイムスタンプ付きのすべてのバージョンの挿入値を持つセルを表します。

しかし、単純なスキャンは最近の値のみを返します

hbase(main):010:0> scan 'test'       
ROW                   COLUMN+CELL                                               
 row1                 column=cf:a, timestamp=1317945279379, value=value1        
 row2                 column=cf:b, timestamp=1317945285731, value=value2        
 row3                 column=cf:c, timestamp=1317945301466, value=value4        
3 row(s) in 0.0250 seconds

セルのすべてのタイムスタンプ値を取得するにはどうすればよいですか、または時間範囲ベースのクエリを実行するにはどうすればよいですか?

14
FUD

列のバージョンを表示するには、バージョン数を指定する必要があります。

scan 'test', {VERSIONS => 3}

利用可能な場合は、2つのバージョンの列が提供されます。あなたもgetでそれを使うことができます:

get 'test', 'row3', {COLUMN => 'cf:c', VERSIONS => 3}

特定の時間の値を取得するには、TIMESTAMPも使用できます。

get 'test', 'row3', {COLUMN => 'cf:c', TIMESTAMP => 1317945301466}

2つのタイムスタンプの「間」の値を取得する必要がある場合は、 TimestampsFilter を使用する必要があります。

25
frail

列ファミリで許可されるバージョンの数を変更するには、次のコマンドを使用します。

 alter 'test', NAME=>'cf', VERSIONS=>2

次に、別のエントリを追加します。

put 'test', 'row1', 'cf:a2', 'value1e'

次に、さまざまなバージョンを確認します。

get 'test', 'row1', {COLUMN => 'cf:a2', VERSIONS => 2}

次のようなものを返します:

COLUMN                        CELL                                                                                
 cf:a2                        timestamp=1457947804214, value=value1e                                              
 cf:a2                        timestamp=1457947217039, value=value1d                                              
2 row(s) in 0.0090 seconds

詳細については、次のリンクを参照してください: https://learnhbase.wordpress.com/2013/03/02/hbase-Shell-commands/

2
timmy_stapler

Value4のcf:cの行キー 'row3'は一意である必要があります。そうでない場合、上書きされます。

hbase(main):052:0> scan 'mytable' , {COLUMN => 'cf1:1', VERSION => 3}
ROW                         COLUMN+CELL                                                                   
 1234                       column=cf1:1, timestamp=1405796300388, value=hello                            
1 row(s) in 0.0160 seconds

hbase(main):053:0> put 'mytable', 1234, 'cf1:1', 'wow!'
0 row(s) in 0.1020 seconds

値が「hello」のcf1の列1は、同じ行キー1234と値が「wow!」の2番目のプットによって上書きされます。

hbase(main):054:0> scan 'mytable', {COLUMN => 'cf1:1', VERSION => 3}
ROW                   COLUMN+CELL                                               
 1234                 column=cf1:1, timestamp=1405831703617, value=wow!         
2 row(s) in 0.0310 seconds

これで、2番目の挿入にcf1の列1の新しい値「hey」が含まれ、最後の3つのバージョンのスキャンクエリに「wow!」と表示されるようになりました。および「ねえ」、バージョンが降順で表示されないようにしてください。

hbase(main):055:0> put 'mytable', 123, 'cf1:1', 'hey'

hbase(main):004:0> scan 'mytable', {COLUMN => 'cf1:1', VERSION => 3}
ROW                   COLUMN+CELL                                               
 123                  column=cf1:1, timestamp=1405831295769, value=hey          
 1234                 column=cf1:1, timestamp=1405831703617, value=wow!         
1
Suresh Vadali