【问题标题】:HBase (Easy): How to Perform Range Prefix Scan in hbase shellHBase(简单):如何在 hbase shell 中执行范围前缀扫描
【发布时间】:2013-07-09 21:26:21
【问题描述】:

我正在设计一个在 hbase 上运行的应用程序,并希望以交互方式探索我的集群的内容。我在 hbase shell 中,我想对所有以字符“abc”开头的键执行扫描。这些键可能包括“abc4”、“abc92”、“abc20014”等...我尝试了扫描

hbase(main):003:0> scan 'mytable', {STARTROW => 'abc', ENDROW => 'abc'}

但这似乎没有返回任何内容,因为从技术上讲,没有行键“abc”,只有以“abc”开头的行键

我想要的是类似的东西

hbase(main):003:0> scan 'mytable', {STARTSROWPREFIX => 'abc', ENDROWPREFIX => 'abc'}

我听说 HBase 可以快速做到这一点,这是它的主要卖点之一。如何在 hbase shell 中执行此操作?

【问题讨论】:

    标签: hbase database-scan hbase-shell


    【解决方案1】:

    所以事实证明这很容易。扫描范围不包括在内,逻辑是 start

    scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
    

    【讨论】:

    • 是的 - 看起来你很难找到这一点。 :) 你想将此标记为正确答案吗?
    • 但是 hbase 文档应该说 startrow 实际上是 startrowprefix
    • 如果您的行仅使用“ASCII”值,那么它就像您在此处描述的那样简单。如果您真的使用二进制行键,那么它会变得更加困难。在这里查看issues.apache.org/jira/browse/HBASE-11990,了解尝试创建通用解决方案的讨论和边缘案例。
    • 这个 {STARTROW => 'abc', ENDROW => 'abd'} 是否有等效的 Java API?我只设法找到 PrefixFilter,这种类似范围的方法更适合我
    【解决方案2】:

    在 HBase 的最新版本中,您现在可以在 hbase shell 中进行操作:

    scan 'mytable', {ROWPREFIXFILTER => 'abc'}
    

    这有效地做到了这一点(也适用于二进制情况)

    scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
    

    此方法比“PrefixFilter”方法效率高很多,因为后者将所有记录都放在此 PrefixFilter 类中存在的比较代码中。

    【讨论】:

    • 当 startrow 和 stoprow 看起来更优越时,我无法理解 PrefixFilter 的用途。你知道任何用例吗?我还听说人们将这三者结合在一起。
    • 我再也不用 PrefixFilter 了。在协处理器中做某事时可能有充分的理由使用它,否则我什至会投票从 HBase 中完全删除该类。
    • 不幸的是,我一直在使用它,因为我错误地认为您需要在开始行和结束行上进行完全匹配。我对 500 万行进行了测试,分为 26 个不同的行键前缀,前缀过滤器对我来说平均慢了大约 300%。现在我要在周六重构我所有的工作:)
    • 不确定你是否知道这个问题的答案,但我想我会按照你的方式发送:stackoverflow.com/questions/40197883/…
    【解决方案3】:

    接受的解决方案并非在所有情况下都有效(二进制密钥)。此外,使用 PrefixFilter 可能会很慢,因为它会执行表扫描,直到到达前缀。更高效的解决方案是像这样使用 STARTROW 和 FILTER:

     scan 'my_table', {STARTROW => 'abc', FILTER => "PrefixFilter('abc')"}
    

    【讨论】:

    • 我无法理解PrefixFilter 的用途,而startrowstoprow 似乎更胜一筹。你知道任何用例吗?我还听说人们将这三者结合在一起。
    • 这是对我有用的解决方案。我的密钥由 AAA_B_CCC 组成。我需要密钥以 AAA_ 开头的所有行。
    【解决方案4】:

    我认为你需要的是一个过滤器

    查看以下问题的答案 Scan with filter using HBase shell

    http://hbase.apache.org/book/client.filter.html中列出了更多过滤器

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    相关资源
    最近更新 更多