如何获取Hbase中的特定行?

How to get specific rows in Hbase?

我在 HBase 中的 rowKeys 是这样的;

a1s1
a1s2
a1s3
a2s1
a3s1
a3s2
...

我只想获取这些数据;

a1s1
a2s1
a3s1

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

它给了我;

a1s1
a1s2
a1s3
a2s1
a3s1

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

我假设,您想要获取以 "a*" 开头并以 "s1" 结尾的行键。

所以你可以使用下面的方法:

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

或者

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

另一个选项是使用 regexString:

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

您应该使用 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$"))}