Cassandra 文档

版本

您正在查看预发布版本的文档。

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())的数据时将使用的格式

类型 接受的格式 返回格式 说明

ascii

字符串

字符串

使用 JSON 的 \u 字符转义

bigint

整数、字符串

整数

字符串必须是有效的 64 位整数

blob

字符串

字符串

字符串应为 0x 后跟偶数个十六进制数字

boolean

布尔值、字符串

boolean

字符串必须是 "true" 或 "false"

date

字符串

字符串

格式为 YYYY-MM-DD 的日期,时区为 UTC

decimal

整数、浮点数、字符串

浮点数

可能超过客户端解码器中的 32 位或 64 位 IEEE-754 浮点数精度

double

整数、浮点数、字符串

浮点数

字符串必须是有效的整数或浮点数

浮点数

整数、浮点数、字符串

浮点数

字符串必须是有效的整数或浮点数

inet

字符串

字符串

IPv4 或 IPv6 地址

int

整数、字符串

整数

字符串必须是有效的 32 位整数

list

列表、字符串

list

使用 JSON 的本机列表表示形式

map

映射、字符串

map

使用 JSON 的本机映射表示形式

smallint

整数、字符串

整数

字符串必须是有效的 16 位整数

set

列表、字符串

list

使用 JSON 的本机列表表示形式

text

字符串

字符串

使用 JSON 的 \u 字符转义

time

字符串

字符串

格式为 HH-MM-SS[.fffffffff] 的一天中的时间

timestamp

整数、字符串

字符串

时间戳。字符串常量允许输入 timestamps as dates <timestamps>。格式为 YYYY-MM-DD HH:MM:SS.SSS 的日期戳将被返回。

timeuuid

字符串

字符串

类型 1 UUID。有关 UUID 格式,请参见 constant

tinyint

整数、字符串

整数

字符串必须是有效的 8 位整数

tuple

列表、字符串

list

使用 JSON 的本机列表表示形式

UDT

映射、字符串

map

使用 JSON 的本机映射表示形式,字段名称作为键

uuid

字符串

字符串

有关 UUID 格式,请参见 constant

varchar

字符串

字符串

使用 JSON 的 \u 字符转义

varint

整数、字符串

整数

可变长度;可能在客户端解码器中溢出 32 位或 64 位整数

from_json() 函数

from_json() 函数的使用方式类似于 INSERT JSON,但用于单个列值。它只能在 INSERT 语句的 VALUES 子句中使用,或者作为 UPDATEDELETESELECT 语句中的列值之一使用。例如,它不能在 SELECT 语句的选择子句中使用。

to_json() 函数

to_json() 函数的使用方式类似于 SELECT JSON,但用于单个列值。它只能在 SELECT 语句的选择子句中使用。