天天看点

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子句中使用。