我有一个hbase表,其中有一个列限定符,它将创建的时间存储为long(转换为字节数组)。我需要通过过滤创建时间在指定日期之间的所有行来计算行数。下面是我的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条答案
按热度按时间vpfxa7rd1#
代码看起来很完美。
我们也尝试过同样的方法,即使是现在也能奏效。
请您再次确认您输入的“开始日期”和“结束日期”。
另外,您使用的hbase版本是什么?