HBase Java API:DML:Filter

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.MultipleColumnPrefixFilter;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;

public class ScanFilterTest01 {
    
    
    public static void main(String[] args) throws IOException {
    
    
        ScanFilterTest01 test01 = new ScanFilterTest01();
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum", "node1:2181,node2:2181,node3:2181");
        Connection connection = ConnectionFactory.createConnection(configuration);

        TableName tableName = TableName.valueOf("111:01");
        Table table = connection.getTable(tableName);
        test01.scanFilter(table);

        table.close();
        connection.close();


    }

    private void scanFilter(Table table) throws IOException {
    
    
        Scan scan = new Scan();

        // 需求1:查询2021年1月和2月的数据
        /*scan.withStartRow(Bytes.toBytes("202101"));
        scan.withStopRow(Bytes.toBytes("202103"));*/

        // 需求2:查询2021年的所有数据
        /*PrefixFilter prefixFilter = new PrefixFilter(Bytes.toBytes("2021"));
        scan.setFilter(prefixFilter);*/

        // 需求3:查询所有age = 20的数据
        /*SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(
                Bytes.toBytes("basic"),
                Bytes.toBytes("age"),
                CompareOperator.EQUAL,
                Bytes.toBytes("20")
        );
        singleColumnValueFilter.setFilterIfMissing(true);
        scan.setFilter(singleColumnValueFilter);*/

        // 需求4:查询所有数据的name和age这两列
        /*byte[][] bytes={Bytes.toBytes("name"),Bytes.toBytes("age")};
        MultipleColumnPrefixFilter multipleColumnPrefixFilter = new MultipleColumnPrefixFilter(bytes);
        scan.setFilter(multipleColumnPrefixFilter);*/

        // 需求5:查询所有年age = 20的人的name和age
        SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(
                Bytes.toBytes("basic"),
                Bytes.toBytes("age"),
                CompareOperator.EQUAL,
                Bytes.toBytes("20")
        );
        singleColumnValueFilter.setFilterIfMissing(true);
        byte[][] bytes={
    
    Bytes.toBytes("name"),Bytes.toBytes("age")};
        MultipleColumnPrefixFilter multipleColumnPrefixFilter = new MultipleColumnPrefixFilter(bytes);
        FilterList filterList = new FilterList();
        filterList.addFilter(singleColumnValueFilter);
        filterList.addFilter(multipleColumnPrefixFilter);
        scan.setFilter(filterList);

        ResultScanner scanner = table.getScanner(scan);
        for (Result result : scanner) {
    
    
            for (Cell cell : result.rawCells()) {
    
    
                System.out.println(
                          Bytes.toString(CellUtil.cloneFamily(cell)) //获取这一列的列族,转换为字符串类型
                          + "\t" +
                          Bytes.toString(CellUtil.cloneQualifier(cell)) //获取这一列的名称,转换为字符串类型
                          + "\t" +
                          Bytes.toString(CellUtil.cloneValue(cell)) //获取这一列的值,转换为字符串类型
                          + "\t" +
                          cell.getTimestamp() //获取时间戳
                );
            }
            System.out.println("-----------------------------------------");
        }
    }
}

Guess you like

Origin blog.csdn.net/tian_1_2_3/article/details/115505799