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