【问题标题】:get count of hbase table based on dates根据日期获取 hbase 表的计数
【发布时间】:2015-10-20 16:43:09
【问题描述】:

使用插入的时间戳根据时间段获取 hbase 表行数的最简单方法是什么?我只发现使用:

hbase> count ‘t1’, INTERVAL => 100000

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

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

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

【问题讨论】:

    标签: hbase


    【解决方案1】:

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

    get 用于根据行键检索特定记录。因此,一旦您满足了这些条件,您就可以获得针对不同版本和时间戳的额外选项。

    scan 用于获取所有记录。同样,您可以选择指定版本和时间戳。但是,由于 scan 为您提供了整个记录列表,因此您不能进行计数操作。

    所以恐怕,你最好的选择是写一个地图减少扫描,时间戳范围,并得到计数。事实上,与 count shell 方法相比,使用 map reduce Rowcounter 是获取 Hbase 计数的最佳方法。

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

    【讨论】:

    • 感谢您的建议。欣赏它。
    【解决方案2】:

    从 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

    【讨论】:

      猜你喜欢
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      相关资源
      最近更新 更多