当使用大于(>)符号时,我很难限制MapReduce作业迭代的列范围。
我使用setInputWhereClauses()来指定列范围,例如:
CqlConfigHelper.setInputWhereClauses(conf, "ts > '634926385000000000'");
使用LT(<)按预期工作,但在使用GT(>)时抛出InvalidRequestException。
了java.lang.RuntimeException 在org.apache.cassandra.hadoop.cql3.CqlPagingRecordReader $ RowIterator.executeQuery(CqlPagingRecordReader.java:646) 引起:InvalidRequestException(原因:在ts上发现无效限制) 在org.apache.cassandra.thrift.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子句与记录分页冲突。我是如何解决这个问题的?