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

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

Amazon Keyspaces 中的 DML(数据操作语言)语句

数据操作语言 (DML) 是一组 Cassandra 查询语言 (CQL) 语句,用于管理 Amazon Keyspaces(Apache Cassandra 兼容)表中的数据。可以使用 DML 语句在表中添加、修改或删除数据。

还可以使用 DML 语句查询表中的数据。(请注意,CQL 不支持联接或子查询。)

SELECT

使用 SELECT 语句可查询数据。

语法

select_statement ::= SELECT [ JSON ] ( select_clause | '*' ) FROM table_name [ WHERE 'where_clause' ] [ ORDER BY 'ordering_clause' ] [ LIMIT (integer | bind_marker) ] [ ALLOW FILTERING ] select_clause ::= selector [ AS identifier ] ( ',' selector [ AS identifier ] ) selector ::= column_name | term | CAST '(' selector AS cql_type ')' | function_name '(' [ selector ( ',' selector )* ] ')' where_clause ::= relation ( AND relation )* relation ::= column_name operator term TOKEN operator ::= '=' | '<' | '>' | '<=' | '>=' | IN | CONTAINS | CONTAINS KEY ordering_clause ::= column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*

示例

SELECT name, id, manager_id FROM "myGSGKeyspace".employees_tbl ; SELECT JSON name, id, manager_id FROM "myGSGKeyspace".employees_tbl ;

有关将 JSON 编码的数据类型映射到 Amazon Keyspaces 数据类型的表,请参阅 Amazon Keyspaces 数据类型的 JSON 编码

使用 IN 关键字

IN 关键字指定一个或多个值的相等性。它可以应用于分区键和聚类列。结果按照键在 SELECT 语句中的显示顺序返回。

示例

SELECT * from mykeyspace.mytable WHERE primary.key1 IN (1,2) and clustering.key1 = 2; SELECT * from mykeyspace.mytable WHERE primary.key1 IN (1,2) and clustering.key1 <= 2; SELECT * from mykeyspace.mytable WHERE primary.key1 = 1 and clustering.key1 IN (1, 2); SELECT * from mykeyspace.mytable WHERE primary.key1 <= 2 and clustering.key1 IN (1, 2) ALLOW FILTERING;

有关 IN 关键字以及 Amazon Keyspaces 如何处理该语句的更多信息,请参阅在 Amazon Keyspaces 中将 IN 运算符与 SELECT 语句配合使用

对结果排序

ORDER BY 子句指定返回结果的排序顺序。它采用列名称列表以及每列的排序顺序作为参数。您只能在排序子句中指定聚类列。不允许指定非聚类列。排序顺序选项是 ASC(用于升序排序顺序)和 DESC(用于降序排序顺序)。如果排序顺序被忽略,则使用聚类列的默认排序方式。有关可能的排序顺序,请参阅对 Amazon Keyspaces 中的结果排序

示例

SELECT name, id, division, manager_id FROM "myGSGKeyspace".employees_tbl WHERE id = '012-34-5678' ORDER BY division;

ORDER BYIN 关键字一起使用时,结果在一个页面内排序。不支持在禁用分页的情况下进行完全重新排序。

TOKEN

您可以将 TOKEN 函数应用于 SELECTWHERE 子句中的 PARTITION KEY 列。使用 TOKEN 函数时,Amazon Keyspaces 会根据 PARTITION_KEY 的映射令牌值(而不是 PARTITION KEY 的值)返回行。

IN 关键字不支持 TOKEN 关系。

示例

SELECT TOKEN(id) from my_table; SELECT TOKEN(id) from my_table WHERE TOKEN(id) > 100 and TOKEN(id) < 10000;

TTL 函数

可以将 TTL 函数与 SELECT 语句一起使用,检索为列存储的到期时间(以秒为单位)。如果未设置 TTL 值,该函数将返回 null

示例

SELECT TTL(my_column) from my_table;

TTL 函数不能用于多单元格列,例如集合。

WRITETIME 函数

仅当表使用了客户端时间戳时,您才能将 WRITETIME 函数与 SELECT 语句一起使用来检索存储为列值的元数据的时间戳。有关更多信息,请参阅 在 Amazon Keyspaces 中使用客户端时间戳

SELECT WRITETIME(my_column) from my_table;

WRITETIME 函数不能用于多单元格列,例如集合。

注意

为了与既定的 Cassandra 驱动程序行为兼容,当您通过 Cassandra 驱动程序和开发人员工具使用 Cassandra 查询语言 (CQL) API 调用对系统表执行操作时,系统不会强制实施基于标签的授权策略。有关更多信息,请参阅 基于标签的 Amazon Keyspaces 资源访问

INSERT

使用 INSERT 语句可向表添加行。

语法

insert_statement ::= INSERT INTO table_name ( names_values | json_clause ) [ IF NOT EXISTS ] [ USING update_parameter ( AND update_parameter )* ] names_values ::= names VALUES tuple_literal json_clause ::= JSON string [ DEFAULT ( NULL | UNSET ) ] names ::= '(' column_name ( ',' column_name )* ')'

示例

INSERT INTO "myGSGKeyspace".employees_tbl (id, name, project, region, division, role, pay_scale, vacation_hrs, manager_id) VALUES ('012-34-5678','Russ','NightFlight','US','Engineering','IC',3,12.5, '234-56-7890') ;

更新参数

INSERT 支持以下值作为 update_parameter

  • TTL:以秒为单位的时间值。最大可配置值为 630720000 秒,相当于 20 年。

  • TIMESTAMP:一个 bigint 值,表示自标准基准时间(称为epoch:1970 年 1 月 1 日 00:00:00 GMT)以来的微秒数。Amazon Keyspaces 中的时间戳必须介于过去 2 天和未来 5 分钟之间。

示例

INSERT INTO my_table (userid, time, subject, body, user) VALUES (B79CB3BA-745E-5D9A-8903-4A02327A7E09, 96a29100-5e25-11ec-90d7-b5d91eceda0a, 'Message', 'Hello','205.212.123.123') USING TTL 259200;

JSON 支持

有关将 JSON 编码的数据类型映射到 Amazon Keyspaces 数据类型的表,请参阅 Amazon Keyspaces 数据类型的 JSON 编码

可以使用 JSON 关键字将 JSON 编码的映射作为单行插入。对于表中存在但在 JSON 插入语句中省略的列,请使用 DEFAULT UNSET 保留现有值。使用 DEFAULT NULL 可将 NULL 值写入省略的列的每一行,并覆盖现有值(收取标准写入费用)。DEFAULT NULL 是默认选项。

示例

INSERT INTO "myGSGKeyspace".employees_tbl JSON '{"id":"012-34-5678", "name": "Russ", "project": "NightFlight", "region": "US", "division": "Engineering", "role": "IC", "pay_scale": 3, "vacation_hrs": 12.5, "manager_id": "234-56-7890"}';

如果 JSON 数据包含重复键,Amazon Keyspaces 会存储键的最后一个值(类似于 Apache Cassandra)。在以下示例(重复键为 id)中,使用了值 234-56-7890

示例

INSERT INTO "myGSGKeyspace".employees_tbl JSON '{"id":"012-34-5678", "name": "Russ", "project": "NightFlight", "region": "US", "division": "Engineering", "role": "IC", "pay_scale": 3, "vacation_hrs": 12.5, "id": "234-56-7890"}';

UPDATE

使用 UPDATE 语句可修改表中的行。

语法

update_statement ::= UPDATE table_name [ USING update_parameter ( AND update_parameter )* ] SET assignment ( ',' assignment )* WHERE where_clause [ IF ( EXISTS | condition ( AND condition )*) ] update_parameter ::= ( integer | bind_marker ) assignment ::= simple_selection '=' term | column_name '=' column_name ( '+' | '-' ) term | column_name '=' list_literal '+' column_name simple_selection ::= column_name | column_name '[' term ']' | column_name '.' `field_name condition ::= simple_selection operator term

示例

UPDATE "myGSGKeyspace".employees_tbl SET pay_scale = 5 WHERE id = '567-89-0123' AND division = 'Marketing' ;

要递增 counter,请使用以下语法。有关更多信息,请参阅 计数器

UPDATE ActiveUsers SET counter = counter + 1 WHERE user = A70FE1C0-5408-4AE3-BE34-8733E5K09F14 AND action = 'click';

更新参数

UPDATE 支持以下值作为 update_parameter

  • TTL:以秒为单位的时间值。最大可配置值为 630720000 秒,相当于 20 年。

  • TIMESTAMP:一个 bigint 值,表示自标准基准时间(称为epoch:1970 年 1 月 1 日 00:00:00 GMT)以来的微秒数。Amazon Keyspaces 中的时间戳必须介于过去 2 天和未来 5 分钟之间。

示例

UPDATE my_table (userid, time, subject, body, user) VALUES (B79CB3BA-745E-5D9A-8903-4A02327A7E09, 96a29100-5e25-11ec-90d7-b5d91eceda0a, 'Message', 'Hello again','205.212.123.123') USING TIMESTAMP '2022-11-03 13:30:54+0400';

删除

使用 DELETE 语句可从表中删除行。

语法

delete_statement ::= DELETE [ simple_selection ( ',' simple_selection ) ] FROM table_name [ USING update_parameter ( AND update_parameter )* ] WHERE where_clause [ IF ( EXISTS | condition ( AND condition )*) ] simple_selection ::= column_name | column_name '[' term ']' | column_name '.' `field_name condition ::= simple_selection operator term

其中:

  • table_name 是包含要删除的行的表。

示例

DELETE manager_id FROM "myGSGKeyspace".employees_tbl WHERE id='789-01-2345' AND division='Executive' ;

DELETE 支持以下值作为 update_parameter

  • TIMESTAMP:一个 bigint 值,表示自标准基准时间(称为epoch:1970 年 1 月 1 日 00:00:00 GMT)以来的微秒数。