【问题标题】:Find Unique Hbase Prefix Keys with Java使用 Java 查找唯一的 Hbase 前缀键
【发布时间】:2019-07-23 13:52:42
【问题描述】:

我正在使用 Java 查询具有如下键的 hbase 表:

a.1
b.1
b.2
c.1
c.2

我想搜索以 a 或 b 开头的任何内容,并且只想为前缀返回一个唯一值。所以我的 api 会返回一个列表:[a, b],而不是[a,b,b]

到目前为止,我的方法是

  1. ac 之间创建一个Scan

  2. 遍历每个结果,对.进行拆分

  3. 使用Set 确保我没有任何重复项

  4. Set 返回为List

这很好用,除了这种情况:

a.1
b.1
b.2
...
b.10000000
c.1

在这种情况下,我有太多要遍历的键,我不在乎,因为我已经有一个 b。我的应用程序在完成之前超时。

我的问题是,我可以在扫描中应用过滤器以仅获取一系列前缀的唯一值吗?我可以告诉 Hbase 跳到下一场比赛而不必创建新的扫描吗?我宁愿不创建一个只包含我正在寻找的值的新表,因为应用程序的另一部分正在使用整个密钥,所以这两个方面都很有价值。

【问题讨论】:

  • 要求数据库对选择执行逻辑聚合操作很好,但这似乎是一个定制的要求。
  • 您是否有任何理由不能使用现有的行过滤功能来完成此操作?请确保您已阅读所有 HBase 文档并解释您尝试过的内容以及为什么它不起作用。

标签: java hbase


【解决方案1】:

看看 HBase 的MultiRowRangeFilter。我认为对于您的情况,您可以尝试传递 RowRange 元素的集合,每个元素都可以以足够的粒度限制开始和停止行条件以适合您的用例。

https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/MultiRowRangeFilter.html

我没有用它来评论性能,但值得一试,因为你已经有一些东西可以比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 2011-06-28
    相关资源
    最近更新 更多