使用CompositeType从客户端获取插入错误

时间:2013-08-01 03:08:37

标签: cassandra

我正在尝试使用一个列系列,我可以使用一个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进行此类查询的任何建议。

最诚挚的问候, 托尼

2 个答案:

答案 0 :(得分:3)

您似乎使用的DataStax Java driver仅支持 CQL3,对我而言,您似乎已使用Thrift API定义了表。结合2将导致你遇到像这样的问题。

我在另一个SO question上发布了一组链接,涵盖了两个界面之间的差异。

答案 1 :(得分:0)

该消息表示您缺少“key2”列(CompositeType的第二部分)。

但是像Alex告诉你的那样,正确的方法是从CQL创建表[即,使用cqlsh]而不是尝试手动修改CompositeTypes。 “Cassandra团队”中的任何人都会告诉你同样的事情。资料来源:我是Apache Cassandra项目主席和DataStax Cassandra团队负责人。