我使用java查询带有如下键的hbase表:
a.1
b.1
b.2
c.1
c.2
我想搜索任何以a或b开头的内容,只想为前缀返回一个唯一的值。所以我的api会返回一个列表: [a, b]
,不是 [a,b,b]
.
到目前为止,我的方法是
创建 Scan
介于 a
以及 c
.
迭代每个结果,在 .
使用 Set
以确保我没有任何复制品
归还 Set
作为一个 List
这可以正常工作,但在这种情况下:
a.1
b.1
b.2
...
b.10000000
c.1
在这种情况下,我有太多的键需要迭代,我不关心这些键,因为我已经有了一个 b
. 我的申请在完成前就要过期了。
我的问题是,是否有一个过滤器,我可以应用在我的扫描,只得到一系列前缀的唯一值?我可以告诉hbase跳过到下一个匹配而不必创建新的扫描吗?我不希望创建一个只包含我要查找的值的新表,因为应用程序的另一部分正在使用整个键,所以这两个方面都很有价值。
1条答案
按热度按时间blmhpbnm1#
看看hbase的
MultiRowRangeFilter
. 我想就你的情况来说,你可以试着通过RowRange
元素,每个元素都可以用足够的粒度限制开始行和停止行标准,以适合您的用例。https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/multirowrangefilter.html
我还没有用它来评论你的表现,但是考虑到你已经有了一些可以比较的东西,这是值得一试的。