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。有关 UUID 格式,请参见 |
|
整数、字符串 |
整数 |
字符串必须是有效的 8 位整数 |
|
列表、字符串 |
list |
使用 JSON 的本机列表表示形式 |
|
映射、字符串 |
map |
使用 JSON 的本机映射表示形式,字段名称作为键 |
|
字符串 |
字符串 |
有关 UUID 格式,请参见 |
|
字符串 |
字符串 |
使用 JSON 的 |
|
整数、字符串 |
整数 |
可变长度;可能在客户端解码器中溢出 32 位或 64 位整数 |
