DMLAmazon Keyspaces 中的语句(数据操作语言) - Amazon Keyspaces(Apache Cassandra 兼容)

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

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

数据操作语言 (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 数据类型的表,请参阅。JSONAmazon Keyspaces 数据类型的编码

使用 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 的查询中使用带有SELECT语句的IN运算符

对结果排序

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

可以使用 JSON 关键字将 JSON 编码的映射作为单行插入。对于表中存在但在 ins JSON ert 语句中省略的列,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 语句可从表中删除行。

语法

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。