我在HBase中的rowKey像这样;

a1s1
a1s2
a1s3
a2s1
a3s1
a3s2
...

我只想获取这些数据;
a1s1
a2s1
a3s1

但是当我运行这个查询时; 扫描't1',{STARTROW =>'a1s1',ENDROW =>'a4s1'}

它给了我;
a1s1
a1s2
a1s3
a2s1
a3s1

但我不想获得 a1s2和a1s3 。我怎样才能做到这一点?

最佳答案

您应该对RegexStringComparator使用STARTROW-ENDROW和另一个过滤器。如果仅使用开始-结束行过滤器,则hbase会对行键中的每个字符执行此过滤。因为rowkey不是数字。在Hbase shell中,您可以尝试以下操作:

import org.apache.hadoop.hbase.filter.CompareFilter

import org.apache.hadoop.hbase.filter.RegexStringComparator

scan 't1', {STARTROW => 'a1s1', ENDROW => 'a4s1', FILTER => org.apache.hadoop.hbase.filter.RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'),RegexStringComparator.new("s1$"))}

关于hadoop - 如何在Hbase中获取特定行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54767318/

10-12 17:23
查看更多