更新时间:2024-12-10 GMT+08:00
使用HBase过滤器Filter
功能简介
HBase Filter主要在Scan和Get过程中进行数据过滤,通过设置一些过滤条件来实现,如设置RowKey、列名或者列值的过滤条件。
代码样例
以下代码片段在com.huawei.bigdata.hbase.examples包的“HBaseExample”类的testFilterList方法中。
样例代码获取方式请参考获取MRS应用开发样例工程。
代码样例:
public void testFilterList() {
LOG.info("Entering testFilterList.");
Table table = null;
// Instantiate a ResultScanner object.
ResultScanner rScanner = null;
try {
// Create the Configuration instance.
table = conn.getTable(tableName);
// Instantiate a Get object.
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"));
// Instantiate a FilterList object in which filters have "and"
// relationship with each other.
FilterList list = new FilterList(Operator.MUST_PASS_ALL);
// Obtain data with age of greater than or equal to 20.
list.addFilter(new SingleColumnValueFilter(Bytes.toBytes("info"), Bytes.toBytes("age"),
CompareOp.GREATER_OR_EQUAL, Bytes.toBytes(new Long(20))));
// Obtain data with age of less than or equal to 29.
list.addFilter(new SingleColumnValueFilter(Bytes.toBytes("info"), Bytes.toBytes("age"),
CompareOp.LESS_OR_EQUAL, Bytes.toBytes(new Long(29))));
scan.setFilter(list);
// Submit a scan request.
rScanner = table.getScanner(scan);
// Print query results.
for (Result r = rScanner.next(); r != null; r = rScanner.next()) {
for (Cell cell : r.rawCells()) {
LOG.info(Bytes.toString(CellUtil.cloneRow(cell)) + ":"
+ Bytes.toString(CellUtil.cloneFamily(cell)) + ","
+ Bytes.toString(CellUtil.cloneQualifier(cell)) + ","
+ Bytes.toString(CellUtil.cloneValue(cell)));
}
}
LOG.info("Filter list successfully.");
} catch (IOException e) {
LOG.error("Filter list failed ", e);
} finally {
if (rScanner != null) {
// Close the scanner object.
rScanner.close();
}
if (table != null) {
try {
// Close the HTable object.
table.close();
} catch (IOException e) {
LOG.error("Close table failed ", e);
}
}
}
LOG.info("Exiting testFilterList.");
}
父主题: 开发HBase应用