java—如何根据两列的范围查询hbase?

eyh26e7m  于 2021-06-10  发布在  Hbase
关注(0)|答案(1)|浏览(272)

我有一个hbase表,其模式如下:
行键,col1,col2,col3
我想根据两列上的范围查询表,例如:
1000<行键<1000000和200<co1<300
我该怎么做?我注意到javaapi提供了multirowrangefilter,它只能过滤一列,但是我想根据范围过滤两列。有人有什么想法吗?先谢谢你。

tvmytwxo

tvmytwxo1#

按1行键范围和1列范围查询时, MultiRowRangeFilter 不适用,因为它要过滤多行键范围,例如

100 < rowKey < 200 AND 1500 < rowKey < 2000

你想使用 Scan 在带有 FilterList 第2页 SingleColumnValueFilter .

byte[] keyStart = Bytes.toBytes(1000);
byte[] keyEnd  = Bytes.toBytes(1000000);
byte[] columnMin = Bytes.toBytes(200);
byte[] columnMax = Bytes.toBytes(300);
byte[] cf = Bytes.toBytes(familyName)
byte[] column = Bytes.toBytes(columnNameToBeFiltered)

Scan scan = new Scan(keyStart, keyEnd);
FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ALL);

SingleColumnValueFilter filter1 = new SingleColumnValueFilter(
cf, column, CompareOp.GREATER, columnMin);
list.add(filter1);

SingleColumnValueFilter filter2 = new SingleColumnValueFilter(
cf, column, CompareOp.LESS, columnMax);
list.add(filter2);
scan.setFilter(list);
ResultScanner scanner = table.getScanner(scan);
...//parsing result

相关问题