HBase的JavaAPI使用--进阶篇--过滤器的使用

本文深入探讨HBase的JavaAPI使用,重点介绍过滤器的运用,包括比较过滤器(RowFilter、FamilyFilter、QualifierFilter、ValueFilter)、专用过滤器(SingleColumnValueFilter、SingleColumnValueExcludeFilter、PrefixFilter、PageFilter)以及FilterList的综合查询。通过实例代码展示如何利用过滤器进行数据查询、删除和分页操作。
摘要由CSDN通过智能技术生成

        本篇博客,小菌为大家带来HBase的进阶使用,关于基础入门操作大家可以去阅览小菌之前的博客《HBase的JavaAPI使用–基础篇》

        在展示代码之前先为大家介绍一下过滤器,同时它也是我们这篇博客介绍的主角。

过滤器的类型很多,但是可以分为两大类——比较过滤器,专用过滤器
过滤器的作用是在服务端判断数据是否满足条件,然后只将满足条件的数据返回给客户端;

hbase过滤器的比较运算符:

LESS <
LESS_OR_EQUAL <=
EQUAL =
NOT_EQUAL <>
GREATER_OR_EQUAL >=
GREATER >
NO_OP 排除所有

Hbase过滤器的专用过滤器(指定比较机制):

BinaryComparator 按字节索引顺序比较指定字节数组,采用Bytes.compareTo(byte[])
BinaryPrefixComparator 跟前面相同,只是比较左端的数据是否相同
NullComparator 判断给定的是否为空
BitComparator 按位比较
RegexStringComparator 提供一个正则的比较器,仅支持 EQUAL 和非EQUAL
SubstringComparator 判断提供的子串是否出现在value中。

接下来正式上我们的代码!

一、比较过滤器

1、rowKey过滤器RowFilter

通过RowFilter过滤比rowKey 0003小的所有值出来

/**
     * hbase 行键过滤器 RowFilter
     * [通过RowFilter过滤  比rowKey  0003小的所有值出来]
     * @throws Exception
     */
    @Test
    public void rowKeyFilter() throws Exception{
   

        // 连接 数据库
        Configuration conf = new Configuration();

        conf.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");

        Connection connection = ConnectionFactory.createConnection(conf);

        //读取表
        Table mytest1 = connection.getTable(TableName.valueOf("mytest1"));

        Scan scan = new Scan();

        //创建一个过滤器,并将其添加至scan对象   <=
        RowFilter rowFilter = new RowFilter(LESS, new BinaryComparator(Bytes.toBytes("0003")));

        scan.setFilter(rowFilter);

        // scanner 为 行数据result的集合
        ResultScanner scanner = mytest1.getScanner(scan);

        for (Result result : scanner) {
   

            // 获取 rowkey
            System.out.println("rowkey:"+Bytes.toString(result.getRow()));

            // 指定列族以及列 打印 列 当中的数据出来
            System.out.println("id:"+Bytes.toInt(result.getValue("f1".getBytes(),"id".getBytes())));

            System.out.println("age:"+Bytes.toInt(result.getValue("f1".getBytes(),"age".getBytes())));

            System.out.println("name:"+Bytes.toString(result.getValue("f1".getBytes(),"name".getBytes())));

        }

        mytest1.close();

        connection.close();


    }
2、列族过滤器FamilyFilter

查询比f2列族小的所有的列族内的数据

 /**
     * 列族过滤器 FamilyFilter
     * [查询比f2列族小的所有的列族内的数据]
     * @throws Exception
     */
    @Test
    public void familyFilter() throws Exception{
   

        // 获取连接
        Configuration conf = new Configuration();

        conf.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");

        Connection connection = ConnectionFactory.createConnection(conf);

        // 获取表
        Table mytest1 = connection.getTable(TableName.valueOf("mytest1"));

        Scan scan = new Scan();

        // 创建一个过滤器并添置给scan对象
        FamilyFilter familyFilter  = new FamilyFilter(LESS, new BinaryComparator("f2".getBytes()));

        scan.setFilter(familyFilter);

        ResultScanner resultScanner = mytest1.getScanner(scan);

        for (Result result : resultScanner) {
   

            // 获取rowkey
            System.out.println(Bytes.toString(result.getRow()));


            System.out.println(Bytes.toString(result.getValue("f1".getBytes(),"name".getBytes())));

        }

        mytest1.close()
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据梦想家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值