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

私もsColumnFilterを追加したいです。しかし、それは明らかに最新のフィルターを無効にします。

答えて

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シェルで同じことができますか? – priya

7

、デフォルトでfilterlistが渡される(AND条件)しなければならないすべてのフィルタを意味

FilterList.Operator.MUST_PASS_ALL 

を使用していることを覚えています。 使用

FilterList.Operator.MUST_PASS_ONE 

フィルタにOR条件を適用する場合は、

0

FilterListオブジェクトを使用してフィルタリストを追加し、ArrayListを使用してフィルタの順序を制御できます。各FilterListは1つの演算子[OR、AND]のみを取ります。しかし、フィルタリストの階層は、独自の演算子を持つ複数のフィルタリストインスタンスを親フィルタリストに追加することによって作成できます。

例: filters_1 & filters_2は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) 
関連する問題