Проверьте, существует ли значение в таблице HBase - PullRequest
0 голосов
/ 29 июня 2018

У меня есть таблица 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.

Есть ли способ просто вернуть логическое значение, сообщающее мне, присутствует ли значение хотя бы в одной строке?

1 Ответ

0 голосов
/ 02 июля 2018

Взгляните на

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 для аналогичной цели

...