2013-08-26 3 views
8

Есть ли способ указать несколько фильтров во время сканирования? Например - укажите как ColumnFamilyFilter, так и RowFilter?Укажите несколько фильтров в hbase

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

Я хотел также добавить ColumnFilter к s. Но он, очевидно, переопределяет последний фильтр.

ответ

18

Вам необходимо создать объект FilterList и добавить все фильтры, которые вы хотите к этому, и установить этот объект FilterList в качестве фильтра. Вы можете использовать конструктор или использовать метод addFilter() для добавления фильтров в список фильтров.

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

ЧТЕНИЯ. Как мне получить то же самое в оболочке hbase? – priya

7

если вы добавляете несколько фильтров, то помните, что по умолчанию filterlist использует

FilterList.Operator.MUST_PASS_ALL 

, что означает все фильтры должны быть переданы (и их состояние). Использование

FilterList.Operator.MUST_PASS_ONE 

, если вы хотите применить или условие для фильтров.

0

Вы можете использовать объект 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<Filter(); 
filterAggregate.add(filterList1) 
filterAggregate.add(filterList2) 

FilterList filterList3 = new FilterList(FilterList.Operator.MUST_PASS_ALL,filterAggregate) 
Смежные вопросы