繁体   English   中英

分层行键上的hbase Shell筛选器(或按行键长度筛选)

[英]hbase shell filter on hierarchical rowkey (or filter by rowkey length)

我有一个分层的行键设计,其中每个字符都是一个字段的ID(我们使用4个字节的段,但为了可读性我会坚持使用两位数)

例如

00
0000 = 00的孩子
000000 = 0000的孩子
0001 = 00的孩子
000100 = 0001的孩子

我想进行hbase shell查询以返回节点的子代。

现在我有以下

scan 'tableName', STARTROW=>'00',
 FILTER=>"PrefixFilter('00') AND RowFilter(=,'regexstring:^00.{1}$')"

给出了00的子级列表,即0000 0001

这里有多个问题:
1.如果删除$符号,性能会显着提高(在本地VM上从2秒提高到0.2秒),但我还会得到其他结果(000000和000100,我不需要的结果)。 这种巨大的性能下降是否有原因? (因为它应该是缩小列表中的附加过滤器)
2.是否可以按行键的长度进行过滤? (然后我可以抛弃正则表达式,仅使用startrow / endrow)-这必须在hbase shell中完成。 例如FILTER =>“ RowKeyLengthFilter(4)”
3.我不能在正则表达式字符串中使用单词(\\ w)或数字(\\ d),hbase shell是否有限制? 还尝试了[[:alnum:]]和[[:digit:]](感谢Yunnosch的建议)

版本= 1.1.0.1,r4de7d45cb593f98ae5d020080cbc7116d3e9d9a0,PDT 2015年5月17日12:52:10

一般来说:

  • 您的正则表达式字符串仅匹配3个字符-> 000或001
    -例如'regexstring:^ 00。{2} $'将匹配4个字符/数字-> 0000
  • 有没有理由不使用刹车

    扫描'tbl',{ROWPREFIXFILTER =>'row2',FILTER => QualifierFilter(> =,'binary:abc'))}

  • 为什么不使用RowPrefixFilter(而不是STARTROW和PrefixFilter)?

关于3。

您必须屏蔽正则表达式字符串(就像您在Java中一样):

RowFilter(=,'regexstring:^\\d{4}$')

关于1。

我只会想像查询优化没有结束$使HBase返回一个范围(可以通过哈希快速找到),但是如果您需要确切的长度,HBase必须再次检查相关范围内的所有条目(使用所有资源)保留并添加以完成任务)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM