Amazon Keyspaces 中的 Cassandra 查询语言 (CQL) 元素 - Amazon Keyspaces(Apache Cassandra 兼容)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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 编码的字符串(varchar是的text别名)。

数字类型

数据类型 描述

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:00GMT)以来的日期和时间,以毫秒为单位。

timeuuid

代表版本 1 UUID

集合类型

数据类型 描述

list

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

map

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

set

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

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

SET <TEXT> MAP <TEXT, INT>

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

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

客户端时间戳和 Time to Live (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

表示 IP 地址的字符串,IPv6采用IPv4或格式。

静态

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

下面是一个示例语句。

my_column INT STATIC

有关使用静态列的更多信息,请参阅估计 Amazon Keyspaces 中静态列的容量消耗

JSONAmazon Keyspaces 数据类型的编码

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

对于单字段数据类型(如 floatintUUIDdate),您还可以将数据作为 string 插入。对于复合数据类型和集合tuple,例如maplist、和,您也可以以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。constants有关UUID格式,请参阅。

tinyint

integer, string integer

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

tuple

list, string list

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

uuid

string string

constants有关UUID格式,请参阅。

varchar

string string

使用JSON字符转义\u

varint

integer, string integer

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