HBase过滤器基本概念

HBase过滤器基本概念

过滤器可以根据列族、列、版本等更多的条件来对数据进行过滤,基于HBase本身提供的三维有序(主键、列、版本有序),这些过滤器可以高效地完成查询过滤的。

使用过滤器至少需要两类参数:
hbase过滤器

操作符

HBase提供了枚举类型的变量来表示这些抽象的操作符

  • LESS (<)
  • LESS_OR_EQUAL (<=)
  • EQUAL (=)
  • NOT_EQUAL (!=)
  • GREATER_OR_EQUAL (>=)
  • GREATER (>)
  • NO_OP (no operation)
    2.x 前 org.apache.hadoop.hbase.filter.CompareFilter.CompareOp,3.0后移除该枚举。
    2.x后 org.apache.hadoop.hbase.CompareOperator
    HBase CompareOperator

比较器

代表具体的比较逻辑,如字节级的比较、字符串级的比较等,它作为过滤器的核心组成之一。

  • RegexStringComparator 正则比较器
  • SubstringComparator 子字符串比较
  • BinaryPrefixComparator 前缀二进制比较器
  • BinaryComparator 二进制比较器

过滤器使用例子

列如我要查找
tableName表family列族qualifier列,
值为以’liuyu’开头字符串的行,
即列值匹配(CompareOperator.EQUAL等于)以’liuyu’开头字符串的行。
使用 RegexStringComparator比较器,作为SingleColumnValueFilter 列值 过滤器组成

操作示例如下

        //获取HBase配置信息
        Configuration configuration = HBaseConfiguration.create();
        Connection conn = null;
        try {
            conn = ConnectionFactory.createConnection(configuration);
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        //初始化HBase 表
        Table table=conn.getTable(TableName.valueOf("tableName"));

        Scan scan = new Scan();
        //列值过滤器
        //列族
        String family="family";
        //列
        String qualifier="qualifier";
        //比较器,正则比较器,以'liuyu'开头的字符串
        RegexStringComparator comparator=new RegexStringComparator("liuyu.");
        //设定值与以'liuyu'开头字符串 相等 CompareOperator.EQUAL
        SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(family.getBytes(),
                qualifier.getBytes(), CompareOperator.EQUAL, comparator);
        scan.setFilter(singleColumnValueFilter);
        ResultScanner resultScanner=table.getScanner(scan);
        for(Result result: resultScanner){
            String rowkey = Bytes.toString(result.getRow());
            System.out.println("row key :" + rowkey);
            Cell[] cells = result.rawCells();
            for (Cell cell : cells) {
                System.out.println(Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength())+":"+Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()) + "::" +
                        Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
            }
            System.out.println("-----------------------------------------");
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值