使用插入的时间戳基于时间段计算hbase表行的最简单方法是什么?我只找到了使用:
hbase> count ‘t1’, INTERVAL => 100000
这并不能解决我的问题。似乎有另一种选择,但我得到0结果?
hbase> get 'hbase_output', '*', {TIMERANGE => [1445212800,1445299200]}
COLUMN CELL
0 row(s) in 0.0900 seconds
这是唯一两个选项吗?我为表中的所有行添加了'*',并认为这可能不正确。
答案 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