我有一个包含以下数据的HBase表:
key1 c:hasErrors false
key2 c:hasErrors true
key3 c:hasErrors false
我想检查表中任何地方的列限定符hasErrors
是否具有值true
。
显然我可以进行扫描:
Scan scan = new Scan();
scan.addColumn(colFam, colQual);
Filter filter = new SingleColumnValueFilter(colFam, colQual, CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes("true")));
scan.setFilter(filter);
ResultScanner results = table.scan(scan, auditTableName);
但这是不可取的,因为任何匹配的行都将被拉回到我的应用中,并且我必须检查是否results.next() != null
。
是否可以只返回一个布尔值,告诉我该值是否至少存在一行?
答案 0 :(得分:0)
看看
org.apache.hadoop.hbase.filter.SingleColumnValueFilter
/**
* Set whether entire row should be filtered if column is not found.
*
* If true, the entire row will be skipped if the column is not found.
*
* If false, the row will pass if the column is not found. This is default.
* @param filterIfMissing flag
*/
public void setFilterIfMissing(boolean filterIfMissing) {
this.filterIfMissing = filterIfMissing;
}
根据文档,它不会返回不匹配的行。
P.S。如果使用Get,则您有setCheckExistenceOnly
方法用于类似目的