34

我正在设计一个在 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 中执行此操作?

4

4 回答 4

56

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

scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
于 2013-07-09T21:46:21.120 回答
44

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

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

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

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

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

于 2016-07-28T09:19:04.540 回答
26

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

 scan 'my_table', {STARTROW => 'abc', FILTER => "PrefixFilter('abc')"}
于 2015-10-30T16:00:25.463 回答
1

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

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

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

于 2013-07-09T21:37:53.557 回答