映射Cassandra超级列

9
我想大家都已经读过了这篇与Cassandra有关的文章:this
我试图在CassandraCli上创建我的模式,但是遇到了很多问题,是否有人能够指导我正确的方法?我正在尝试创建类似于该文章中“Comments”列族的结构。
在CassandraCli终端中,我输入:
create column family posts with column_type = ‘Super’ and comparator = ‘AsciiType’ and subcomparator = TimeUUIDType;

它运行良好,没有文档告诉我如果我添加column_metadata属性,这些将是超级列的原因,因为我的列族是超级类型,我找不到是否正确,所以:

create column family posts with column_type = ‘Super’ and comparator = ‘AsciiType’ and subcomparator = ‘TimeUUIDType’ and column_metadata = [{column_name:'body'}];

我正在尝试创建与文章评论列族相同的内容,但是当我尝试填充时出现了问题。
set posts['post1'][timeuuid()][body] = ‘Hello I am Goku!’;

我收到了以下内容:

无效的UUID字符串:body

我猜是因为我选择的子比较器类型为timeuuid,而body是一个字符串,所以它应该是timeuuid。那么,我的超级列中的列如何持有字符串类型名称的列,例如文章的评论?
谢谢。

对于一个声望只有1分的人提出Cassandra相关问题,我要点赞。看到有人对SQL以外的东西感兴趣真是令人耳目一新。 - SyntaxT3rr0r
4个回答

5

我认为你颠倒了比较器类型(comparator_type)和子比较器类型(subcomparator_type)的应用。在超级列族(super column families)中,比较器类型适用于超级列名,而子比较器类型适用于子列名。

将比较器类型和子比较器类型进行交换,你的第一个示例应该就可以正常工作了。


1

posts[1][timeuuid()][utf8('body')] = 'Hello I am Goku!';

正确答案应该是这样的。

:p


0

我尝试了:

set posts[1][timeuuid()]['body'] = 'Hello I am Goku!';

它运行了...


0

你尝试过引用'body'吗?

set posts['post1'][timeuuid()]['body'] = ‘Hello I am Goku!’;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接