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
我在 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