天天看點

CQL(Cassandra Query Language)JSON支援

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())傳回資料時使用的格式:

類型 接受格式 傳回格式 注意點

ascii

string string 使用JSON的\ u字元轉義

bigint

integer, string integer 字元串必須是有效的64位整數

blob

string string 字元串應為0x,後跟偶數個十六進制數字

boolean

boolean, string boolean 字元串必須為“true”或“false”

date

string string 日期格式為YYYY-MM-DD,時區UTC

decimal

integer, float, string float 在用戶端解碼器中可能超過32或64位IEEE-754浮點精度

double

integer, float, string float 字元串必須是有效的整數或浮點型

float

integer, float, string float 字元串必須是有效的整數或浮點型

inet

string string IPv4或IPv6位址

int

integer, string integer 字元串必須是有效的32位整數

list

list, string list 使用JSON的本地清單表示

map

map, string map 使用JSON的本地映射表示

smallint

integer, string integer 字元串必須是有效的16位整數

set

list, string list 使用JSON的本地清單表示

text

string string 使用JSON的\ u字元轉義

time

string string 時間格式HH-MM-SS [.fffffffff]

timestamp

integer, string string 時間戳。 字元串常量允許輸入時間戳日期。傳回格式為YYYY-MM-DDHH:MM:SS.SSS的日期戳。

timeuuid

string string 類型1 UUID。 請參閱UUID格式的常量

tinyint

integer, string integer 字元串必須是有效的8位整數

tuple

list, string list 使用JSON的本地清單表示

UDT

map, string map 使用JSON的本地映射表示,其中字段名稱為鍵

uuid

string string 請參閱UUID格式的常量

varchar

string string 使用JSON的\ u字元轉義

varint

integer, string integer 可變長度; 可能在用戶端解碼器中溢出32或64位整數

fromJson()函數

fromJson()函數可以類似于INSERT JSON使用,但對于單個列值。它隻能在INSERT語句的VALUES子句中使用,或者作為UPDATE,DELETE或SELECT語句中的一個列值。例如,它不能在SELECT語句的selection子句中使用。

toJson() 函數

toJson()函數可以類似于SELECT JSON使用,但對于單個列值。它隻能在SELECT語句的selection子句中使用。