如何设置开始和结束行键 HBASE

Posted

技术标签:

【中文标题】如何设置开始和结束行键 HBASE【英文标题】:How to set start and end row key HBASE 【发布时间】:2016-10-11 09:40:28 【问题描述】:

如果我有像

这样的行键
a_c
b_c
j_f
f_d
d_c

我应该得到所有匹配 _c 的行。如何在此处设置开始和停止行键。我试图从开始和停止行键中获取扫描结果,而不是使用 rowfilter 或其他过滤器类型。

【问题讨论】:

【参考方案1】:

如果您不想使用RowFilter,可以编写自己的过滤器函数。但是如果你自己写不了过滤函数又不想用RowFilter,我建议你用PrefixFilter

Java 示例:

byte[] prefixF= Bytes.toBytes("_c");
Scan scan = new Scan(prefixF));
PrefixFilter prefixFilter = new PrefixFilter(prefixF);
scan.addFilter(prefixFilter);
ResultScanner resultScanner = table.getScanner(scan);

以上代码等于hbase> scan 'YourTablename', FILTER => "PrefixFilter('_c')"

【讨论】:

感谢您的回答。我不想使用任何自定义过滤器甚至行过滤器的原因是所有都涉及全表扫描。这就是我试图用开始和停止行键解决的原因。是否可以使用一些正则表达式获得带有开始和停止行键的扫描结果? 扫描函数使您可以设置starRowstopRowScan(byte[] startRow, byte[] stopRow) 为指定的行范围创建扫描操作。它还允许您设置startRowfilter,您应该使用Filter hbase 类:Scan(byte[] startRow, Filter filter) 。我认为可以使用startRowstopRow 创建一个forScan 类的函数,并且在函数内部,您应该使用regex(Pattern, Match 来过滤结果。如果您找到其他解决方案,请告诉我:)【参考方案2】:

您可以使用 Hbase STARTROW 和 ENDROW 过滤器。它基本上扫描行键范围之间的数据(ENDROW 除外)。

 scan 'table_name', STARTROW=>"<start_row_key>", ENDROW=>"<end_row_key>"

【讨论】:

以上是关于如何设置开始和结束行键 HBASE的主要内容,如果未能解决你的问题,请参考以下文章

HBase 模式行键设计 - 增量计数器?

如何列出 hbase 表中的所有行键?

Phoenix中的主键如何转换为hbase中的行键

HBase里的优秀行键设计

HBase 获取行键所在的值

Hbase 性能行键与列限定符