Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HBase(简单):如何在HBase shell中执行范围前缀扫描_Hbase_Database Scan_Hbase Shell - Fatal编程技术网

HBase(简单):如何在HBase shell中执行范围前缀扫描

HBase(简单):如何在HBase shell中执行范围前缀扫描,hbase,database-scan,hbase-shell,Hbase,Database Scan,Hbase Shell,我正在设计一个在hbase上运行的应用程序,并希望以交互方式浏览集群的内容。我在hbase外壳中,我想扫描所有以字符“abc”开头的键。这些键可能包括“abc4”、“abc92”、“abc20014”等。。。我试过扫描 hbase(main):003:0> scan 'mytable', {STARTROW => 'abc', ENDROW => 'abc'} 但这似乎不会返回任何内容,因为从技术上讲,没有行键“abc”,只有以“abc”开头的行键 我想要的是 hbase(m

我正在设计一个在hbase上运行的应用程序,并希望以交互方式浏览集群的内容。我在hbase外壳中,我想扫描所有以字符“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外壳中执行此操作?

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

检查以下问题的答案


中列出了更多的过滤器,因此非常简单。扫描范围不包括在内,逻辑为开始接受的解决方案不会在所有情况下都有效(二进制键)。此外,使用PrefixFilter可能会很慢,因为它会执行表扫描,直到到达前缀。更高性能的解决方案是使用STARTROW和过滤器,如下所示:

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

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

scan 'mytable', {ROWPREFIXFILTER => 'abc'}
这有效地做到了这一点(也适用于二进制情况)


这种方法比“PrefixFilter”方法有效得多,因为后者通过PrefixFilter类中存在的比较代码放置所有记录。

我的印象是,过滤器比范围扫描慢得多。有没有一种方法可以通过范围扫描做到这一点?@DavidWilliams:是的,范围查询更快。没错-看起来你是通过艰难的方式发现了这一点。:)您想将此标记为正确答案吗?但是hbase文档应该说startrow实际上是StartRowPrefixi。如果您的行仅使用“ASCII”值,那么它就像您在此处描述的一样简单。如果您真的使用二进制行键,那么它将变得更加困难。查看此处,了解试图创建通用解决方案的讨论和边缘案例。当
startrow
stoprow
看起来更优秀时,我很难理解
PrefixFilter
的用途。你知道任何用例吗?我还听说人们将这三者结合起来。这是对我有效的解决方案。我的钥匙由AAA_B_CCC组成。我需要所有键以AAA开头的行。我很难理解PrefixFilter的用途,因为startrow和stoprow似乎更优秀。你知道任何用例吗?我还听说人们会将这三者结合起来。我再也不用PrefixFilter了。也许在协处理器中执行某些操作时使用它有一个很好的理由,否则我甚至会投票将该类从HBase中完全删除。不幸的是,我一直在使用它,因为我错误地认为您需要在开始行和结束行上进行精确匹配。我对划分在26个不同行键前缀之间的500万行进行了测试,前缀过滤器的速度平均要慢300%。现在我正在花周六的时间重构我所有的工作:)不确定你是否知道这个问题的答案,但我想我会按照你的方式发送:
scan 'mytable', {ROWPREFIXFILTER => 'abc'}
scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}