我在HBASE表中有一列,其每个单元格包含多个值(更准确地说是复合值),如下所示:
单元格中的样本值:
'2018-10-15=33|2018-10-16=56'
基本上是键值对的集合,键为日期,值为计数。键值对由管道字符定界。
我想对此HBASE表运行扫描(最好使用SingleColumnValueFilter),以查找上面给定列的单元格具有任何特定日期(例如2018-10-15)的所有行。请注意,所讨论的列不是行键。
为了更加清楚我的要求,SQL中的类似操作如下所示:
WHERE COLUMN_X LIKE '%2018-10-15%'
如何在HBASE中为此扫描设置过滤器?
我找不到像 下面提到的一个:
org.apache.hadoop.hbase.filter.CompareFilter.CompareOp.LIKE
请帮助。
答案 0 :(得分:1)
您可以将SubstringComparator与ValueFilter一起使用。
即
<table cellspacing="0">
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
</tr>
<tr>
<td>a</td>
<td>
<div>
abcdefg
</div>
<div>
abcdefg
</div>
</td>
<td>c</td>
</tr>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
</tr>
</table>
如果要用Java实现,可以使用以下命令:
scan 'yourtable', { COLUMNS => 'cf:COLUMN_X ', FILTER => "ValueFilter(=, 'substring:2018-10-15')"}
在这里您可以找到有关如何使用比较器和过滤器的更多详细信息: http://hbase.apache.org/0.94/book/client.filter.html