根据日期获取hbase表的计数

时间:2015-10-20 16:43:09

标签: hbase

使用插入的时间戳基于时间段计算hbase表行的最简单方法是什么?我只找到了使用:

hbase> count ‘t1’, INTERVAL => 100000

这并不能解决我的问题。似乎有另一种选择,但我得到0结果?

hbase>  get 'hbase_output', '*', {TIMERANGE => [1445212800,1445299200]}
COLUMN                                   CELL
0 row(s) in 0.0900 seconds

这是唯一两个选项吗?我为表中的所有行添加了'*',并认为这可能不正确。

2 个答案:

答案 0 :(得分:1)

HBase维护每个记录的时间戳和版本。

get用于根据行键检索特定记录。因此,一旦你完成了这个批评,你就会得到更多的选择来获得不同的版本和时间戳。

扫描用于获取所有记录。您可以再次指定版本和时间戳。但是,由于扫描为您提供了整个记录列表,因此您无法进行计数操作。

所以我担心,你最好的选择是写一张地图缩小到扫描,用时间戳范围,并得到计数。事实上,与count shell方法相比,使用map reduce Rowcounter是获得Hbase计数的最佳方法。

我做过类似的事情。开始使用Rowcounter源代码,并调整添加过滤器。对于日期,您可以维护自己的字段,也可以具有任何列限定符的最近日期(只要您将整个记录存储到Hbase中)。否则,如果您的行的某些部分是单独保存的,则必须使用特定的列限定符。

答案 1 :(得分:0)

从 HBase 2.0 开始,您可以为 count 命令指定过滤器。

例如:

hbase> count 't1', FILTER => "(QualifierFilter (>=, 'binary:xyz')) AND (TimestampsFilter ( 123, 456))"

https://issues.apache.org/jira/browse/HBASE-18001

https://github.com/apache/hbase/blob/master/hbase-shell/src/main/ruby/shell/commands/count.rb