我在这里看到许多使用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 :(得分: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,请检查此列中的所有字段是否具有值。