2016-08-22 9 views

答えて

2

あなたがsetRowPrefixFilter APIを使用することはできませんこの場合は、あなたがより一般的なsetFilter APIを使用する必要があり、のようなもの:私はバッチセットプレフィックスフィルタを実装してい

scan.setFilter(
    new FilterList(
    FilterList.Operator.MUST_PASS_ONE, 
    new PrefixFilter('xx'), 
    new PrefixFilter('yy') 
) 
); 
+1

このソリューションのパフォーマンスに関する注意:全テーブルスキャンを行い、すべての行をこれらのフィルタに渡しています。一般に、これは非常に非効率的です。大きなテーブルでは、 'scan.setRowPrefixFilter(prefix)'を使って複数のスキャンを行うプレフィックスのほんの一握りが高速になるかもしれません。 –

2

私は試してみましたが、あなたがRowPrefixFilterに正規表現を追加することができそうですしないので、私は解決策を推測

scan.setRowPrefixFilter("x") 
scan.setRowPrefixFilter("y") 

これで2つのリクエストを行います。これにより、必要な行が表示されます。

+0

あなたは「x」を上書きするので、それは「Y」で始まるキーのみを返すことのようにそれを行う場合。私の目標は、両方のキーの結果を持つ1スキャンオブジェクトを取得することです。 – MosheCh

+0

私の悪い、私はあなたが別々にスキャンを実行する必要があることを追加することを忘れてしまった。 1つを実行し、結果を格納し、2つ目の結果を追加してください。 –

1

、多分あなた

助けることができます
List<String> bindCodes = new ArrayList<>(); 
    bindCodes.add("CM0001"); 
    bindCodes.add("CE7563"); 
    bindCodes.add("DR6785"); 

    Scan scan = new Scan(); 
    scan.setCaching(50);//set get batch numbers 
    //set Column 
    scan.addColumn(HTableColumnEnum.GPS_CF_1.getCfName().getBytes(), LOCATION_CREATE_DATE_ARRAY); 
    //set Family 
    scan.addFamily(HTableColumnEnum.GPS_CF_1.getCfName().getBytes()); 

    //create filterList 
    FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE); 
    //put mulit prefix row key 
    bindCodes.forEach(s -> { 
     filterList.addFilter(new PrefixFilter(Bytes.toBytes(s))); 
    }); 

    //set filterList to scan 
    scan.setFilter(filterList); 
関連する問題