Cassandra:创建表

时间:2016-12-12 12:16:39

标签: cassandra

我在这里看到许多使用NOT NULL约束创建表的示例。具有讽刺意味的是,我似乎无法做同样的事情。

这是我使用的cql命令:

CREATE TABLE activities_dev (activity_id  uuid ,actor_id bigint NOT NULL, actor_appid bigint NOT NULL, item_id text NOT NULL, verb text NOT NULL,viewer_id bigint NOT NULL,viewer_appid bigint NOT NULL, ts timestamp, PRIMARY KEY(activity_id,actor_id,actor_appid,item_id,verb));

但这是我得到的错误:

SyntaxException: line 1:62 mismatched input 'NOT' expecting ')' (...activities_dev(activity_id uuid, actor_id integer [NOT] NULL...)

我做错了什么?

3 个答案:

答案 0 :(得分:4)

不支持Cassandra NOT NULL关键字。

对于主键列,cassandra会自动处理。如果您尝试将null插入任何主键值,cassandra将抛出异常

Invalid null value in condition for column

答案 1 :(得分:1)

Cassandra中的空列并不意味着空列。

Cassandra使用空值标记已删除的列:您可以删除Cassandra中一行或多列。

这个名为tombstone的带时间戳的标记用于本地和节点之间的数据协调(Commitlog,memtables,SStables),并且在复制的密钥空间中可以防止数据的复活(例如,请参阅this article关于已复制的已删除)。

在这种情况下,有意义的是不允许“非空”' CREATE TABLE和ALTER TABLE CQL语法中的子句。

阿兰

答案 2 :(得分:0)

首先,如果您将此Column修改为NOT NULL,请检查此列中的所有字段是否具有值。