我的HBase数据的行键为siteid_timestamp。
ROW COLUMN + CELL
001_1454578003995 column = hd:abc,timestamp = 1454578173766,value = 2
001_1454578003996 column = hd:def,timestamp = 1454578173766,value = 2
002_1454578003997 column = hd:ijk,timestamp = 1454578173766,value = 2
002_1454578003998 column = hd:lmn,timestamp = 1454578173766,value = 2
siteid可以有所不同。 我的要求是在时间戳范围内获取行。此时间戳将是没有siteid和下划线的行键。我不想使用hbase时间戳。
因此,如果我要求一系列时间戳为> = 1454578003995&& < = 1454578003996,我应该获得前两行。
你能帮帮我吗?
答案 0 :(得分:4)
对于这种情况,我们需要使用scan
[1]执行Filter(s)
。
由于我们必须根据rowkey
进行过滤,因此我们可以将RowFilter
与RegexStringComparator
一起使用。
RegexStringComparator
允许我们使用方便的正则表达式查询/限制,但请记住,性能可能会受到大量数据的影响。一些用于说明的伪代码
...
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,
new RegexStringComparator("\\d+_12345*"));
scan.setFilter(filter);
...
我们也可以合并多个filters
。(请参阅FilterList
)
调查FuzzyRowFilter
[3],如果你需要更高的效率。 (它对rowkey
)
一些具体的例子[4]。
希望它有所帮助。
[1] Hbase scan api:https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html
[2]过滤器和比较器:https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/package-summary.html
[3] https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/FuzzyRowFilter.html