【问题标题】:HBASE - How to apply 'LIKE' filter operation using SingleColumnValueFilter in HBASE?HBASE - 如何在 HBASE 中使用 SingleColumnValueFilter 应用“LIKE”过滤器操作?
【发布时间】:2019-03-22 03:09:03
【问题描述】:

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

请帮忙。

【问题讨论】:

    标签: hbase


    【解决方案1】:

    您可以将 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

    【讨论】:

    • 谢谢 Nishu,您能否提供一个等效的 Java API,因为我正在使用 Java 进行操作?
    • @Ankur : 如果解决了你的问题,欢迎采纳。
    • 非常感谢,非常感谢!抱歉延迟回复。
    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2017-08-24
    相关资源
    最近更新 更多