2017-01-10 12 views
0

HBase APIの新機能で、次のようなときに奇妙な結果が見られます。複数のフィルタリング条件を使用したHBaseスキャンAPI

複数のフィルタに基づいてスキャンしようとしています。私はすべてのフィルタ条件を渡したいと思います。私は以下のコードを使用しています。

FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL); 
Filter pageFilter = new PageFilter(5000); 
filterList.addFilter(pageFilter); 
SingleColumnValueFilter filterOne = new SingleColumnValueFilter(Bytes.toBytes(COLUMN_FAMILY), 
       Bytes.toBytes(COLUMN_NAME1), CompareOp.EQUAL, Bytes.toBytes(value1)); 
filterList.addFilter(filterOne); 
SingleColumnValueFilter filterTwo = new SingleColumnValueFilter(Bytes.toBytes(COLUMN_FAMILY), 
       Bytes.toBytes(COLUMN_NAME2), CompareOp.EQUAL, Bytes.toBytes(value2)); 
filterList.addFilter(filterOne); 
filterList.addFilter(filterTwo); 

//Scan 
Scan scan = new Scan(); 
scan.setFilter(filterList); 
Result result; 
try { 
      scanner = hTable.getScanner(scan); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
while ((result = scanner.next()) != null) { 
    //print the result. 
} 
//If I am adding multiple SingleColumnValueFilter and I am not doing a addCoulmn() to the scan I am not getting any result even though there are records. 

//If I am adding a column to scan then I am seeing results. Initially the result set is matching my filter condition but if I am running for bigger hbase data set then I am seeing bad results. 

//If I am adding multiple addCoulmn() to my scan then I am not seeing any result 

私は適切な例を探してみますが、どれも動作していないようです。この方向への助けに感謝します。前もって感謝します。

+0

を役に立てば幸い:?setFilterIfMissing(boolean)方法を確認してください – Comencau

+0

スキャナ変数の作成場所がわかりません – Comencau

答えて

0

すべてのフィルタが通過する必要がある(「AND」動作のような)FilterListを指定しました。フィルタのリストには、2つの矛盾しているSingleColumnValueFilterがあります。列COLUMN_FAMILY:COLUMN_NAMEは、同時にvalue1とvalue2に等しくなければなりません。私はそれがあなたの第1および第3のコメントの文脈で結果を得ない理由だと思う。

2番目のコメントについては、SingleColumnValueFilterは、その列がスキャンに存在する場合にのみ適用されることを覚えておく必要があります。それはあなたが見るものの説明かもしれません。 https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.html#setFilterIfMissing-boolean-

が、それはなぜあなたは二回filterTwoを追加する

+0

私は誤植を編集しました。それらは、同じ列ファミリの2つの異なる列です。 2つ目の点については、両方の列をスキャンに追加しても、目的の結果が得られません。 – hopeIsTheonlyWeapon

+0

私はコードを修正しました。希望の結果が得られていません。 – hopeIsTheonlyWeapon

関連する問題