Amazon Keyspaces 中的 Cassandra 查询语言 (CQL) 元素 - Amazon Keyspaces(Apache Cassandra 兼容)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Keyspaces 中的 Cassandra 查询语言 (CQL) 元素

了解 Amazon Keyspaces 支持的 Cassandra 查询语言 (CQL) 元素,包括标识符、常量、术语和数据类型。

标识符

标识符(或名称)用于标识表、列和其他对象。标识符可以带引号,也可以不带引号。以下情况将适用。

identifier ::= unquoted_identifier | quoted_identifier unquoted_identifier ::= re('[a-zA-Z][a-zA-Z0-9_]*') quoted_identifier ::= '"' (any character where " can appear if doubled)+ '"'

常量

定义以下常量。

constant ::= string | integer | float | boolean | uuid | blob | NULL string ::= '\'' (any character where ' can appear if doubled)+ '\'' '$$' (any character other than '$$') '$$' integer ::= re('-?[0-9]+') float ::= re('-?[0-9]+(\.[0-9]*)?([eE][+-]?[0-9+])?') | NAN | INFINITY boolean ::= TRUE | FALSE uuid ::= hex{8}-hex{4}-hex{4}-hex{4}-hex{12} hex ::= re("[0-9a-fA-F]") blob ::= '0' ('x' | 'X') hex+

术语

术语表示受支持的值的类型。术语由以下内容定义。

term ::= constant | literal | function_call | arithmetic_operation | type_hint | bind_marker literal ::= collection_literal | tuple_literal function_call ::= identifier '(' [ term (',' term)* ] ')' arithmetic_operation ::= '-' term | term ('+' | '-' | '*' | '/' | '%') term

数据类型

Amazon Keyspaces 支持以下数据类型:

字符串类型

数据类型 描述

ascii

表示 ASCII 字符串。

text

表示 UTF-8 编码的字符串。

varchar

表示 UTF-8 编码的字符串(varchartext 的别名)。

数字类型

数据类型 描述

bigint

表示 64 位有符号长整型。

counter

表示 64 位有符号整数计数器。有关更多信息,请参阅 计数器

decimal

表示可变精度小数。

double

表示 64 位 IEEE 754 浮点。

float

表示 32 位 IEEE 754 浮点。

int

表示 32 位有符号整数。

varint

表示任意精度的整数。

计数器

counter 列包含 64 位有符号整数。计数器值通过 UPDATE 语句进行递增或递减,并且无法直接设置。这使得 counter 列对于跟踪计数很有用。例如,您可以使用计数器来跟踪日志文件中的条目数或某个社交网络上的文章被查看的次数。以下限制适用于 counter 列:

  • 类型 counter 的列不能是表的 primary key 的一部分。

  • 在包含一个或多个类型 counter 的列的表中,所有列的类型都必须为 counter

如果计数器更新失败(例如,因超时或与 Amazon Keyspaces 的连接断开),客户端将不知道计数器值是否已更新。如果重试更新,则可能会再次应用对计数器值的更新。

Blob 类型

数据类型 描述

blob

表示任意字节。

布尔值类型

数据类型 描述

boolean

表示 truefalse

与时间相关的类型

数据类型 描述

timestamp

64 位有符号整数,表示自纪元(1970 年 1 月 1 日 00:00:00 GMT)以来的日期和时间,以毫秒为单位。

timeuuid

表示版本 1 UUID

集合类型

数据类型 描述

list

表示文本元素的有序集合。

map

表示键/值对的无序集合。

set

表示一个或多个文本元素的无序集合。

您将通过在尖括号中使用集合类型后跟其他数据类型(如 TEXTINT)来声明集合列。您可以创建包含 TEXTSET 的列,也可以创建 TEXTINT 键值对的 MAP,如以下示例所示。

SET <TEXT> MAP <TEXT, INT>

非冻结集合可让您对每个单独的集合元素进行更新。系统将为各个元素存储客户端时间戳和存活时间 (TTL) 设置。

当您对集合类型使用 FROZEN 关键字时,集合的值将被序列化为单个不可变值,并且 Amazon Keyspaces 会将它们视为 BLOB。这是一个冻结集合。INSERTUPDATE 语句将覆盖整个冻结集合。您无法对冻结集合中的单个元素进行更新。

客户端时间戳和存活时间 (TTL) 设置适用于整个冻结集合,而不是单个元素。Frozen 集合列可以是表的 PRIMARY KEY 的一部分。

您可以嵌套冻结集合。例如,如果 MAP 使用了 FROZEN 关键字,您可以在 SET 中定义 MAP,如以下示例所示。

SET <FROZEN> <MAP <TEXT, INT>>>

默认情况下,Amazon Keyspaces 支持嵌套最多五个级别的冻结集合。有关更多信息,请参阅 Amazon Keyspaces 服务限额。有关 Apache Cassandra 的功能差异的更多信息,请参阅 FROZEN 集合。有关 CQL 语法的更多信息,请参阅 CREATE TABLEALTER TABLE

元组类型

tuple 数据类型表示一组有界的文本元素。您可以使用元组作为 user defined type 的替代项。您无需将 FROZEN 关键字用于元组。这是因为元组始终处于冻结状态,您无法单独更新元素。

其他类型

数据类型 描述

inet

一个表示 IPv4 或 IPv6 格式的 IP 地址的字符串。

静态

在包含聚类列的 Amazon Keyspaces 表中,您可以使用STATIC关键字创建任何类型的静态列。

下面是一个示例语句。

my_column INT STATIC

有关使用静态列的更多信息,请参阅Amazon Keyspaces 中的静态列

Amazon Keyspaces 数据类型的 JSON 编码

Amazon Keyspaces 提供与 Apache Cassandra 相同的 JSON 数据类型映射。下表介绍了 Amazon Keyspaces 在 INSERT JSON 语句中接受的数据类型,以及 Amazon Keyspaces 在使用 SELECT JSON 语句返回数据时使用的数据类型。

对于单字段数据类型(如 floatintUUIDdate),您还可以将数据作为 string 插入。对于复合数据类型和集合(如 tuplemaplist),您还可以将数据作为 JSON 或编码 JSON string 插入。

JSON 数据类型 INSERT JSON 语句中接受的数据类型 SELECT JSON 语句中返回的数据类型 注意

ascii

string string

使用 JSON 字符转义 \u

bigint

integer, string integer

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

blob

string string

字符串应以 0x 开头,后跟偶数个十六进制数字。

boolean

boolean, string boolean

String 必须为 truefalse

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-DD HH:MM:SS.SSS 的日期戳。

timeuuid

string string

类型 1 UUID。有关 UUID 格式的信息,请参阅constants

tinyint

integer, string integer

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

tuple

list, string list

使用原生 JSON 列表表示形式。

uuid

string string

有关 UUID 格式的信息,请参阅constants

varchar

string string

使用 JSON 字符转义 \u

varint

integer, string integer

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