我有一个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();
此代码运行时没有任何错误。但它返回的行只属于特定时间。它不包含时间范围内的所有行。有人可以帮助我找出我的过滤器的问题。
答案 0 :(得分:0)
代码看起来很完美。
我们尝试过同样的事情,现在也在努力。
请您再次验证输入“startDate”和“endDate”。
您使用的hbase版本是什么?