JSON 支援
Cassandra 2.2 為 SELECT <select-statement>
和 INSERT <insert-statement>
陳述式引入了 JSON 支援。此支援並未從根本上改變 CQL API(例如,仍強制執行架構)。它只提供一種處理 JSON 文件的便利方式。
SELECT JSON
在 SELECT
陳述式中,JSON
關鍵字用於將每一列傳回為單一 JSON
編碼的對應。其餘 SELECT
陳述式行為相同。
結果對應鍵與一般結果集中的欄位名稱相符。例如,類似 SELECT JSON a, ttl(b) FROM …
的陳述式會產生一個包含鍵 "a"
和 "ttl(b)"
的對應。不過,有一個值得注意的例外:為了與 INSERT JSON
行為對稱,包含大寫字母的大小寫敏感欄位名稱會加上雙引號。例如,SELECT JSON myColumn FROM …
會產生一個包含轉義引號的對應鍵 "\"myColumn\""
。
對應值會是結果集值的 JSON 編碼表示(如下所述)。
INSERT JSON
在 INSERT
陳述式中,新的 JSON
關鍵字可用於啟用將 JSON
編碼的對應插入為單一列。JSON
對應的格式通常應與在同一表格上執行 SELECT JSON
陳述式所傳回的格式相符。特別是,大小寫敏感欄位名稱應加上雙引號。例如,要插入到兩個欄位名稱為「myKey」和「value」的表格中,您可以執行下列動作
INSERT INTO mytable JSON '{ "\"myKey\"": 0, "value": 0}';
預設情況下(或如果明確使用 DEFAULT NULL
),從 JSON
對應中省略的欄位會設為 NULL
,表示會移除該欄位的任何預先存在的數值(導致產生墓碑)。或者,如果在數值後使用 DEFAULT UNSET
指令,省略的欄位值會保持未設定,表示會保留這些欄位的預先存在數值。
Cassandra 資料類型的 JSON 編碼
Cassandra 會在可能的情況下以其原生 JSON
呈現方式呈現和接受資料類型。Cassandra 也會接受與 CQL 文字格式相符的字串呈現方式,適用於所有單一欄位類型。例如,浮點數、整數、UUID 和日期可以用 CQL 文字字串呈現。不過,複合類型(例如集合、組和使用者定義類型)必須以原生 JSON
集合(對應和清單)或集合的 JSON 編碼字串呈現方式呈現。
下表說明 Cassandra 會在 INSERT JSON
值(和 from_json()
參數)中接受的編碼,以及 Cassandra 在傳回 SELECT JSON
陳述式(和 from_json()
)資料時會使用的格式
類型 | 可接受的格式 | 傳回格式 | 備註 |
---|---|---|---|
|
字串 |
字串 |
使用 JSON 的 |
|
整數、字串 |
整數 |
字串必須是有效的 64 位元整數 |
|
字串 |
字串 |
字串應為 0x 後接偶數個十六進位數字 |
|
布林值、字串 |
boolean |
字串必須是 "true" 或 "false" |
|
字串 |
字串 |
格式為 |
|
整數、浮點數、字串 |
浮點數 |
在用戶端側解碼器中可能會超過 32 或 64 位元 IEEE-754 浮點數精度 |
|
整數、浮點數、字串 |
浮點數 |
字串必須是有效的整數或浮點數 |
|
整數、浮點數、字串 |
浮點數 |
字串必須是有效的整數或浮點數 |
|
字串 |
字串 |
IPv4 或 IPv6 位址 |
|
整數、字串 |
整數 |
字串必須是有效的 32 位元整數 |
|
清單、字串 |
list |
使用 JSON 的原生清單呈現方式 |
|
對應、字串 |
map |
使用 JSON 的原生對應呈現方式 |
|
整數、字串 |
整數 |
字串必須是有效的 16 位元整數 |
|
清單、字串 |
list |
使用 JSON 的原生清單呈現方式 |
|
字串 |
字串 |
使用 JSON 的 |
|
字串 |
字串 |
格式為 |
|
整數、字串 |
字串 |
時間戳記。字串常數允許輸入 |
|
字串 |
字串 |
類型 1 UUID。請參閱 |
|
整數、字串 |
整數 |
字串必須是有效的 8 位元整數 |
|
清單、字串 |
list |
使用 JSON 的原生清單呈現方式 |
|
對應、字串 |
map |
使用 JSON 的原生映射表示,其中欄位名稱為金鑰 |
|
字串 |
字串 |
請參閱 |
|
字串 |
字串 |
使用 JSON 的 |
|
整數、字串 |
整數 |
長度可變;可能會溢位為 32 或 64 位元整數,在用戶端解碼器中 |