• HBase第三章 过滤器


    1  列值过滤器

      SingleColumnValueFilter 对列值进行过滤。

        @Test
        public void scanDataByFilter() throws IOException {
            Table table = connection.getTable(TableName.valueOf("user"));
            Scan scan = new Scan();
            SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(Bytes.toBytes("info1"),
                    Bytes.toBytes("name"), CompareOp.GREATER, Bytes.toBytes("lisi"));
            scan.setFilter(singleColumnValueFilter);
            ResultScanner scanner = table.getScanner(scan);
            for (Result result : scanner) {
                byte[] name = result.getValue(Bytes.toBytes("info1"), Bytes.toBytes("name"));
                byte[] sex = result.getValue(Bytes.toBytes("info1"), Bytes.toBytes("sex"));
                byte[] age = result.getValue(Bytes.toBytes("info1"), Bytes.toBytes("age"));
                byte[] address = result.getValue(Bytes.toBytes("info1"), Bytes.toBytes("address"));
                System.out.println("name=" + Bytes.toString(name) + ",sex=" + Bytes.toInt(sex) + ",age=" + Bytes.toInt(age)
                        + ",address=" + Bytes.toString(address));
    
            }
        }

       扫描全表,用过滤器进行匹配,找出出满足过滤条件的元素。

      SingleColumnValueFilter

      参数:列族、列名、操作符、列值

      操作符可以为:

      CompareOp.LESS:小于

      CompareOp.LESS_OR_EQUAL:小于或者等于

      CompareOp.EQUAL:等于

      CompareOp.NOT_EQUAL:不等于

      CompareOp.GREATER_OR_EQUAL:大于或者等于

      CompareOp.GREATER:大于

      CompareOp.NO_OP:不比较

    2 列名前缀过滤器

      ColumnPrefixFilter 对列名进行过滤

    @Test
        public void scanDataByFilter2() throws IOException {
            Table table = connection.getTable(TableName.valueOf("user"));
            Scan scan = new Scan();
            ColumnPrefixFilter columnPrefixFilter = new ColumnPrefixFilter(Bytes.toBytes("name_"));
            scan.setFilter(columnPrefixFilter);
            ResultScanner scanner = table.getScanner(scan);
            for (Result result : scanner) {
                
                Cell[] rawCells = result.rawCells();
                for (Cell cell : rawCells) {
                    System.out.println("value = " + Bytes.toString(CellUtil.cloneValue(cell)));
                    System.out.println("family = " + Bytes.toString(CellUtil.cloneFamily(cell)));
                    System.out.println("qualifier = " + Bytes.toString(CellUtil.cloneQualifier(cell)));
                }
            }
        }

      找出user表中,以'name_'开头的列

    3 多个列值前缀过滤器

        @Test
        public void testMultipleColumnPrefixFilter() throws IOException {
            Table table = connection.getTable(TableName.valueOf("user"));
            Scan scan = new Scan();
            byte[][] prefixes = new byte[][] { Bytes.toBytes("name"), Bytes.toBytes("age") };
            MultipleColumnPrefixFilter multipleColumnPrefixFilter = new MultipleColumnPrefixFilter(prefixes);
            scan.setFilter(multipleColumnPrefixFilter);
            ResultScanner scanner = table.getScanner(scan);
            for (Result result : scanner) {
    
                Cell[] rawCells = result.rawCells();
                for (Cell cell : rawCells) {
                    System.out.println("value = " + Bytes.toString(CellUtil.cloneValue(cell)));
                    System.out.println("family = " + Bytes.toString(CellUtil.cloneFamily(cell)));
                    System.out.println("qualifier = " + Bytes.toString(CellUtil.cloneQualifier(cell)));
                }
            }
        }

      用于匹配多列,找出以‘name’和‘age’开头的列

    4 rowKey过滤器  

    @Test
        public void testRowFilter() throws IOException {
            Table table = connection.getTable(TableName.valueOf("user"));
            Scan scan = new Scan();
            RowFilter rowFilter = new RowFilter(CompareOp.EQUAL, new RegexStringComparator("^00004"));
            scan.setFilter(rowFilter);
            ResultScanner scanner = table.getScanner(scan);
            for (Result result : scanner) {
    
                Cell[] rawCells = result.rawCells();
                for (Cell cell : rawCells) {
                    System.out.println("value = " + Bytes.toString(CellUtil.cloneValue(cell)));
                    System.out.println("family = " + Bytes.toString(CellUtil.cloneFamily(cell)));
                    System.out.println("qualifier = " + Bytes.toString(CellUtil.cloneQualifier(cell)));
                }
            }
        }

      RegexStringComparator("^00004")正则计较器,支持正则表达式。过滤rowkey是以‘’00004‘开头的行。

  • 相关阅读:
    andrew ng 学习
    360一些笔试题
    安装visual studio2010提示“Windows Installer 服务不可用”的解决办法
    算法学习从赌钱游戏看PageRank算法
    jQuery Masonry 一个 jQuery动态网格布局的插件
    国内HTML5前端开发框架汇总
    Windows Performance Monitor 学习笔记
    ThinkPad预装win8系统机型安装win7系统的操作指导
    jQuery的Ajax的自动完成功能控件
    JavaScript的Forms验证Parsley.js
  • 原文地址:https://www.cnblogs.com/zhaobingqing/p/8243347.html
Copyright © 2020-2023  润新知