Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HBase支持RowKey中的通配符_Hbase - Fatal编程技术网

HBase支持RowKey中的通配符

HBase支持RowKey中的通配符,hbase,Hbase,我想知道HBase是否支持行键扫描上的通配符。类似于: select * from TABLE where KEY like '%SEARCH_KEY%'; 我知道,如果我们对rowkey的前缀有一定的了解,我们可以使用部分键扫描(HBase对该扫描非常有效)。但是,如果我们没有信息前缀(这意味着搜索键可以在RowKey中的任何位置),那么Hbase必须运行完整的表扫描,对吗 另外,如何在HBase中形成这样的查询(代码或通过shell) 只能执行基于前缀的行键扫描 假设您有如下数据: aaa

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

select * from TABLE where KEY like '%SEARCH_KEY%';
我知道,如果我们对rowkey的前缀有一定的了解,我们可以使用部分键扫描(HBase对该扫描非常有效)。但是,如果我们没有信息前缀(这意味着搜索键可以在RowKey中的任何位置),那么Hbase必须运行完整的表扫描,对吗


另外,如何在HBase中形成这样的查询(代码或通过shell)

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

假设您有如下数据:

aaa_001
aaa_002
aab_001
aac_001
baa_001
...
zzz_001
使用,您可以编写这样的代码以获得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

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

您可以将RegexStringComparator与RowFilter一起使用,并指定regex,但它将以完整表扫描结束

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谢谢你的回复Suman,但是我的问题是,如果我们没有前缀信息,搜索键可能位于rowkey的任何部分。我认为HBase在这种情况下性能不佳,需要进行完整的表扫描。我只是想确认一下。谢谢是的,您可以使用列过滤器,但我相信这需要一个完整的表扫描。