我正在尝试使用过滤器列表来检索范围内的行,但未成功。
以下是我的代码段。
我想检索1000到2000之间的数据。
HTable表=新的HTable(conf,“TRAN_DATA”);
List<Filter> filters = new ArrayList<Filter>();
SingleColumnValueFilter filter1 = new SingleColumnValueFilter(Bytes.toBytes("TRAN"),
Bytes.toBytes("TRAN_ID"),
CompareFilter.CompareOp.GREATER, new BinaryComparator(Bytes.toBytes("1000")));
filter1.setFilterIfMissing(true);
filters.add(filter1);
SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes("TRAN"),
Bytes.toBytes("TRAN_ID"),
CompareFilter.CompareOp.LESS,new BinaryComparator(Bytes.toBytes("2000")));
filters.add(filter2);
FilterList filterList = new FilterList(filters);
Scan scan = new Scan();
scan.setFilter(filterList);
ResultScanner scanner1 = table.getScanner(scan);
System.out.println("Results of scan #1 - MUST_PASS_ALL:");
int n = 0;
for (Result result : scanner1) {
for (KeyValue kv : result.raw()) {
System.out.println("KV: " + kv + ", Value: "
+ Bytes.toString(kv.getValue()));
{
n++;
}
}
scanner1.close();
尝试使用所有可能的方式
1. SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes(“TRANSACTIONS”),
Bytes.toBytes(“TRANS_ID”),
CompareFilter.CompareOp.LESS,新的SubstringComparator(“5000”));
Bytes.toBytes(“TRANS_ID”),
CompareFilter.CompareOp.LESS,Bytes.toBytes(“5000”));以上方法均无效:(
最佳答案
在这里肯定要关闭的一件事是,在创建FILTERLIST时,还必须指定FilterList.Operator,否则不能确定filterlist如何处理多个过滤器。在你的情况下应该是这样的:
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL, filters);
看看是否有帮助。
关于hadoop - HBase “between”过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10429412/