当unix时间戳是rowkey的一部分时,如何扫描hbase表?

时间:2014-05-09 23:19:37

标签: filter get hbase database-scan

我们将hbase表与行键作为AccountId和unixtimestamp。

例如:ACNTID1359694800000

Account Id: ACNTID
unixtimestamp: 1359694800000

1359694800000是2/1/2013的值

我正在寻找给定日期的账户ID查询?我可以使用startrow,停止行逻辑。还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。 startrow是包含的,最后一行是独占的。所以只需在结束行的unix时间戳上添加1,就可以了。

scan 'mytable', {STARTROW => 'ACNTID1359694800000', ENDROW => 'ACNTID1359694800001'}

答案 1 :(得分:0)

您的rowkey结构不支持获取任何给定unix时间戳的帐户ID,因为您的案例中的时间戳位于rowkey的大部分区域,或者至少不使用STARTROW&单独停止。要获得所需的结果,查询应扫描表的所有rowkey并对给定的时间戳执行过滤。 HBase附带一个名为RowFilter的过滤器,与Scan一起使用,用于限制HBase返回的行。由于您将rowkey存储为文本,因此您可以使用SubStringComparatorRegexStringComparator以及RowFilter。与此等效的命令行是

scan 'table_name', { FILTER =>"RowFilter(=,'substring:1359694800000')"}

上面的命令将返回其rowkey中包含1359694800000的所有行。