我基本上有相同的问题,在Cassandra与Pig下面的复合键。唯一的区别是我尝试在pig的where\u子句中查询复合键的一部分。
数据结构类似于前面提到的问题,我将复制一些代码/上下文以最小化对该问题的读取。
我们有一个cql表,它看起来像这样:
CREATE table data (
occurday text,
seqnumber int,
occurtimems bigint,
unique bigint,
fields map<text, text>,
primary key ((occurday, seqnumber), occurtimems, unique)
)
我没有同时查询seqnumber和occurday(就像前面提到的问题一样),而是尝试查询其中一个键。
但是,如果我在pig中作为加载的一部分执行这个查询,事情就不起作用了。
-- Need to URL encode the query
data = LOAD 'cql://ks/data?where_clause=occurday%3D%272013-10-01%27' USING CqlStorage();
给予
java.lang.RuntimeException
at org.apache.cassandra.hadoop.cql3.CqlPagingRecordReader$RowIterator.executeQuery(CqlPagingRecordReader.java:665)
at org.apache.cassandra.hadoop.cql3.CqlPagingRecordReader$RowIterator.<init>(CqlPagingRecordReader.java:301)
at org.apache.cassandra.hadoop.cql3.CqlPagingRecordReader.initialize(CqlPagingRecordReader.java:167)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigRecordReader.initialize(PigRecordReader.java:181)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:522)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
Caused by: InvalidRequestException(why:occurday cannot be restricted by more than one relation if it includes an Equal)
at org.apache.cassandra.thrift.Cassandra$prepare_cql3_query_result$prepare_cql3_query_resultStandardScheme.read(Cassandra.java:51017)
at org.apache.cassandra.thrift.Cassandra$prepare_cql3_query_result$prepare_cql3_query_resultStandardScheme.read(Cassandra.java:50994)
at org.apache.cassandra.thrift.Cassandra$prepare_cql3_query_result.read(Cassandra.java:50933)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
at org.apache.cassandra.thrift.Cassandra$Client.recv_prepare_cql3_query(Cassandra.java:1756)
at org.apache.cassandra.thrift.Cassandra$Client.prepare_cql3_query(Cassandra.java:1742)
at org.apache.cassandra.hadoop.cql3.CqlPagingRecordReader$RowIterator.prepareQuery(CqlPagingRecordReader.java:605)
at org.apache.cassandra.hadoop.cql3.CqlPagingRecordReader$RowIterator.executeQuery(CqlPagingRecordReader.java:635)
... 7 more
基本上我的问题是,我做错了什么或者我不明白什么?
正如我从cqlpagingrecorderreader中了解到的,当显式声明分区键时,我应该能够使用分区键的一部分进行查询?
另外,在阅读add cqlrecordreader以利用本机cql分页时,我得到的印象是这应该是可能的,但是我(在我看来)没有明确的方向来完成这一点。
在这一点上,任何帮助都是非常受欢迎的。
当做,
伦纳特·韦杰
附言。
我正在运行Cassandra2.0.9与Pig0.13.0
1条答案
按热度按时间flvtvl501#
根据cassandra-6311,我认为您需要应用6331-v2-2.0-branch.txt补丁,重新编译pig,然后将load语句更新为:
关键的变化是
USING CqlInputFormat()
触发了新的CqlRecordReader
这是在Cassandra2.0.7中发布的。编辑:注意异常是从
CqlPagingRecordReader
也就是说你还在用旧的唱片阅读器。