HBase获取单元格的所有带时间戳值

FUD*_*FUD 14 hadoop 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
Run Code Online (Sandbox Code Playgroud)

现在,如果您将看到,最后两个插入是针对相同的列族,相同的列和相同的键.但是,如果我正确理解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
Run Code Online (Sandbox Code Playgroud)

如何获取单元格的所有带时间戳值,或如何执行基于时间范围的查询?

fra*_*ail 25

要查看列的版本,您需要提供版本计数.

scan 'test', {VERSIONS => 3}
Run Code Online (Sandbox Code Playgroud)

如果可用,将为您提供2个版本的列.你可以用它来获取:

get 'test', 'row3', {COLUMN => 'cf:c', VERSIONS => 3}
Run Code Online (Sandbox Code Playgroud)

为了获得特定时间的价值,你可以使用TIMESTAMP.

get 'test', 'row3', {COLUMN => 'cf:c', TIMESTAMP => 1317945301466}
Run Code Online (Sandbox Code Playgroud)

如果您需要获取"两个"时间戳之间的值,则应使用TimestampsFilter.

  • 不是这里的情况,但你也应该确保Table支持多个版本,即给CF一个版本参数. (5认同)
  • 的确,你是对的@Tony.创建表格:"创建'测试',{NAME =>'cf',VERSIONS => N}"(默认为3)将是一个很好的做法.并且版本适用于列族而不是表,您应该为表中的每个列族提供版本. (4认同)
  • @KaushikLele您可以查看http://hbase.apache.org/book.html#versions了解更多详情.作为您的问题的答案:"在HBase 0.96之前,保留的默认版本数量为3,但是在0.96中,更新版本已更改为1". (4认同)