繁体   English   中英

在hbase中指定多个过滤器

[英]Specify multiple filters in hbase

有没有办法在扫描期间指定多个过滤器? 例如 - 同时指定ColumnFamilyFilterRowFilter

Filter rowFilter =
                new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator(
                        rowFilterString));
        Scan s = new Scan();
        s.setFilter(rowFilter);

我还想为s添加一个ColumnFilter 但它显然会覆盖最新的过滤器。

您必须创建一个FilterList对象,并添加所需的所有过滤器,并将此FilterList对象设置为过滤器。 您可以使用构造函数,也可以使用addFilter()方法将过滤器添加到过滤器列表中。

FilterList filterList = new FilterList();
filterList.addFilter(new RowFilter(...));
filterList.addFilter(new ColumnFilter(...));
Scan s = new Scan();
s.setFilter(filterList);

如果要添加多个过滤器,请记住默认情况下filterlist使用

FilterList.Operator.MUST_PASS_ALL

这意味着必须传递所有过滤器(AND条件)。 采用

FilterList.Operator.MUST_PASS_ONE 

如果要对过滤器应用OR条件。

您可以使用FilterList对象添加过滤器列表,并可以使用ArrayList控制过滤器的顺序。 每个FilterList只接受一个运算符[OR,AND]。但是,可以通过将多个过滤器列表实例及其自己的运算符添加到父过滤器列表来创建过滤器列表的层次结构。

例如:filters_1和filters_2是两个过滤器列表。

FilterList filterList1 = new FilterList(FilterList.Operator.MUST_PASS_ONE,filters_1);
FilterList filterList2 = new FilterList(FilterList.Operator.MUST_PASS_ALL,filters_2);


List<Filter> filterAggregate = new ArrayList<>();
filterAggregate.add(filterList1);
filterAggregate.add(filterList2);

FilterList filterList3 = new FilterList(FilterList.Operator.MUST_PASS_ALL,filterAggregate);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM