JSON支持SELECT和INSERT语句。但是Json format的支持并没有从根本上改变cql api的使用方式,CQL 需要的数据定义模型还是必须定义的。JSON format的使用只是提供了一种使用JSON方式的方法。Lindorm CQL支持将多个列的数据按照JSON的格式进行输入和输出。
SELECT JSON
对于SELECT语句,可以使用JSON关键字将每一行作为单个JSON编码的映射返回。SELECT语句行为的其余部分是相同的。
结果映射键与普通结果集中的列名相同。例如,SELECT JSON a,b FROM ...
将产生一个带有键a
和b
的映射。
INSERT JSON
对于INSERT语句,可以使用JSON关键字将JSON编码的映射作为一行插入。JSON映射的格式通常应该与同一个表上SELECT JSON语句返回的格式匹配。特别是,区分大小写的列名应该用双引号括起来。例如,要插入到一个有两列名为myKey
和value
的表中,可以执行以下操作:
INSERT INTO persioninfo JSON '{ "c1": "key", "c2": "value"}'
默认情况下或者显式使用default NULL,JSON映射中省略的列将被设置为NULL,这意味着该列的任何预先存在的值都将被删除。
JSON Encoding of CQL Data Types
在可能的情况下,Lindorm CQL将在原生JSON表示中表示和接受数据类型。Lindorm CQL还将接受与所有单个字段类型的Lindorm CQL文本格式匹配的字符串表示。例如,float、int、uuid和dates可以由Lindorm CQL文本字符串表示。
下表描述了Lindorm CQL在INSERT JSON值(和fromJson()参数)中接受的编码,以及Lindorm CQL在返回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 | Date格式为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 or IPv6 address。 |
int | integer, string | integer | 字符串必须是有效的32位整数。 |
smallint | integer, string | integer | 字符串必须是有效的16位整数。 |
text | string | string | 使用JSON的\u 字符转义。
|
time | string | string | 时间格式为hh-mm-ss[.fffffffff] 。
|
timestamp | integer, string | string | 时间戳timestamp。时间戳格式为YYYY-MM-DD hh:mm:ss.SSS 。
|
timeuuid | string | string | Type 1 UUID。 |
tinyint | integer, string | integer | 8位有效的整数。 |
uuid | string | string | uuid的格式字符串。 |
varint | integer, string | integer | 可变长度;可能在客户端解码器中溢出32位或64位整数。 |