我在hbase中的行键是这样的;
a1s1 a1s2 a1s3 a2s1 a3s1 a3s2 ...
我只想得到这些数据;
a1s1 a2s1 a3s1
但是当我运行这个查询时;扫描't1',{startrow=>'a1s1',endrow=>'a4s1'}它给了我;
a1s1 a1s2 a1s3 a2s1 a3s1
但我不想得到a1s2和a1s3。我该怎么做?
eulz3vhy1#
我假设,您希望得到以“a*”开头,以“s1”结尾的行键。因此,您可以使用以下任一方法:
scan 't1', { ENDROW=>'s1'}
或
scan 't1', {STARTROW=>'a', ENDROW=>'s1'}
另一个选项是使用regexstring:
scan 't1', {FILTER => "RowFilter(=, 'regexstring:*s1')"}
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$"))}
2条答案
按热度按时间eulz3vhy1#
我假设,您希望得到以“a*”开头,以“s1”结尾的行键。
因此,您可以使用以下任一方法:
或
另一个选项是使用regexstring:
vm0i2vca2#
您应该使用startrow endrow和另一个带有regexstringcomparator的过滤器。如果只使用起始-结束行筛选器,hbase将对行键中的每个字符执行此筛选。因为rowkey不是数字。在hbase shell中,您可以尝试以下操作: