首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RowKey中对通配符的HBase支持

RowKey中对通配符的HBase支持
EN

Stack Overflow用户
提问于 2013-04-25 09:51:38
回答 2查看 6.2K关注 0票数 4

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

代码语言:javascript
运行
复制
select * from TABLE where KEY like '%SEARCH_KEY%';

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

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

EN

回答 2

Stack Overflow用户

发布于 2013-05-02 05:03:29

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

假设你有这样的数据:

代码语言:javascript
运行
复制
aaa_001
aaa_002
aab_001
aac_001
baa_001
...
zzz_001

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

代码语言:javascript
运行
复制
for key in table.scan(row_prefix="aaa"):
  print key

将打印

代码语言:javascript
运行
复制
aaa_001
aaa_002

鉴于这段代码:

代码语言:javascript
运行
复制
for key in table.scan(row_prefix="aa"):
  print key

将为您提供以下内容:

代码语言:javascript
运行
复制
aaa_001
aaa_002
aab_001
aac_001

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

票数 4
EN

Stack Overflow用户

发布于 2014-01-23 19:24:51

您可以结合使用RegexStringComparator和RowFilter并指定正则表达式,但是它将在全表扫描中结束。

代码语言:javascript
运行
复制
RegexStringComparator comp = new RegexStringComparator("my.");   // any value that starts with 'my'
SingleColumnValueFilter filter = new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
comp
);
scan.setFilter(filter);

使用RowFilter代替SingleColumnValueFilter

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16205127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档