五、HBase根据rowKey查询

2018-12-13  本文已影响0人  紫雨杰
1、RowFilter用于过滤row key
    Operator                  Description
      LESS                      小于
  LESS_OR_EQUAL                 小于等于
      EQUAL                     等于
      NOT_EQUAL                 不等于
    GREATER_OR_EQUAL            大于等于
      GREATER                    大于
      NO_OP                     排除所有

    Comparator                      Description
BinaryComparator                使用Bytes.compareTo()比较
BinaryPrefixComparator          和BinaryComparator差不多,从前面开始比较

NullComparator     Does not compare against an actual value but whether a given one is null, 
                   or not  null.

BitComparator           Performs a bitwise comparison, providing a BitwiseOp class with OR, 
                        and XOR operators.
RegexStringComparator            正则表达式
SubstringComparator              把数据当成字符串,用contains()来判断
public static List<Property> queryTable(String tableName, String rowKeyReg) {
        TableName name = TableName.valueOf(tableName);
        try (Table table = CONNECTION.getTable(name)) {
            Scan scan = new Scan();

            System.out.println("小于等于rowKeyReg的行(rowKeyReg可以为指定的值)");
                Filter filter = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,
                                new BinaryComparator(rowKeyReg.getBytes()));
                scan.setFilter(filter);
                ResultScanner scanner = table.getScanner(scan);
                for (Result rs : scanner) {
                        System.out.println(rs);
                }
                scanner.close();

            System.out.println("正则获取结尾为a的行");
                Filter filter1 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                new RegexStringComparator(".*a));
                scan.setFilter(filter1);
                ResultScanner scanner1 = table.getScanner(scan);
                for (Result rs : scanner1) {
                        System.out.println(rs);
                }
                scanner1.close();

            System.out.println("包含有b的行");
                Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                new SubstringComparator("b"));
                scan.setFilter(filter2);
                ResultScanner scanner2 = table.getScanner(scan);
                for (Result rs : scanner2) {
                        System.out.println(res);
                }
                scanner2.close();

           System.out.println("开头是rowKeyReg 的");
                Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                new BinaryPrefixComparator(rowKeyReg.getBytes()));
                scan.setFilter(filter3);
                ResultScanner scanner3 = table.getScanner(scan);
                for (Result rs : scanner3) {
                        System.out.println(rs);
                }
                scanner3.close();


            Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,
                    new BinaryPrefixComparator(("\"" + rowKeyReg + "\"").getBytes()));
            scan.setFilter(filter);
            ResultScanner scanner4 = table.getScanner(scan);
            for (Result res : scanner4) {
                Cell[] cells = res.rawCells();
                System.out.println(res);
            }
        } catch (Exception e) {
            log.error("query HBase error", e);
        }
        return null;
    }
上一篇 下一篇

猜你喜欢

热点阅读