HBase用のJavaクライアントを使用しています。Hbase複数のフィルタが正しく機能しない
私のrowkeys
は、timestamp-userid
の形式で与えられます。
私は値chrome
とbrowser
という列を持っている、IE
など
私が使用しているブラウザがInternet Explorerの最後の7000
分に発生したすべての行をスキャンする必要があります。
以下に2つのフィルタを追加しました。 timestamp
(接頭辞がrowkey
)が特定の範囲(最後は7000
分)内にあるかどうかを確認し、もう1つで、browser
の列値がIE
に等しいかどうかを確認してください。ここで
は私のコードです:
public static int currentUsersColumn(Table tb, String colname, String colval) throws IOException{
ArrayList<String> arl = new ArrayList<String>();
long curtime = System.currentTimeMillis();
long sevenminsago = curtime - (1000*60*7000);
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
List<MultiRowRangeFilter.RowRange> lst = new ArrayList<MultiRowRangeFilter.RowRange>();
lst.add(new MultiRowRangeFilter.RowRange(Long.toString(sevenminsago)+"-0", true, Long.toString(curtime)+"-z", true));
filterList.addFilter(new MultiRowRangeFilter(lst));
filterList.addFilter(new SingleColumnValueFilter(ColFam, Bytes.toBytes(colname), CompareOp.EQUAL, Bytes.toBytes(colval)));
Scan s = new Scan();
s.setFilter(filterList);
ResultScanner scanner = tb.getScanner(s);
for(Result rr = scanner.next(); rr!=null; rr = scanner.next()){
arl.add(Bytes.toString(rr.getRow()));
}
return arl.size();
}
問題は、私は私はまだサイズ400
のArrayList
を取得colval
ためにランダムな文字列に入れても、です。それは明らかに間違っています。
私はがかなり単純なようだと私は私のRowRangeFilter
が何とか間違っていると推測しています。
アイデア?
私はちょうどrowkeyの開始時のタイムスタンプは、hbaseで地域のホットスポットを引き起こすパフォーマンスのボトルネックだと言いたいと思います。 – halil
アドバイスをいただきありがとうございます。私のコードの問題は何ですか? –