2016-12-12 25 views
2

我在这里看到很多使用NOT NULL约束创建表的例子。讽刺的是,我似乎无法做到这一点。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...) 

我在做什么错?

+0

很简单,您使用的是Cassandra中不存在的语法。 – Aaron

回答

0

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

+0

我不修改已经创建的表的列。我正在创建这张表,但不能因为引用的错误。 – arshellium

+0

转身建议,运行没有NOT NULL的sql脚本,然后通过为指定的列添加NOT NULL来更改表。 –

+0

“,然后通过为指定列添加NOT NULL来改变表格”是的,这在Cassandra中不起作用。 – Aaron

2

In Cassandra NOT NULL关键字不支持。

对于主键列cassandra会自动处理它。如果您尝试插入空任何主键值卡桑德拉会抛出异常

Invalid null value in condition for column

0

在卡桑德拉NULL列并不意味着空列。

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

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

在这种情况下,在CREATE TABLE和ALTER TABLE CQL语法中不允许使用'NOT NULL'子句是有意义的。

Alain