![](/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.