Updated on 2024-08-16 GMT+08:00

Using an HBase Filter

Function Description

HBase Filter is used to filter data during Scan and Get. You can specify the filter criteria, such as filtering by RowKey, column name, or column value.

Sample Code

The following code snippets are in the testFilterList method in the HBaseExample class of the com.huawei.bigdata.hbase.examples packet.

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.");
}