Dav*_*ams 30 hbase database-scan
我正在设计一个在hbase上运行的应用程序,并希望以交互方式浏览我的集群的内容.我在hbase shell中,我想要以字符"abc"开头扫描所有键.这样的键可能包括"abc4","abc92","abc20014"等......我试过扫描
hbase(main):003:0> scan 'mytable', {STARTROW => 'abc', ENDROW => 'abc'}
Run Code Online (Sandbox Code Playgroud)
但这似乎没有返回任何东西,因为从技术上讲没有rowkey"abc"只有以"abc"开头的rowkeys
我想要的是类似的东西
hbase(main):003:0> scan 'mytable', {STARTSROWPREFIX => 'abc', ENDROWPREFIX => 'abc'}
Run Code Online (Sandbox Code Playgroud)
我听说HBase能够迅速做到这一点,并且是其主要卖点之一.我如何在hbase shell中执行此操作?
Dav*_*ams 49
事实证明这很容易.扫描范围不包括在内,逻辑是开始<= key <end.所以答案是
scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
Run Code Online (Sandbox Code Playgroud)
Nie*_*jes 31
在最近的HBase版本中,您现在可以在hbase shell中执行以下操作:
scan 'mytable', {ROWPREFIXFILTER => 'abc'}
Run Code Online (Sandbox Code Playgroud)
这有效地做到了这一点(也适用于二进制情况)
scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
Run Code Online (Sandbox Code Playgroud)
此方法比"PrefixFilter"方法更有效,因为后者通过此PrefixFilter类中的比较代码放置所有记录.
Ben*_*ish 23
接受的解决方案在所有情况下都不起作用(二进制密钥).此外,使用PrefixFilter可能会很慢,因为它会执行表扫描,直到它到达前缀.更高效的解决方案是使用STARTROW和FILTER,如下所示:
scan 'my_table', {STARTROW => 'abc', FILTER => "PrefixFilter('abc')"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69151 次 |
| 最近记录: |