我通过仅使用我想要的特定列名称和使用列过滤器的列范围设置扫描仪来扫描 HBase。
添加单独的行:
known_fields.forEach(known_field ->scanner.addColumn("x".getBytes(), known_field.getBytes()));
我还添加了一个列过滤器:
scanner.setFilter(new ColumnRangeFilter(start, true, stop, true));
所有变量都有正确的值。我正在扫描如下
scanner.setCacheBlocks(false);
scanner.setBatch(1000);
ResultScanner results = null;
Table table = null;
try {
table = connection.getTable("table_test");
results = table.getScanner(scanner);
boolean hasPerformed;
for (final Result result : results) {
...
results
始终为空。但是,如果我注释掉 scanner.setFilter(new ColumnRangeFilter(start, true, stop, true));
或 scanner.addColumn(
,结果非常好。它不适用于组合。
如何实现已知列与范围列的组合?
最佳答案
如果 scanner.addColumn
的列数较少,您可以使用 FilterList使用 MUST_PASS_ONE
运算符并传递给它乘以 ColumnRangeFilter
。添加要扫描的列在这种情况下相当于添加具有重合开始和结束列的 ColumnRangeFilter。例如
Filter filter = new FilterList(FilterList.Operator.MUST_PASS_ONE);
known_fields.forEach(known_field ->
filter.addFilter(new ColumnRangeFilter(known_field.getBytes(), true,
known_field.getBytes(), true));
filter.add(new ColumnRangeFilter(start, true, stop, true));
scan.setFilter(filter);
关于java - HBase addColumn 和 setFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33915006/