HBase使用SingleColumnValueFilter过滤行

时间:2018-02-07 19:53:37

标签: hadoop filter hbase

我有一个HBase表,其中我有一个列限定符,它将创建的时间存储为long(转换为bytes数组)。我需要通过过滤创建时间在指定日期之间的所有行来计算行数。下面是我的java代码。

    int count = 0;
    SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-DD");
    HTable table = (HTable)connection.getTable(TableName.valueOf(tableName));
    long startTime = dateFormat.parse(startDate).getTime();
    long endTime = dateFormat.parse(endDate).getTime();

    Scan scan = new Scan();
    SingleColumnValueFilter filter1 = new SingleColumnValueFilter(ConstantsTruthy.CF_DETAIL_BYTES, ConstantsTruthy.QUAL_CREATE_TIME_BYTES, CompareFilter.CompareOp.GREATER_OR_EQUAL, Bytes.toBytes(startTime));
    filter1.setFilterIfMissing(true);
    SingleColumnValueFilter filter2= new SingleColumnValueFilter(ConstantsTruthy.CF_DETAIL_BYTES, ConstantsTruthy.QUAL_CREATE_TIME_BYTES, CompareFilter.CompareOp.LESS_OR_EQUAL, Bytes.toBytes(endTime));
    filter2.setFilterIfMissing(true);
    FilterList fl = new FilterList( FilterList.Operator.MUST_PASS_ALL);
    fl.addFilter(filter1);
    fl.addFilter(filter2);
    scan.addFamily(ConstantsTruthy.CF_DETAIL_BYTES);
    scan.setFilter(fl);
    ResultScanner rs = table.getScanner(scan);
    for (Result result = rs.next(); result != null; result = rs.next()) {
        count++;
    }
    System.out.println("Count : " + count);
    rs.close();
    table.close();

此代码运行时没有任何错误。但它返回的行只属于特定时间。它不包含时间范围内的所有行。有人可以帮助我找出我的过滤器的问题。

1 个答案:

答案 0 :(得分:0)

代码看起来很完美。

我们尝试过同样的事情,现在也在努力。

请您再次验证输入“startDate”和“endDate”。

您使用的hbase版本是什么?