HBase支持RowKey中的通配符

时间:2013-04-25 01:51:38

标签: hbase

我想知道HBase是否支持RowKey扫描的通配符。类似于:

select * from TABLE where KEY like '%SEARCH_KEY%';

我知道如果我们对rowkey的前缀有一定的了解,我们可以使用部分密钥扫描(并且HBase对于该扫描非常有效)。但是,如果我们没有前缀信息(意味着搜索键可能在RowKey中的任何位置),那么Hbase必须运行全表扫描,对吗?

另外,我如何在HBase中形成这样的查询(无论是代码还是通过shell)?

2 个答案:

答案 0 :(得分:4)

您只能执行基于前缀的行键扫描。

假设您有以下数据:

aaa_001
aaa_002
aab_001
aac_001
baa_001
...
zzz_001

使用HappyBase,您可以编写这样的代码来获取aaa *

for key in table.scan(row_prefix="aaa"):
  print key

将打印

aaa_001
aaa_002

而这段代码:

for key in table.scan(row_prefix="aa"):
  print key

会告诉你:

aaa_001
aaa_002
aab_001
aac_001

因此,您可以进行基于前缀的匹配,但不能使用基于后缀的匹配。希望这很有用。

答案 1 :(得分:1)

您可以将RegexStringComparator与RowFilter一起使用并指定正则表达式,但它将以全表扫描结束。

RegexStringComparator comp = new RegexStringComparator("my.");   // any value that starts with 'my'
SingleColumnValueFilter filter = new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
comp
);
scan.setFilter(filter);

而不是SingleColumnValueFilter使用RowFilter