Cassandra 2.2引入了對SELECT和INSERT語句的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”的列的表,您将執行以下操作:
預設情況下(或如果顯式使用DEFAULT NULL),從JSON映射中省略的列将被設定為NULL,這意味着該列的任何預先存在的值将被删除(導緻建立邏輯删除)。或者,如果在值之後使用DEFAULT UNSET僞指令,忽略的列值将保留未設定,這意味着将保留那些列的預先存在的值。
Cassandra資料類型的JSON編碼
在可能的情況下,Cassandra将以其原生JSON表示形式表示和接受資料類型。Cassandra還将接受與所有單字段類型的CQL字面量格式比對的字元串表示。例如,浮動,整數,UUID和日期可以由CQL字面量字元串表示。但是,複合類型(例如集合,元組和使用者定義的類型)必須由本地JSON集合(mao和list)或集合的JSON編碼字元串表示形式表示。
下表描述了Cassandra在INSERT JSON值(和fromJson()參數)中接受的編碼以及Cassandra在為SELECT JSON語句(和fromJson())傳回資料時使用的格式:
類型 | 接受格式 | 傳回格式 | 注意點 |
---|---|---|---|
| string | string | 使用JSON的\ u字元轉義 |
| integer, string | integer | 字元串必須是有效的64位整數 |
| string | string | 字元串應為0x,後跟偶數個十六進制數字 |
| boolean, string | boolean | 字元串必須為“true”或“false” |
| string | string | 日期格式為YYYY-MM-DD,時區UTC |
| integer, float, string | float | 在用戶端解碼器中可能超過32或64位IEEE-754浮點精度 |
| integer, float, string | float | 字元串必須是有效的整數或浮點型 |
| integer, float, string | float | 字元串必須是有效的整數或浮點型 |
| string | string | IPv4或IPv6位址 |
| integer, string | integer | 字元串必須是有效的32位整數 |
| list, string | list | 使用JSON的本地清單表示 |
| map, string | map | 使用JSON的本地映射表示 |
| integer, string | integer | 字元串必須是有效的16位整數 |
| list, string | list | 使用JSON的本地清單表示 |
| string | string | 使用JSON的\ u字元轉義 |
| string | string | 時間格式HH-MM-SS [.fffffffff] |
| integer, string | string | 時間戳。 字元串常量允許輸入時間戳日期。傳回格式為YYYY-MM-DDHH:MM:SS.SSS的日期戳。 |
| string | string | 類型1 UUID。 請參閱UUID格式的常量 |
| integer, string | integer | 字元串必須是有效的8位整數 |
| list, string | list | 使用JSON的本地清單表示 |
| map, string | map | 使用JSON的本地映射表示,其中字段名稱為鍵 |
| string | string | 請參閱UUID格式的常量 |
| string | string | 使用JSON的\ u字元轉義 |
| integer, string | integer | 可變長度; 可能在用戶端解碼器中溢出32或64位整數 |
fromJson()函數
fromJson()函數可以類似于INSERT JSON使用,但對于單個列值。它隻能在INSERT語句的VALUES子句中使用,或者作為UPDATE,DELETE或SELECT語句中的一個列值。例如,它不能在SELECT語句的selection子句中使用。
toJson() 函數
toJson()函數可以類似于SELECT JSON使用,但對于單個列值。它隻能在SELECT語句的selection子句中使用。