[英]HBase (Easy): How to Perform Range Prefix Scan in hbase shell
我正在设计一个在 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 中执行此操作?
所以这很容易。 扫描范围不包括在内,逻辑是 start <= key < end。 所以答案是
scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
在最新版本的 HBase 中,您现在可以在 hbase shell 中执行以下操作:
scan 'mytable', {ROWPREFIXFILTER => 'abc'}
这有效地做到了这一点(也适用于二元情况)
scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
这种方法比“PrefixFilter”方法效率高很多,因为后者将所有记录放在此 PrefixFilter 类中存在的比较代码中。
接受的解决方案不适用于所有情况(二进制密钥)。 此外,使用 PrefixFilter 可能会很慢,因为它会执行表扫描,直到到达前缀为止。 更高效的解决方案是使用 STARTROW 和 FILTER ,如下所示:
scan 'my_table', {STARTROW => 'abc', FILTER => "PrefixFilter('abc')"}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.