本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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字符串。 |
|
代表一个 UTF -8 编码的字符串。 |
|
表示 UTF -8 编码的字符串( |
数字类型
数据类型 | 描述 |
---|---|
|
表示 64 位有符号长整型。 |
|
表示 64 位有符号整数计数器。有关更多信息,请参阅 计数器。 |
|
表示可变精度小数。 |
|
代表一个 64 位的 IEEE 754 浮点数。 |
|
代表一个 32 位 IEEE 754 浮点数。 |
|
表示 32 位有符号整数。 |
|
表示任意精度的整数。 |
计数器
counter
列包含 64 位有符号整数。计数器值通过 UPDATE 语句进行递增或递减,并且无法直接设置。这使得 counter
列对于跟踪计数很有用。例如,您可以使用计数器来跟踪日志文件中的条目数或某个社交网络上的文章被查看的次数。以下限制适用于 counter
列:
-
类型
counter
的列不能是表的primary key
的一部分。 -
在包含一个或多个类型
counter
的列的表中,所有列的类型都必须为counter
。
如果计数器更新失败(例如,因超时或与 Amazon Keyspaces 的连接断开),客户端将不知道计数器值是否已更新。如果重试更新,则可能会再次应用对计数器值的更新。
Blob 类型
数据类型 | 描述 |
---|---|
|
表示任意字节。 |
布尔值类型
数据类型 | 描述 |
---|---|
|
表示 true 或 false 。 |
与时间相关的类型
数据类型 | 描述 |
---|---|
|
64 位有符号整数,表示自纪元(1970 年 1 月 1 日 00:00:00GMT)以来的日期和时间,以毫秒为单位。 |
|
代表版本 1 UUID |
集合类型
数据类型 | 描述 |
---|---|
|
表示文本元素的有序集合。 |
|
表示键/值对的无序集合。 |
|
表示一个或多个文本元素的无序集合。 |
您将通过在尖括号中使用集合类型后跟其他数据类型(如 TEXT
或 INT
)来声明集合列。您可以创建包含 TEXT
的 SET
的列,也可以创建 TEXT
和 INT
键值对的 MAP
,如以下示例所示。
SET <TEXT> MAP <TEXT, INT>
非冻结集合可让您对每个单独的集合元素进行更新。存储单个元素的客户端时间戳和生存时间 (TTL) 设置。
当您对集合类型使用 FROZEN
关键字时,集合的值将被序列化为单个不可变值,并且 Amazon Keyspaces 会将它们视为 BLOB
。这是一个冻结集合。INSERT
或 UPDATE
语句将覆盖整个冻结集合。您无法对冻结集合中的单个元素进行更新。
客户端时间戳和 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 TABLE和ALTER TABLE。
元组类型
tuple
数据类型表示一组有界的文本元素。您可以使用元组作为 user defined
type
的替代项。您无需将 FROZEN
关键字用于元组。这是因为元组始终处于冻结状态,您无法单独更新元素。
其他类型
数据类型 | 描述 |
---|---|
|
表示 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
语句返回数据时使用的数据类型。
对于单字段数据类型(如 float
、int
、UUID
和 date
),您还可以将数据作为 string
插入。对于复合数据类型和集合tuple
,例如map
list
、和,您也可以以JSON编码JSON string
形式插入数据。
JSON数据类型 | INSERT JSON 语句中接受的数据类型 |
SELECT JSON 语句中返回的数据类型 |
注意 |
---|---|---|---|
|
string |
string |
使用JSON字符转义 |
|
integer, string |
integer |
字符串必须是有效的 64 位整数。 |
|
string |
string |
字符串应以 |
|
boolean, string |
boolean |
String 必须为 |
|
string |
string |
格式中的日期 |
|
integer, float, string |
float |
在客户端解码器中,可以超过 32 位或 64 位 IEEE -754 浮点精度。 |
|
integer, float, string |
float |
字符串必须是有效的整数或浮点数。 |
|
integer, float, string |
float |
字符串必须是有效的整数或浮点数。 |
|
string |
string |
IPv4或IPv6地址。 |
|
integer, string |
integer |
字符串必须是有效的 32 位整数。 |
|
list, string |
list |
使用原生JSON列表表示形式。 |
|
map, string |
map |
使用原生JSON地图表示。 |
|
integer, string |
integer |
字符串必须是有效的 16 位整数。 |
|
list, string |
list |
使用原生JSON列表表示形式。 |
|
string |
string |
使用JSON字符转义 |
|
string |
string |
一天中的时间,格式为 |
|
integer, string |
string |
时间戳。字符串常量可让您将时间戳存储为日期。将返回格式为 |
|
string |
string |
类型 1 UUID。constants有关UUID格式,请参阅。 |
|
integer, string |
integer |
字符串必须是有效的 8 位整数。 |
|
list, string |
list |
使用原生JSON列表表示形式。 |
|
string |
string |
constants有关UUID格式,请参阅。 |
|
string |
string |
使用JSON字符转义 |
|
integer, string |
integer |
可变长度;在客户端解码器中,可能会溢出 32 位或 64 位整数。 |