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

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

Amazon Keyspaces 中的 DDL 语句(数据定义语言)

数据定义语言(DDL) 是一组用于管理 Amazon 键空间(针对 Apache Cassandra)中的数据结构(如键空间和表)的 Cassandra 查询语言 (CQL) 语句。可以使用 DDL 创建这些数据结构,在创建数据结构后对其进行修改,以及在不再使用数据结构时将其删除。Amazon Keyspaces 异步执行 DDL 操作。有关如何确认异步操作已完成的更多信息,请参阅异步创建和删除 Keyspaces 和表

支持以下 DDL 语句:

主题

Keyspaces

键空间 对与一个或多个应用程序相关的表进行分组。就关系数据库管理系统 (RDBMS) 而言,键空间与数据库、表空间或类似的结构大致相似。

注意

在 Apache Cassandra 中,键空间将决定如何在多个存储节点之间复制数据。但是,Amazon Keyspaces 是一项完全托管的服务:系统将代表您管理其存储层的详细信息。因此,Amazon Keyspaces 中的键空间只是逻辑结构,并且与底层物理存储无关。

有关 Amazon Keyspaces 的配额限制和约束的信息,请参阅Amazon Keyspaces(针对 Apache Cassandra)的配额

以下是键空间唯一可用的复制策略:

SingleRegionStrategy— 跨其所在区域内的三个可用区复制数据。

CREATE KEYSPACE

使用 CREATE KEYSPACE 语句可创建新的键空间。

语法

create_keyspace_statement ::= CREATE KEYSPACE [ IF NOT EXISTS ] keyspace_name WITH options

其中:

  • keyspace_name 是要创建的键空间的名称。

  • 选项 为下列一个或多个项:

    • REPLICATION— 一个映射,指示键空间的复制策略 (SingleRegionStrategy),以及必要的附加值。(必需)

    • DURABLE_WRITES— 对 Amazon Keyspaces 的写入操作始终是持久的,因此不需要此选项。但是,如果指定此选项,则值必须为 true

    • TAGS— 创建时要附加到资源的键/值对标签的列表。

示例

创建键空间,如下所示。

CREATE KEYSPACE "myGSGKeyspace" WITH REPLICATION = {'class': 'SingleRegionStrategy'} and TAGS ={'key1':'val1', 'key2':'val2'} ;

ALTER KEYSPACE

使用 ALTER KEYSPACE 可在键空间中添加或删除标签。

语法

alter_keyspace_statement ::= ALTER KEYSPACE keyspace_name [[ADD | DROP] TAGS

其中:

  • keyspace_name 是要更改的键空间的名称。

  • TAGS— 要在键空间中添加或删除的键/值对标签的列表。

示例

更改键空间,如下所示。

ALTER KEYSPACE "myGSGKeyspace" ADD TAGS {'key1':'val1', 'key2':'val2'};

DROP KEYSPACE

使用DROP KEYSPACE语句可删除键空间-包括其所有内容(如表)。

语法

drop_keyspace_statement ::= DROP KEYSPACE [ IF EXISTS ] keyspace_name

其中:

  • keyspace_name 是要删除的键空间的名称。

示例

DROP KEYSPACE "myGSGKeyspace";

Tables

是 Amazon Keyspaces 中的主要数据结构。表中的数据按行和列进行组织。这些列的子集用于通过指定分区键来确定分区(以及最终的数据放置)。

可以将另一组列定义为聚类列,这意味着它们可以作为谓词参与查询执行。

默认情况下,将创建具有按需 吞吐容量的新表。您可以更改新表和现有表的容量模式。有关读/写容量吞吐量模式的更多信息,请参阅 Amazon Keyspaces 中的读/写容量模式

有关 Amazon Keyspaces 表的配额限制和约束的信息,请参阅Amazon Keyspaces(针对 Apache Cassandra)的配额

CREATE TABLE

使用 CREATE TABLE 语句可创建新表。

语法

create_table_statement ::= CREATE TABLE [ IF NOT EXISTS ] table_name '(' column_definition ( ',' column_definition )* [ ',' PRIMARY KEY '(' primary_key ')' ] ')' [ WITH table_options ] column_definition ::= column_name cql_type [ STATIC ][ PRIMARY KEY] primary_key ::= partition_key [ ',' clustering_columns ] partition_key ::= column_name | '(' column_name ( ',' column_name )* ')' clustering_columns ::= column_name ( ',' column_name )* table_options ::= [table_options] | CLUSTERING ORDER BY '(' clustering_order ')' [ AND table_options ] | options | CUSTOM_PROPERTIES | WITH TAGS clustering_order ::= column_name (ASC | DESC) ( ',' column_name (ASC | DESC) )*

其中:

  • table_name 是要创建的表的名称。

  • column_definition 包含以下各项:

    • column_name— 列的名称。

    • cql_type— Amazon Keyspaces 数据类型(请参阅数据类型)。

    • STATIC— 将此列指定为静态列。静态列存储由同一分区中的所有行共享的值。

    • PRIMARY KEY— 将此列指定为表的主键。

  • primary_key 包含以下各项:

    • partition_key

    • clustering_columns

  • partition_key:

    • 分区键可以是单个列,也可以是由两列或多个列组成的复合值。主键的分区键部分是必需的,可确定 Amazon Keyspaces 如何存储数据。

  • clustering_columns:

    • 主键的可选聚类列部分决定如何在每个分区中聚类和排序数据。

  • table_options包含以下各项:

    • CLUSTERING ORDER BY— 表上的默认 CLUSTRING ORDER 包含ASC(升序)排序方向。指定它可覆盖默认排序行为。

    • CUSTOM_PROPERTIES— 特定于 Amazon Keyspaces 的设置映射。

      • capacity_mode:指定表的读/写吞吐容量模式。选项为 throughput_mode:PAY_PER_REQUESTthroughput_mode:PROVISIONED。预置容量模式要求将 read_capacity_unitswrite_capacity_units 作为输入。默认为 throughput_mode:PAY_PER_REQUEST

      • encryption_specification:指定静态加密的加密选项。如果未指定,默认值为encryption_type:AWS_OWNED_KMS_KEY。加密选项客户管理密钥要求输入 Amazon 资源名称 (ARN) 格式的客户主密钥:kms_key_identifier:ARNkms_key_identifier:ARN

      • point_in_time_recovery:指定是否为表启用或禁用了时间点恢复。选项为 status:enabledstatus:disabled。如果未指定,默认值为status:disabled

    • TAGS:创建资源时要附加到资源的键/值对标签的列表。

  • clustering_order 包含以下各项:

    • column_name— 列的名称。

    • ASC | DESC— 设置上升 (ASC)或后代(DESC) 订单修改量。如果未指定,默认顺序为 ASC。

示例

CREATE TABLE IF NOT EXISTS "my_keyspace".my_table ( id text, name text, region text, division text, project text, role text, pay_scale int, vacation_hrs float, manager_id text, PRIMARY KEY (id,division)) WITH CUSTOM_PROPERTIES={ 'capacity_mode':{ 'throughput_mode': 'PROVISIONED', 'read_capacity_units': 10, 'write_capacity_units': 20 }, 'point_in_time_recovery':{'status': 'enabled'}, 'encryption_specification':{ 'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY', 'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111' } } AND CLUSTERING ORDER BY (division ASC) AND TAGS={'key1':'val1', 'key2':'val2'};

在使用聚类列的表中,可以在表定义中将非聚类列声明为静态列。有关静态列的更多信息,请参阅亚马逊 Keyspaces 中的静态列

示例

CREATE TABLE "my_keyspace".my_table ( id int, name text, region text, division text, project text STATIC, PRIMARY KEY (id,division));

ALTER TABLE

使用ALTER TABLE语句可添加新列、添加标签或更改表的自定义属性。

语法

alter_table_statement ::= ALTER TABLE table_name [ ADD ( column_definition | column_definition_list) ] [[ADD | DROP] TAGS {'key1':'val1', 'key2':'val2'}] [ WITH table_options [ , ... ] ] ; column_definition ::= column_name cql_type

其中:

  • table_name 是要更改的表的名称。

  • column_definition 是要添加的列和数据类型的名称。

  • column_definition_list 是放在括号内的列的逗号分隔列表。

  • TAGS 是要附加到资源的键/值对标签的列表。

  • table_options包含以下各项:

    • CUSTOM_PROPERTIES— Amazon Keyspaces 特定于 Amazon Keyspaces 的设置的映射。

      • capacity_mode:指定表的读/写吞吐容量模式。选项为 throughput_mode:PAY_PER_REQUESTthroughput_mode:PROVISIONED。预置容量模式要求将 read_capacity_unitswrite_capacity_units 作为输入。默认为 throughput_mode:PAY_PER_REQUEST

      • encryption_specification:指定静态加密的加密选项。选项为 encryption_type:AWS_OWNED_KMS_KEYencryption_type:CUSTOMER_MANAGED_KMS_KEY。加密选项客户管理密钥要求输入 Amazon 资源名称 (ARN) 格式的客户主密钥:kms_key_identifier:ARN

      • point_in_time_recovery:指定是否为表启用或禁用了时间点恢复。选项为 status:enabledstatus:disabled。默认为 status:disabled

注意

使用 ALTER TABLE,您可以添加列、添加标签或更改自定义属性。不能在同一语句中组合多个 ALTER TABLE 命令。

示例

ALTER TABLE "myGSGKeyspace".employees_tbl ADD (first_name text); or ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES={'capacity_mode':{'throughput_mode': 'PROVISIONED', 'read_capacity_units': 10, 'write_capacity_units': 20}} ; or ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES={ 'encryption_specification':{ 'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY', 'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111' } } or ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES={'point_in_time_recovery': {'status': 'enabled'}};;

还原表

使用RESTORE TABLE语句将表还原到某个时间点。此语句要求对表启用时间点恢复。有关更多信息,请参阅Amazon Keyspaces(针对 Apache Cassandra)的时间点恢复

语法

restore_table_statement ::= RESTORE TABLE table_name FROM TABLE table_name [ WITH table_options [ , ... ] ] ;

其中:

  • restored_table_name是已还原的表的名称。

  • source_table_name是源表的名称。

  • table_options 包含以下各项:

    • restore_timestamp是还原点时间。如果未指定,则使用当前时间戳。

    • CUSTOM_PROPERTIES— Amazon Keyspaces 特定于 Amazon Keyspaces 的设置的映射。

      • capacity_mode:指定表的读/写吞吐容量模式。选项为 throughput_mode:PAY_PER_REQUESTthroughput_mode:PROVISIONED。预置容量模式要求将 read_capacity_unitswrite_capacity_units 作为输入。默认值为源表中的当前设置。

      • encryption_specification:指定静态加密的加密选项。选项为 encryption_type:AWS_OWNED_KMS_KEYencryption_type:CUSTOMER_MANAGED_KMS_KEY。加密选项客户管理密钥要求输入 Amazon 资源名称 (ARN) 格式的客户主密钥:kms_key_identifier:ARN。 要将使用客户管理密钥加密的表恢复到使用Amazon拥有的密钥,Amazon Keyspaces 需要访问源表的客户主密钥。

      • point_in_time_recovery:指定是否为表启用或禁用了时间点恢复。选项为 status:enabledstatus:disabled。与创建新表时不同,还原表的默认状态为status:enabled,因为设置是从源表中继承的。要对还原的表禁用 PITR,必须设置status:disabled显式。

    • TAGS 是要附加到资源的键/值对标签的列表。

注意

已删除的表只能恢复到删除时。

示例

RESTORE TABLE mykeyspace.mytable_restored from table mykeyspace.my_table WITH restore_timestamp = '2020-06-30T04:05:00+0000' AND custom_properties = {'point_in_time_recovery':{'status':'disabled'}, 'capacity_mode':{'throughput_mode': 'PROVISIONED', 'read_capacity_units': 10, 'write_capacity_units': 20}} AND TAGS={'key1':'val1', 'key2':'val2'};

DROP TABLE

使用 DROP TABLE 语句可从键空间中删除表。

语法

drop_table_statement ::= DROP TABLE [ IF EXISTS ] table_name

其中:

  • IF EXISTS 防止 DROP TABLE 在表不存在的情况下失败。(可选)

  • table_name 是要删除的表的名称。

示例

DROP TABLE "myGSGKeyspace".employees_tbl;