![](/img/trans.png)
[英]HBase: How to specify multiple prefix filters in a single scan operation
[英]Specify multiple filters in hbase
有没有办法在扫描期间指定多个过滤器? 例如 - 同时指定ColumnFamilyFilter
和RowFilter
?
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.