我有一个hbase表,其模式如下:行键,col1,col2,col3我想根据两列上的范围查询表,例如:1000<行键<1000000和200<co1<300我该怎么做?我注意到javaapi提供了multirowrangefilter,它只能过滤一列,但是我想根据范围过滤两列。有人有什么想法吗?先谢谢你。
tvmytwxo1#
按1行键范围和1列范围查询时, MultiRowRangeFilter 不适用,因为它要过滤多行键范围,例如
MultiRowRangeFilter
100 < rowKey < 200 AND 1500 < rowKey < 2000
你想使用 Scan 在带有 FilterList 第2页 SingleColumnValueFilter .
Scan
FilterList
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
1条答案
按热度按时间tvmytwxo1#
按1行键范围和1列范围查询时,
MultiRowRangeFilter
不适用,因为它要过滤多行键范围,例如你想使用
Scan
在带有FilterList
第2页SingleColumnValueFilter
.