HBASE - 如何在 HBASE 中使用 SingleColumnValueFilter 应用 'LIKE' 过滤操作?

HBASE - How to apply 'LIKE' filter operation using SingleColumnValueFilter in HBASE?

我在 HBASE table 中有一列,其每个单元格包含多个值(更准确地说是复合值),如下所示:

单元格中的示例值:

'2018-10-15=33|2018-10-16=56'

它基本上是键值对的集合,键是日期,值是计数。键值对由管道字符分隔。

我想运行扫描此 HBASE table(最好使用 SingleColumnValueFilter)以查找上面给定列的单元格具有任何特定日期的所有行,比如 2018-10-15 .请注意,相关列不是行键。

为了更清楚地说明我的要求,SQL 中的类似操作如下所示:

WHERE COLUMN_X LIKE '%2018-10-15%'

如何在 HBASE 中为此扫描设置过滤器?

我没有找到类似的比较器 下面提到的一个:

org.apache.hadoop.hbase.filter.CompareFilter.CompareOp.LIKE

请帮忙。

您可以将 SubstringComparator 与 ValueFilter 一起使用。

scan 'yourtable', { COLUMNS => 'cf:COLUMN_X ', FILTER => "ValueFilter(=, 'substring:2018-10-15')"}

如果您想在 Java 中实现它,您可以使用以下内容:

SubstringComparator comp = new SubstringComparator("2018-10-15");   

SingleColumnValueFilter filter = new SingleColumnValueFilter(
    Bytes.toBytes("cf"),
    Bytes.toBytes("column_X"),
    CompareOp.EQUAL,
    comp
    );
scan.setFilter(filter);

您可以在此处找到有关如何使用比较器和过滤器的更多详细信息: http://hbase.apache.org/0.94/book/client.filter.html