本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 * frommykeyspace.mytable
WHERE primary.key1 IN (1,2) and clustering.key1 <= 2; SELECT * frommykeyspace.mytable
WHERE primary.key1 = 1 and clustering.key1 IN (1, 2); SELECT * frommykeyspace.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 BY
与 IN
关键字一起使用时,结果在一个页面内排序。不支持在禁用分页的情况下进行完全重新排序。
TOKEN
您可以将 TOKEN
函数应用于 SELECT
和 WHERE
子句中的 PARTITION KEY
列。使用 TOKEN
函数时,Amazon Keyspaces 会根据 PARTITION_KEY
的映射令牌值(而不是 PARTITION KEY
的值)返回行。
IN
关键字不支持 TOKEN
关系。
示例
SELECT TOKEN(id) from
my_table
; SELECT TOKEN(id) frommy_table
WHERE TOKEN(id) > 100 and TOKEN(id) < 10000;
TTL 函数
可以将 TTL
函数与 SELECT
语句一起使用,检索为列存储的到期时间(以秒为单位)。如果未设置 TTL
值,该函数将返回 null
。
示例
SELECT TTL(
my_column
) frommy_table
;
TTL
函数不能用于多单元格列,例如集合。
WRITETIME 函数
仅当表使用了客户端时间戳时,您才能将 WRITETIME
函数与 SELECT
语句一起使用来检索存储为列值的元数据的时间戳。有关更多信息,请参阅 在 Amazon Keyspaces 中使用客户端时间戳。
SELECT WRITETIME(
my_column
) frommy_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)以来的微秒数。