如何在hbase中获取特定行?

pcww981p  于 2021-05-27  发布在  Hadoop
关注(0)|答案(2)|浏览(480)

我在hbase中的行键是这样的;

a1s1
a1s2
a1s3
a2s1
a3s1
a3s2
...

我只想得到这些数据;

a1s1
a2s1
a3s1

但是当我运行这个查询时;扫描't1',{startrow=>'a1s1',endrow=>'a4s1'}
它给了我;

a1s1
a1s2
a1s3
a2s1
a3s1

但我不想得到a1s2和a1s3。我该怎么做?

eulz3vhy

eulz3vhy1#

我假设,您希望得到以“a*”开头,以“s1”结尾的行键。
因此,您可以使用以下任一方法:

scan 't1', { ENDROW=>'s1'}

scan 't1', {STARTROW=>'a', ENDROW=>'s1'}

另一个选项是使用regexstring:

scan 't1', {FILTER => "RowFilter(=, 'regexstring:*s1')"}
vm0i2vca

vm0i2vca2#

您应该使用startrow endrow和另一个带有regexstringcomparator的过滤器。如果只使用起始-结束行筛选器,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$"))}

相关问题