2つのQualifierFiltersを使用してHBaseテーブルのスキャンをフィルタリングしたいと考えています。 特定の列 'col_A' および(!)を持つテーブルの行だけを取得することを意味します。複数のQualifierFilterをHBaseの行に適用する方法
我々の現在のアプローチは、次のようになります。両方のカラムのcol_A 'と「col_B」を持っているHBaseのテーブル内の複数の行があるが
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
Filter filter1 = new QualifierFilter(CompareOp.EQUAL, new BinaryComparator("col_A".getBytes()));
filterList.addFilter(filter1);
Filter filter2 = new QualifierFilter(CompareOp.EQUAL, new BinaryComparator("col_B".getBytes()));
filterList.addFilter(filter2);
Scan scan = new Scan();
scan.setFilter(filterList);
...
ResultScannerは、このスキャンからの結果を返しません。
filter1だけをスキャンに適用すると、すべて正常に動作しますが、 'col_A'を持つすべての行が取得されます。 フィルタ2のみをスキャンに適用すると同じです。私たちは 'col_B'を持つすべての行を取得します。
これら2つのフィルタを組み合わせても、結果は得られません。
テーブルからcol_Aとcol_Bを持つ行だけを取得する正しい方法は何でしょうか?
答えをありがとう。ちょうどそれを試してみて、私たちの場合にはうまくいくしかし、問題はパフォーマンスです。私は彼らがFilterListに入れられるようにフィルタが順序で評価されると仮定します。したがって、col_Aが存在する行が多数ある場合、HBaseはこの列の実際の値と照合する必要があります。それはかなり高価に聞こえる。実際のセル値がチェックされる前に、両方の列の存在を最初に評価する方法はありますか? – Henrik
@Henrikあなたはどれくらいのデータを持っているのか分かりませんが、私はあなたが正しいと恐れています。別のオプションは、あなたが探している修飾子リストを取るカスタムフィルタを実装することです –