我正在尝试使用一个列系列,我可以使用一个CQL键来获取基于键和另一个CQL的行,使用“IN”关键字获得一个键列表并使用ORDER BY条款。我得到的数据来自Column值而不是Column Name。我遇到的问题是尝试设置列系列来实现这一目标。我有这个cli命令来创建列族,但是当我去插入时,我得到一个关于主键的奇怪异常。下面是在创建列族之后插入列值时的cli和错误。
用于创建列族的cli命令:
create column family video_item_details
with key_validation_class = 'CompositeType(IntegerType,UTF8Type)'
and comparator = 'UTF8Type'
and column_metadata = [
{column_name : key, validation_class: IntegerType, index_type: KEYS}
{column_name : name, validation_class : 'UTF8Type', index_type: KEYS}
{column_name : description, validation_class :'UTF8Type'}
{column_name : url, validation_class : 'UTF8Type'}
{column_name : play_time, validation_class : 'UTF8Type'}
{column_name : type, validation_class : 'UTF8Type'}
]
with caching='ALL';
插入期间的错误是:
插入com.datastax.driver.core.exceptions.InvalidQueryException时出错:缺少必需的PRIMARY KEY部分key2
正在尝试执行的insert语句是:
INSERT INTO video.video_item_details(key, name, description, url, play_time, type) values
(1,'Gettysburg','Gettysburg Movie Trailer','test','2:53','Streaming')
感谢您提供有关如何让Cassandra进行此类查询的任何建议。
最诚挚的问候, 托尼
答案 0 :(得分:3)
您似乎使用的DataStax Java driver仅支持 CQL3,对我而言,您似乎已使用Thrift API定义了表。结合2将导致你遇到像这样的问题。
我在另一个SO question上发布了一组链接,涵盖了两个界面之间的差异。
答案 1 :(得分:0)
该消息表示您缺少“key2”列(CompositeType的第二部分)。
但是像Alex告诉你的那样,正确的方法是从CQL创建表[即,使用cqlsh]而不是尝试手动修改CompositeTypes。 “Cassandra团队”中的任何人都会告诉你同样的事情。资料来源:我是Apache Cassandra项目主席和DataStax Cassandra团队负责人。