2013-08-26 2 views
8

스캔하는 동안 여러 개의 필터를 지정하는 방법이 있습니까? 예 : ColumnFamilyFilterRowFilter을 모두 지정 하시겠습니까? hbase에 여러 개의 필터 지정

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

나는 또한 ColumnFilter s에 추가하고 싶었다. 하지만 분명히 최신 필터를 무시합니다.

답변

18

개체를 만들어야하며 원하는 모든 필터를 추가하고이 FilterList 개체를 필터로 설정해야합니다. 생성자를 사용하거나 addFilter() 메서드를 사용하여 필터를 필터 목록에 추가 할 수 있습니다. 여러 필터를 추가하는 경우

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

THanks. hbase shell에서 어떻게 작동합니까? – priya

7

후 기본적으로 filterlist 통과 (AND 조건)해야 모든 필터를 의미

FilterList.Operator.MUST_PASS_ALL 

를 사용하는 기억 않습니다. 사용

FilterList.Operator.MUST_PASS_ONE 

당신이 필터를 신청 OR 조건하려면 .

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) 
관련 문제