基于部分行键筛选hbase中的行

7kqas0il  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(466)

我有我的hbase数据,行键作为siteid\u时间戳。
行-列+单元格
001_column=hd:,timestamp=1454578173766,value=2
001_column=hd:def,timestamp=1454578173766,value=2
002_column=hd:ijk,timestamp=1454578173766,value=2
002_column=hd:lmn,timestamp=1454578173766,value=2
站点ID可以不同。我的要求是获取时间戳范围内的行。此时间戳将是不带siteid和下划线的行键。我不想使用hbase时间戳。
因此,如果我要求时间戳的范围为>=1454578003995&&<=1454578003996,我应该得到前两行。
你能帮我做这个吗?

vsmadaxz

vsmadaxz1#

对于这种情况,我们需要执行 scan 用一个 Filter(s) [1].
因为我们必须根据 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扫描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

相关问题