0

我正在尝试拥有一个列族,我可以拥有一个 CQL 的键,以基于一个键和另一个 CQL 获得一行,其中我有一个使用“IN”关键字的键列表并有一个 ORDER BY 子句。我得到的数据来自列值而不是列名。我遇到的问题是尝试设置列族来实现这一点。我有这个 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 时出错:缺少必需的主键部分 key2

正在尝试执行的插入语句是:

INSERT INTO video.video_item_details(key, name, description, url, play_time, type) values
(1,'Gettysburg','Gettysburg Movie Trailer','test','2:53','Streaming')

感谢您提供有关如何让 Cassandra 执行此类查询的任何建议。

最好的问候,-托尼

4

2 回答 2

3

您似乎正在使用的DataStax Java 驱动程序支持CQL3,在我看来,您似乎已经使用 Thrift API 定义了表。将两者结合起来会导致您遇到这样的问题。

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

于 2013-08-01T07:24:16.843 回答
0

该消息意味着您缺少“key2”列(CompositeType 的第二部分)。

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

于 2013-08-02T04:21:40.057 回答