java - 如何在 java 中创建 HBbase 复合过滤器

标签 java filter hbase

我知道从 HBase shell 可以创建复合过滤器,如 (Filter1 AND Filter2) OR (Filter3 AND Filter4)

引用:http://www.cloudera.com/documentation/enterprise/5-6-x/topics/admin_hbase_filtering.html

但在 java 中,我只找到了 FilterList.Operator.MUST_PASS_ALLFilterList.Operator.MUST_PASS_ONE 运算符来定义如何处理过滤器。

在我的例子中,我想定义一个扫描,它将使用 RowFilter 仅在某些特定行上执行一些 QualifierFilter

例如:如果 rowkey 包含“$today”,则过滤掉具有限定符“number_eggs_produced”的列族,因为它太早了。否则不要过滤它。

(!RowFilter) 或 (RowFilter AND QualifierFilter)

目前我发现了 2 个不好的解决方法:

  • 我开始编写客户过滤器,但它可能已经受到支持,因为 shell 必须调用 java 代码,但我没有看到它。
  • 我手动过滤结果中的数据:

        ResultScanner scanner = table.getScanner(scan);
        for (Result result = scanner.next(); result != null; result = scanner.next())
        {
            for (Cell cell : result.listCells())
            {
                String row = Bytes.toString(CellUtil.cloneRow(cell));
                long qualifier = Long.valueOf(Bytes.toString(CellUtil.cloneQualifier(cell)));
                double value = Double.valueOf(Bytes.toString(CellUtil.cloneValue(cell)));
    
                if(row ... )
    

我希望我是清楚的。

谢谢!

最佳答案

FilterList 是可组合的。这两个不同的运算符允许您创建 AND 列表和 OR 列表。例如:

FilterList andFilter = new FilterList(Operator.MUST_PASS_ALL);
FilterList orFilter = new FilterList(Operator.MUST_PASS_ONE);

Scan scan = new Scan();
scan.setFilter(orFilter);
orFilter.addFilter(rowFilter1);
orFilter.addFilter(andFilter);  // composition

andFilter.addFilter(rowFilter2);
andFilter.addFilter(rowFilter3);

这在逻辑上等同于 (rowFilter1 || (rowFilter2 && rowFilter3))

关于java - 如何在 java 中创建 HBbase 复合过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37306871/

相关文章:

python - 将多个掩码应用于数组

python - 如何为 Python Pandas 数据框创建灵活的命令过滤器

sql-server - 如何在 HBase 中查看 3 版本的数据

hadoop - 带偏移量的 Hbase 扫描

java - 通过套接字连接在 Java 中处理字节流

java - Maven Junit 测试用例因 java.lang.NoClassDefFoundError : org/slf4j/LoggerFactory 崩溃

java - Orika - 不在 eclipse 中工作

java - Spring Boot - Web 应用程序无法停止 MVStore 编写器线程

mysql - 创建一个 preg_match 过滤器,以便只有没有重复的新 facebook 粉丝页面被添加到 sql 数据库

java - HBase MapReduce