2016-12-12 32 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