Hbase API 多条件查询

public static ResultScanner scan(String tableName, String family, List<String> columns, List<String> patterns) throws IOException {
        Connection connection = connHolder.get();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();

        //过滤器列表
        FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ONE);
        for (int i = 0; i <columns.size(); i++) {
            SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(Bytes.toBytes(family), Bytes.toBytes(columns.get(i)),
                    CompareOperator.EQUAL, Bytes.toBytes(patterns.get(i)));
            //设置如果没有符合的就不返回所有列信息
            singleColumnValueFilter.setFilterIfMissing(true);
            list.addFilter(singleColumnValueFilter);
        }
        //设置过滤器
        scan.setFilter(list);
        ResultScanner results = table.getScanner(scan);
        return results;
    }
  • colums为多个条件所在的列

  • patterns为多个要查询的值

  • FilterList.Operator.MUST_PASS_ONE 的意思为只要符合其中一个条件就通过,等同于sql中的or

  • singleColumnValueFilter.setFilterIfMissing(true) true必设,不然会返回所有的信息

posted @ 2020-10-18 17:11  Nevesettle  阅读(441)  评论(1编辑  收藏  举报