根据部分行键

时间:2016-02-05 10:52:01

标签: hbase rowfilter

我的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,我应该获得前两行。

你能帮帮我吗?

1 个答案:

答案 0 :(得分:4)

对于这种情况,我们需要使用scan [1]执行Filter(s)

由于我们必须根据rowkey进行过滤,因此我们可以将RowFilterRegexStringComparator一起使用。 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

[4] https://github.com/larsgeorge/hbase-book/blob/master/ch04/src/main/java/filters/RowFilterExample.java