我在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/