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

How to create HBbase Compound filters in java

我了解到从 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) OR (RowFilter AND QualifierFilter)

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

希望我说清楚了。

谢谢!

A 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))

的逻辑等价物