本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 位有符号整数。 |
|
|
表示 +/-10^38 范围内的整数值。 |
计数器
counter 列包含 64 位有符号整数。计数器值通过 UPDATE 语句进行递增或递减,并且无法直接设置。这使得 counter 列对于跟踪计数很有用。例如,您可以使用计数器来跟踪日志文件中的条目数或帖子在社交网络上被查看的次数。以下限制适用于 counter 列:
-
类型
counter的列不能是表的primary key的一部分。 -
在包含一个或多个类型
counter的列的表中,所有列的类型都必须为counter。
如果计数器更新失败(例如,因超时或与 Amazon Keyspaces 的连接断开),客户端将不知道计数器值是否已更新。如果重试更新,则可能会再次应用对计数器值的更新。
Blob 类型
| 数据类型 | 说明 |
|---|---|
|
|
表示任意字节。 |
布尔值类型
| 数据类型 | 说明 |
|---|---|
|
|
表示 true 或 false。 |
Time-related 类型
| 数据类型 | 说明 |
|---|---|
|
|
格式为的字符串<yyyy>-<mm>-<dd>。 |
|
|
64 位有符号整数,表示自纪元(1970 年 1 月 1 日 00:00:00 GMT)以来的日期和时间,以毫秒为单位。 |
|
|
表示版本 1 UUID |
集合类型
| 数据类型 | 说明 |
|---|---|
|
|
表示文本元素的有序集合。 |
|
|
表示键/值对的无序集合。 |
|
|
表示一个或多个文本元素的无序集合。 |
您将通过在尖括号中使用集合类型后跟其他数据类型(如 TEXT 或 INT)来声明集合列。您可以创建包含 TEXT 的 SET 的列,也可以创建 TEXT 和 INT 键值对的 MAP,如以下示例所示。
SET <TEXT> MAP <TEXT, INT>
非冻结集合允许您对每个单独的集合元素进行更新。 Client-side 存储单个元素的时间戳和生存时间 (TTL) 设置。
当您对集合类型使用 FROZEN 关键字时,集合的值将被序列化为单个不可变值,并且 Amazon Keyspaces 会将它们视为 BLOB。这是一个冻结集合。INSERT 或 UPDATE 语句将覆盖整个冻结集合。您无法对冻结集合中的单个元素进行更新。
Client-side 时间戳和生存时间 (TTL) 设置适用于整个冻结集合,而不适用于单个元素。 Frozen集合列可以是PRIMARY KEY表的一部分。
您可以嵌套冻结集合。例如,如果 MAP 使用了 FROZEN 关键字,您可以在 SET 中定义 MAP,如以下示例所示。
SET <FROZEN> <MAP <TEXT, INT>>>
默认情况下,Amazon Keyspaces 支持嵌套多达 8 个级别的冻结集合。有关更多信息,请参阅 Amazon Keyspaces 服务限额。有关 Apache Cassandra 的功能差异的更多信息,请参阅 FROZEN 集合。有关 CQL 语法的更多信息,请参阅 CREATE TABLE 和 ALTER TABLE。
元组类型
tuple 数据类型表示一组有界的文本元素。您可以使用元组作为 user defined
type 的替代项。您无需将 FROZEN 关键字用于元组。这是因为元组始终处于冻结状态,您无法单独更新元素。
其他类型
| 数据类型 | 说明 |
|---|---|
|
|
一个表示 IPv4 或 IPv6 格式的 IP 地址的字符串。 |
静态
在包含集群列的 Amazon Keyspaces 表中,您可以使用 STATIC 关键字来创建任何类型的静态列。
下面是一个示例语句。
my_column INT STATIC
有关使用静态列的更多信息,请参阅估算 Amazon Keyspaces 中静态列的容量消耗。
User-defined 类型 (UDT)
Amazon Keyspaces 支持用户定义类型 (UDT)。您可以使用任何有效的 Amazon Keyspaces 数据类型来创建 UDT,包括集合和其他现有 UDT。您可以在密钥空间中创建 UDT,并可以使用它们来定义密钥空间中任何表中的列。
有关 CQL 语法的更多信息,请参阅 User-defined 类型 (UDT)。有关使用 UDT 的更多信息,请参阅User-defined Amazon Keyspaces 中的类型 (UDT)。
要查看每个密钥空间支持多少 UDT、支持的嵌套级别以及与 UDT 相关的其他默认值和配额,请参阅。Amazon Keyspaces 中用户定义类型 (UDT) 的配额和默认值
Amazon Keyspaces 数据类型的 JSON 编码
Amazon Keyspaces 提供与 Apache Cassandra 相同的 JSON 数据类型映射。下表介绍了 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。有关 UUID 格式的信息,请参阅constants。 |
|
|
integer, string |
integer |
字符串必须是有效的 8 位整数。 |
|
|
list, string |
list |
使用原生 JSON 列表表示形式。 |
|
|
map, string |
map |
使用带有字段名称的本地 JSON 地图表示形式作为键。 |
|
|
string |
string |
有关 UUID 格式的信息,请参阅constants。 |
|
|
string |
string |
使用 JSON 字符转义 |
|
|
integer, string |
integer |
可变长度;在客户端解码器中,可能会溢出 32 位或 64 位整数。 |