简体   繁体   中英

Specify multiple filters in hbase

Is there a way to specify multiple filters during a scan? For example - Specify both a ColumnFamilyFilter and RowFilter ?

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

I wanted to also add a ColumnFilter to s . But it obviously overrides the latest filter.

You have to create a FilterList object, and add all the filters you want to that, and set this FilterList object as the filter. You can either use the constructor or use the addFilter() method to add filters to the filter list.

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

if you are adding multiple filters then do remember that by default filterlist uses

FilterList.Operator.MUST_PASS_ALL

which means all filter must be passed (AND condition). Use

FilterList.Operator.MUST_PASS_ONE 

if you want to apply OR condition for filters.

You can use the FilterList object to add your list of filters and can control the order of filters using an ArrayList. Each FilterList takes in only a single operator[OR, AND].But, an hierarchy of filter lists can be created by adding multiple filter list instances with their own operators to a parent filter list.

For example: filters_1 & filters_2 are two filter lists.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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