1

使用大于 (>) 符号时,我难以限制 MapReduce 作业迭代的列范围。

我使用 setInputWhereClauses() 来指定列范围,例如:

CqlConfigHelper.setInputWhereClauses(conf, "ts > '634926385000000000'");

这使用 LT (<) 可以按预期工作,但是当我使用 GT (>) 时会引发 InvalidRequestException。

org.apache.cassandra.hadoop.cql3.CqlPagingRecordReader$RowIterator.executeQuery(CqlPagingRecordReader.java:646) 处的 java.lang.RuntimeException 原因:org.apache.cassandra.thrift 处的 InvalidRequestException(为什么:在 ts 上发现无效限制)。 Cassandra$prepare_cql3_query_result.read(Cassandra.java:39567)

谁能提出为什么它认为使用 GT 是“无效限制”?

更新

我在日志中发现 CqlPagingRecordReader 正在生成的查询:

CqlPagingRecordReader: partition keys: ["key"]
CqlPagingRecordReader: cluster columns: ["ts"]
CqlPagingRecordReader: row key validator:org.apache.cassandra.db.marshal.UTF8Type
CqlPagingRecordReader: previous RowKey: null, new row key: 1:
CqlPagingRecordReader: type: 2, query: SELECT * FROM "test_cf"
    WHERE token("key") = token(?)  AND "ts" > ?
    AND ts>'634926385000000000' LIMIT 3 ALLOW FILTERING

所以看起来我的自定义 WHERE 子句与记录分页冲突。任何想法我如何解决这个问题?

4

0 回答 0