

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon Keyspaces 中的 DDL 陳述式 （資料定義語言）
<a name="cql.ddl"></a>

*資料定義語言* (DDL) 是一組 Cassandra 查詢語言 (CQL) 陳述式，用於管理 Amazon Keyspaces （適用於 Apache Cassandra) 中的資料結構，例如金鑰空間和資料表。您可以使用 DDL 建立這些資料結構、在建立後修改它們，並在它們不再使用時將其移除。Amazon Keyspaces 會以非同步方式執行 DDL 操作。如需如何確認非同步操作已完成的詳細資訊，請參閱 [非同步建立和刪除金鑰空間和資料表](functional-differences.md#functional-differences.table-keyspace-management)。

 支援下列 DDL 陳述式：
+  [建立 KEYSPACE](cql.ddl.keyspace.md#cql.ddl.keyspace.create) 
+  [ALTER KEYSPACE](cql.ddl.keyspace.md#cql.ddl.keyspace.alter) 
+  [DROP KEYSPACE](cql.ddl.keyspace.md#cql.ddl.keyspace.drop) 
+  [使用](cql.ddl.keyspace.md#cql.ddl.keyspace.use) 
+  [建立資料表](cql.ddl.table.md#cql.ddl.table.create) 
+  [ALTER TABLE](cql.ddl.table.md#cql.ddl.table.alter) 
+  [RESTORE 資料表](cql.ddl.table.md#cql.ddl.table.restore) 
+  [DROP 資料表](cql.ddl.table.md#cql.ddl.table.drop) 
+  [建立類型](cql.ddl.type.md#cql.ddl.type.create) 
+  [DROP 類型](cql.ddl.type.md#cql.ddl.type.drop) 

**Topics**
+ [Keyspaces](cql.ddl.keyspace.md)
+ [表格](cql.ddl.table.md)
+ [使用者定義的類型 (UDTs)](cql.ddl.type.md)

# Keyspaces
<a name="cql.ddl.keyspace"></a>

與一或多個應用程式相關的*鍵空間*群組相關資料表。在關聯式資料庫管理系統 (RDBMS) 方面，金鑰空間大致類似於資料庫、資料表空間或類似建構。

**注意**  
在 Apache Cassandra 中，金鑰空間會決定如何在多個儲存節點之間複寫資料。不過，Amazon Keyspaces 是一項全受管服務：其儲存層的詳細資訊會代表您管理。因此，Amazon Keyspaces 中的鍵空間僅為邏輯建構，與基礎實體儲存無關。

如需 Amazon Keyspaces 金鑰空間配額限制和限制的相關資訊，請參閱 [Amazon Keyspaces 配額 （適用於 Apache Cassandra)](quotas.md)。

**Topics**
+ [建立 KEYSPACE](#cql.ddl.keyspace.create)
+ [ALTER KEYSPACE](#cql.ddl.keyspace.alter)
+ [DROP KEYSPACE](#cql.ddl.keyspace.drop)
+ [USE](#cql.ddl.keyspace.use)

## 建立 KEYSPACE
<a name="cql.ddl.keyspace.create"></a>

使用 `CREATE KEYSPACE`陳述式建立新的金鑰空間。

**語法**

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

其中：
+ `keyspace_name` 是要建立的金鑰空間名稱。
+ *選項*是下列一或多個項目：
  + `REPLICATION` – 表示金鑰空間複寫策略的映射：
    + `SingleRegionStrategy` – 適用於單一區域金鑰空間。(必要)
    + `NetworkTopologyStrategy` – 指定至少兩個 AWS 區域。每個區域的複寫係數為 3。(選用)
  + `DURABLE_WRITES` – 寫入 Amazon Keyspaces 一律耐用，因此不需要此選項。不過，如果指定，則值必須為 `true`。
  + `TAGS` – 建立時要附加至資源的鍵/值對標籤清單。(選用)

**範例**

建立金鑰空間，如下所示。

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

若要建立多區域金鑰空間，請指定`NetworkTopologyStrategy`並包含至少兩個 AWS 區域。每個區域的複寫係數為 3。

```
CREATE KEYSPACE my_keyspace
    WITH REPLICATION = {'class':'NetworkTopologyStrategy', 'us-east-1':'3', 'ap-southeast-1':'3','eu-west-1':'3'};
```

## ALTER KEYSPACE
<a name="cql.ddl.keyspace.alter"></a>

您可以使用下列*選項*的 `ALTER KEYSPACE WITH`陳述式
+ `REPLICATION` – 使用此選項將新 AWS 區域 複本新增至金鑰空間。您可以將新區域新增至單一區域或多區域金鑰空間。
+ `TAGS` – 使用此選項從鍵空間新增或移除標籤。

**語法**

```
alter_keyspace_statement ::= 
    ALTER KEYSPACE keyspace_name
    WITH options
```

其中：
+ `keyspace_name` 是要變更的金鑰空間名稱。
+ *選項*為下列其中一項：
  + `ADD | DROP TAGS` – 要從鍵空間新增或移除的鍵值對標籤清單。
  + `REPLICATION` – 表示金鑰空間複寫策略的映射；
    + `class`– 將金鑰空間`NetworkTopologyStrategy`定義為多區域金鑰空間。
    + `region`– AWS 區域 為此金鑰空間指定一個額外的 。每個區域的複寫係數為 3。
    + `CLIENT_SIDE_TIMESTAMPS` – 預設值為 `DISABLED`。您只能將狀態變更為 `ENABLED`。

**範例**

修改金鑰空間，如下列範例所示，以新增標籤。

```
ALTER KEYSPACE my_keyspace ADD TAGS {'key1':'val1', 'key2':'val2'};
```

若要將第三個區域新增至多區域金鑰空間，您可以使用下列陳述式。

```
ALTER KEYSPACE my_keyspace
WITH REPLICATION = {
    'class': 'NetworkTopologyStrategy',
    'us-east-1': '3',
    'us-west-2': '3',
    'us-west-1': '3'
} AND CLIENT_SIDE_TIMESTAMPS = {'status': 'ENABLED'};
```

## DROP KEYSPACE
<a name="cql.ddl.keyspace.drop"></a>

使用 `DROP KEYSPACE`陳述式移除金鑰空間，包括其所有內容，例如資料表。

**語法**

```
drop_keyspace_statement ::= 
    DROP KEYSPACE [ IF EXISTS ] keyspace_name
```

其中：
+ *keyspace\$1name* 是要捨棄的金鑰空間名稱。

**範例**

```
DROP KEYSPACE my_keyspace;
```

## USE
<a name="cql.ddl.keyspace.use"></a>

使用 `USE`陳述式來定義目前的金鑰空間。這可讓您參考繫結至特定金鑰空間的物件，例如資料表和類型，而無需使用包含金鑰空間字首的完整名稱。

**語法**

```
use_statement ::= 
    USE keyspace_name
```

其中：
+ *keyspace\$1name* 是要使用的金鑰空間名稱。

**範例**

```
USE my_keyspace;
```

# 表格
<a name="cql.ddl.table"></a>

*資料表*是 Amazon Keyspaces 中的主要資料結構。資料表中的資料會組織成資料列和資料欄。這些資料欄的子集用於透過分割區索引鍵的規格來判斷分割區 （最終是資料置放）。

另一組資料欄可以定義成叢集資料欄，這表示它們可以參與做為查詢執行的述詞。

根據預設，會使用*隨需*輸送量容量建立新的資料表。您可以變更新資料表和現有資料表的容量模式。如需讀取/寫入容量輸送量模式的詳細資訊，請參閱 [在 Amazon Keyspaces 中設定讀取/寫入容量模式](ReadWriteCapacityMode.md)。

對於佈建模式中的資料表，您可以設定選用的 `AUTOSCALING_SETTINGS`。如需 Amazon Keyspaces 自動擴展和可用選項的詳細資訊，請參閱 [在現有資料表上設定自動擴展](autoscaling.configureTable.md)。

如需 Amazon Keyspaces 資料表配額限制和限制的相關資訊，請參閱 [Amazon Keyspaces 配額 （適用於 Apache Cassandra)](quotas.md)。

**Topics**
+ [CREATE TABLE](#cql.ddl.table.create)
+ [ALTER TABLE](#cql.ddl.table.alter)
+ [RESTORE 資料表](#cql.ddl.table.restore)
+ [DROP TABLE](#cql.ddl.table.drop)

## CREATE TABLE
<a name="cql.ddl.table.create"></a>

使用 `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 [ FROZEN ][ 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 ]
                              | cdc
                              | CUSTOM_PROPERTIES
                              | AUTOSCALING_SETTINGS
                              | default_time_to_live
                              | TAGS

clustering_order       ::=  column_name (ASC | DESC) ( ',' column_name (ASC | DESC) )*
```

其中：
+ `table_name` 是要建立的資料表名稱。完整名稱包含金鑰空間字首。或者，您可以使用 金鑰空間陳述式來設定目前的`USE`金鑰空間。
+ `column_definition` 包含下列項目：
  +  *`column_name`* – 資料欄的名稱。
  + `cql_type` – Amazon Keyspaces 資料類型 （請參閱 [資料類型](cql.elements.md#cql.data-types))。
  + `FROZEN` – 將使用者定義或類型 `collection`（例如 `LIST`、 `SET`或 `MAP`) 的此欄指定為凍結。*凍結*集合會序列化為單一不可變值，並視為 `BLOB`。如需詳細資訊，請參閱[集合類型](cql.elements.md#cql.data-types.collection)。
  + `STATIC` – 將此欄指定為靜態。靜態資料欄會存放相同分割區中所有資料列共用的值。
  + `PRIMARY KEY` – 將此欄指定為資料表的主索引鍵。
+ `primary_key` 包含下列項目：
  + `partition_key`
  + `clustering_columns`
+ `partition_key`:
  + 分割區索引鍵可以是單一資料欄，也可以是由兩個或多個資料欄組成的複合值。主索引鍵的分割區索引鍵部分是必要的，並決定 Amazon Keyspaces 如何存放您的資料。
+ `clustering_columns`:
  + 主索引鍵的選用叢集資料欄部分會決定如何在每個分割區中叢集和排序資料。
+ `table_options` 包含下列項目：
  + *`CLUSTERING ORDER BY`* – 資料表上的預設 CLUSTERING ORDER 由 `ASC`（遞增） 排序方向的叢集索引鍵組成。指定它來覆寫預設排序行為。
  +  *`cdc`* – 布林值，指定 Amazon Keyspaces 是否為資料表建立變更資料擷取 (CDC) 串流。預設值為 `false`。若要在啟用串流`view type`時指定 ，`cdc_specification`請使用 設定 `CUSTOM_PROPERTIES` 。
  +  *`CUSTOM_PROPERTIES`* – Amazon Keyspaces 特有的設定映射。
    +  `capacity_mode`：指定資料表的讀取/寫入輸送量容量模式。選項包括 `throughput_mode:PAY_PER_REQUEST` 和 `throughput_mode:PROVISIONED`. 佈建的容量模式需要 `read_capacity_units`和 `write_capacity_units`做為輸入。預設值為 `throughput_mode:PAY_PER_REQUEST`。
    +  `cdc_specification`：指定 CDC 串流`view_type`的 。選項為：
      + `NEW_AND_OLD_IMAGES` – 變更前後的兩個資料列版本。這是預設值。
      + `NEW_IMAGE` – 變更後的列版本。
      + `OLD_IMAGE` – 變更前的資料列版本。
      + `KEYS_ONLY` – 已變更資料列的分割區和叢集索引鍵。

      如需 CDC 串流的詳細資訊，請參閱 [在 Amazon Keyspaces 中使用變更資料擷取 (CDC) 串流](cdc.md)。如需程式碼範例，請參閱 [在 Amazon Keyspaces 中建立新資料表時啟用 CDC 串流](keyspaces-enable-cdc-new-table.md)。
    +  `client_side_timestamps`：指定資料表的用戶端時間戳記是啟用或停用。選項包括 `{'status': 'enabled'}` 和 `{'status': 'disabled'}`. 如果未指定，則預設值為 `status:disabled`。為資料表啟用用戶端時間戳記後，就無法停用此設定。
    +  `encryption_specification`：指定靜態加密的加密選項。如果未指定，則預設值為 `encryption_type:AWS_OWNED_KMS_KEY`。加密選項客戶受管金鑰需要 Amazon Resource Name (ARN) 格式的 AWS KMS 金鑰做為輸入：`kms_key_identifier:ARN`：`kms_key_identifier:ARN`。
    +  `point_in_time_recovery`：指定資料表的point-in-time還原是啟用或停用。選項包括 `status:enabled` 和 `status:disabled`. 如果未指定，則預設值為 `status:disabled`。
    + `replica_updates`：指定 專屬的多區域資料表設定 AWS 區域。對於多區域資料表，您可以為每個 以不同的方式設定資料表的讀取容量 AWS 區域。您可以設定下列參數來執行此操作。如需詳細資訊和範例，請參閱 [在 Amazon Keyspaces 中使用自動擴展的佈建模式中建立多區域資料表](tables-mrr-create-provisioned.md)。
      + `region` – 具有下列設定的資料表複本 AWS 區域 的 ：
        + `read_capacity_units`
    +  `TTL`：啟用資料表的存留時間自訂設定。若要啟用，請使用 `status:enabled`。預設值為 `status:disabled`。`TTL` 啟用 之後，您就無法為資料表停用它。
  + `AUTOSCALING_SETTINGS` 包含下列佈建模式中資料表的選用設定。如需詳細資訊和範例，請參閱 [使用自動擴展建立新的資料表](autoscaling.createTable.md)。
    + `provisioned_write_capacity_autoscaling_update`:
      + `autoscaling_disabled` – 若要啟用寫入容量的自動擴展，請將 值設定為 `false`。預設值為 `true`。(選用)
      + `minimum_units` – 資料表應隨時準備好支援的最小寫入輸送量層級。此值必須介於 1 和您帳戶的每秒最大輸送量配額之間 （預設為 40，000)。
      + `maximum_units` – 資料表應隨時準備好支援的寫入輸送量上限。此值必須介於 1 和您帳戶的每秒最大輸送量配額之間 （預設為 40，000)。
      + `scaling_policy` – Amazon Keyspaces 支援目標追蹤政策。自動擴展目標是資料表的佈建寫入容量。
        + `target_tracking_scaling_policy_configuration` – 若要定義目標追蹤政策，您必須定義目標值。如需目標追蹤和冷卻時間的詳細資訊，請參閱《*Application Auto Scaling * [ Scaling 使用者指南》中的目標追蹤擴展政策](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)。
          + `target_value` – 資料表的目標使用率。Amazon Keyspaces 自動擴展可確保耗用容量與佈建容量的比率保持在或接近此值。您能以百分比的形式定義 `target_value`。介於 20 到 90 之間的兩倍。(必要)
          + `scale_in_cooldown` – 擴展活動之間的冷卻時間，以秒為單位，可讓資料表在另一個擴展活動開始之前穩定。如果未提供任何值，則預設值為 0。(選用)
          + `scale_out_cooldown` – 擴展活動之間的冷卻時間，以秒為單位，可讓資料表在另一個橫向擴展活動開始之前穩定。如果未提供任何值，則預設值為 0。(選用)
          + `disable_scale_in`：`boolean`指定資料表`scale-in`是否已停用或已啟用的 。此參數預設為停用。若要開啟 `scale-in`，請將 `boolean`值設定為 `FALSE`。這表示會自動為您縮減資料表的容量。(選用) 
    + `provisioned_read_capacity_autoscaling_update`:
      + `autoscaling_disabled` – 若要啟用讀取容量的自動擴展，請將 值設定為 `false`。預設值為 `true`。(選用)
      + `minimum_units` – 資料表應隨時準備好支援的輸送量最低層級。此值必須介於 1 和您帳戶的每秒最大輸送量配額之間 （預設為 40，000)。
      + `maximum_units` – 資料表應隨時準備好支援的輸送量上限。此值必須介於 1 和您帳戶的每秒最大輸送量配額之間 （預設為 40，000)。
      + `scaling_policy` – Amazon Keyspaces 支援目標追蹤政策。自動擴展目標是資料表的佈建讀取容量。
        + `target_tracking_scaling_policy_configuration` – 若要定義目標追蹤政策，您必須定義目標值。如需目標追蹤和冷卻期間的詳細資訊，請參閱《*Application Auto Scaling * [ Scaling 使用者指南》中的目標追蹤擴展政策](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)。
          + `target_value` – 資料表的目標使用率。Amazon Keyspaces 自動擴展可確保耗用容量與佈建容量的比率保持在或接近此值。您能以百分比的形式定義 `target_value`。介於 20 到 90 之間的兩倍。(必要)
          + `scale_in_cooldown` – 擴展活動之間的冷卻時間，以秒為單位，可讓資料表在另一個擴展活動開始之前穩定。如果未提供任何值，則預設值為 0。(選用)
          + `scale_out_cooldown` – 擴展活動之間的冷卻時間，以秒為單位，可讓資料表在另一個橫向擴展活動開始之前穩定。如果未提供任何值，則預設值為 0。(選用)
          + `disable_scale_in`：`boolean`指定資料表`scale-in`是否已停用或已啟用的 。此參數預設為停用。若要開啟 `scale-in`，請將 `boolean`值設定為 `FALSE`。這表示會自動為您縮減資料表的容量。(選用) 
    + `replica_updates`：指定多區域資料表 AWS 區域 的特定自動擴展設定。對於多區域資料表，您可以為每個 以不同的方式設定資料表的讀取容量 AWS 區域。您可以設定下列參數來執行此操作。如需詳細資訊和範例，請參閱 [更新 Amazon Keyspaces 中多區域資料表的佈建容量和自動擴展設定](tables-mrr-autoscaling.md)。
      + `region` – 具有下列設定的資料表複本 AWS 區域 的 ：
        + `provisioned_read_capacity_autoscaling_update`
          + `autoscaling_disabled` – 若要啟用資料表讀取容量的自動擴展，請將 值設定為 `false`。預設值為 `true`。(選用) 
**注意**  
必須為資料表的所有複本啟用或停用多區域資料表的自動擴展。
          + `minimum_units` – 資料表應隨時準備好支援的讀取輸送量最低層級。此值必須介於 1 和您帳戶的每秒最大輸送量配額之間 （預設為 40，000)。
          + `maximum_units` – 資料表應隨時準備好支援的讀取輸送量上限。此值必須介於 1 和您帳戶的每秒最大輸送量配額之間 （預設為 40，000)。
          + `scaling_policy` – Amazon Keyspaces 支援目標追蹤政策。自動擴展目標是資料表的佈建讀取容量。
            + `target_tracking_scaling_policy_configuration` – 若要定義目標追蹤政策，您必須定義目標值。如需目標追蹤和冷卻時間的詳細資訊，請參閱《*Application Auto Scaling * [ Scaling 使用者指南》中的目標追蹤擴展政策](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)。
              + `target_value` – 資料表的目標使用率。Amazon Keyspaces 自動擴展可確保耗用讀取容量與佈建讀取容量的比率保持在或接近此值。您能以百分比的形式定義 `target_value`。介於 20 到 90 之間的兩倍。(必要)
              + `scale_in_cooldown` – 擴展活動之間的冷卻時間，以秒為單位，可讓資料表在另一個擴展活動開始之前穩定。如果未提供任何值，則預設值為 0。(選用)
              + `scale_out_cooldown` – 擴展活動之間的冷卻時間，以秒為單位，可讓資料表在另一個橫向擴展活動開始之前穩定。如果未提供任何值，則預設值為 0。(選用)
              + `disable_scale_in`：`boolean`指定資料表`scale-in`是否已停用或已啟用的 。此參數預設為停用。若要開啟 `scale-in`，請將 `boolean`值設定為 `FALSE`。這表示系統會自動為您縮減資料表的讀取容量。(選用) 
  + `default_time_to_live` – 資料表的預設存留時間設定，以秒為單位。
  + `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'}
                                            AND default_time_to_live = 3024000;
```

在使用叢集資料欄的資料表中，非叢集資料欄可以在資料表定義中宣告為靜態資料欄。如需靜態資料欄的詳細資訊，請參閱 [預估 Amazon Keyspaces 中靜態資料欄的容量耗用](static-columns.md)。

**範例**

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

您可以使用使用者定義類型 (UDT) 的欄來建立資料表。範例中的第一個陳述式會建立 類型，第二個陳述式會使用 類型的資料欄來建立資料表。

**範例**

```
CREATE TYPE my_keyspace."udt""N@ME" (my_field int);
CREATE TABLE my_keyspace.my_table (my_col1 int pri key, my_col2 "udt""N@ME");
```

## ALTER TABLE
<a name="cql.ddl.table.alter"></a>

使用 `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` 是放在括號內以逗號分隔的資料欄清單。
+ `table_options` 包含下列項目：
  + `AUTOSCALING_SETTINGS` 包含佈建資料表的選用自動擴展設定。如需語法和詳細說明，請參閱 [CREATE TABLE](#cql.ddl.table.create)。如需範例，請參閱 [在現有資料表上設定自動擴展](autoscaling.configureTable.md)。
  +  *`cdc`* – 布林值，指定 Amazon Keyspaces 是否為資料表建立變更資料擷取 (CDC) 串流。預設值為 `false`。若要在啟用串流`view type`時指定 ，`cdc_specification`請使用 設定 `CUSTOM_PROPERTIES` 。
  +  *`CUSTOM_PROPERTIES`* – Amazon Keyspaces 特有的設定映射。
    +  `capacity_mode`：指定資料表的讀取/寫入輸送量容量模式。選項包括 `throughput_mode:PAY_PER_REQUEST` 和 `throughput_mode:PROVISIONED`. 佈建的容量模式需要 `read_capacity_units`和 `write_capacity_units`做為輸入。預設值為 `throughput_mode:PAY_PER_REQUEST`。
    +  `cdc_specification`：指定 CDC 串流`view_type`的 。選項為：
      + `NEW_AND_OLD_IMAGES` – 變更前後的兩個資料列版本。這是預設值。
      + `NEW_IMAGE` – 變更後的列版本。
      + `OLD_IMAGE` – 變更前的資料列版本。
      + `KEYS_ONLY` – 已變更資料列的分割區和叢集索引鍵。

      如需 CDC 串流的詳細資訊，請參閱 [在 Amazon Keyspaces 中使用變更資料擷取 (CDC) 串流](cdc.md)。如需程式碼範例，請參閱 [為 Amazon Keyspaces 中的現有資料表啟用 CDC 串流](keyspaces-enable-cdc-alter-table.md)。
    +  `client_side_timestamps`：指定資料表的用戶端時間戳記是啟用或停用。選項包括 `{'status': 'enabled'}` 和 `{'status': 'disabled'}`. 如果未指定，則預設值為 `status:disabled`。為資料表啟用用戶端時間戳記後，就無法停用此設定。
    +  `encryption_specification`：指定靜態加密的加密選項。選項包括 `encryption_type:AWS_OWNED_KMS_KEY` 和 `encryption_type:CUSTOMER_MANAGED_KMS_KEY`. 加密選項客戶受管金鑰需要 Amazon Resource Name (ARN) 格式的 AWS KMS 金鑰做為輸入：`kms_key_identifier:ARN`。
    +  `point_in_time_recovery`：指定資料表的point-in-time還原是啟用或停用。選項包括 `status:enabled` 和 `status:disabled`. 預設值為 `status:disabled`。
    + `replica_updates`：指定多區域資料表 AWS 區域 的特定設定。對於多區域資料表，您可以為每個資料表設定不同的讀取容量 AWS 區域。您可以設定下列參數來執行此操作。如需詳細資訊和範例，請參閱 [更新 Amazon Keyspaces 中多區域資料表的佈建容量和自動擴展設定](tables-mrr-autoscaling.md)。
      + `region` – 具有下列設定的資料表複本 AWS 區域 的 ：
        + `read_capacity_units` 
    +  `ttl`：啟用資料表的存留時間自訂設定。若要啟用，請使用 `status:enabled`。預設值為 `status:disabled`。`ttl`啟用 之後，您就無法為資料表停用它。
+ `default_time_to_live`：資料表的預設存留時間設定，以秒為單位。
+ `TAGS` 是要連接到資源的鍵/值對標籤清單。

**注意**  
使用 ALTER TABLE，您只能變更單一自訂屬性。您不能在同一陳述式中結合多個 ALTER TABLE 命令。

**範例**

下列陳述式說明如何將資料欄新增至現有資料表。

```
ALTER TABLE mykeyspace.mytable ADD (ID int);
```

此陳述式說明如何將兩個集合資料欄新增至現有資料表：
+ 包含巢狀凍結集合`col_frozen_list`的凍結集合欄
+ `col_map` 包含巢狀凍結集合的非凍結集合欄

```
ALTER TABLE my_Table ADD(col_frozen_list FROZEN<LIST<FROZEN<SET<TEXT>>>>, col_map MAP<INT, FROZEN<SET<INT>>>);
```

下列範例示範如何將使用使用者定義類型 (UDT) 的資料欄新增至資料表。

```
ALTER TABLE my_keyspace.my_table ADD (my_column, my_udt;);
```

若要變更資料表的容量模式並指定讀取和寫入容量單位，您可以使用下列陳述式。

```
ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES={'capacity_mode':{'throughput_mode': 'PROVISIONED', 'read_capacity_units': 10, 'write_capacity_units': 20}};
```

下列陳述式指定資料表的客戶受管 KMS 金鑰。

```
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'     
                  } 
         };
```

若要啟用資料表的point-in-time還原，您可以使用下列陳述式。

```
ALTER TABLE mykeyspace.mytable WITH CUSTOM_PROPERTIES={'point_in_time_recovery': {'status': 'enabled'}};
```

若要設定資料表的預設存留時間值，以秒為單位，您可以使用下列陳述式。

```
ALTER TABLE my_table WITH default_time_to_live = 2592000;
```

此陳述式會啟用資料表的自訂存留時間設定。

```
ALTER TABLE mytable WITH CUSTOM_PROPERTIES={'ttl':{'status': 'enabled'}};
```

## RESTORE 資料表
<a name="cql.ddl.table.restore"></a>

使用 `RESTORE TABLE`陳述式將資料表還原至某個時間點。此陳述式需要在point-in-time復原。如需詳細資訊，請參閱[使用 point-in-time復原來備份和還原資料](PointInTimeRecovery.md)。

**語法**

```
restore_table_statement ::=  
    RESTORE TABLE restored_table_name FROM TABLE source_table_name 
                    [ WITH table_options [ , ... ] ];
```

其中：
+ `restored_table_name` 是還原資料表的名稱。
+ `source_table_name` 是來源資料表的名稱。
+ `table_options` 包含下列項目：
  + `restore_timestamp` 是 ISO 8601 格式的還原點時間。如果未指定，則會使用目前的時間戳記。
  +  *`CUSTOM_PROPERTIES`* – Amazon Keyspaces 特有的設定映射。
    +  `capacity_mode`：指定資料表的讀取/寫入輸送量容量模式。選項包括 `throughput_mode:PAY_PER_REQUEST` 和 `throughput_mode:PROVISIONED`. 佈建的容量模式需要 `read_capacity_units`和 `write_capacity_units`做為輸入。預設值是來源資料表的目前設定。
    +  `encryption_specification`：指定靜態加密的加密選項。選項包括 `encryption_type:AWS_OWNED_KMS_KEY` 和 `encryption_type:CUSTOMER_MANAGED_KMS_KEY`. 加密選項客戶受管金鑰需要 Amazon Resource Name (ARN) 格式的 AWS KMS 金鑰做為輸入：`kms_key_identifier:ARN`。若要將以客戶受管金鑰加密的資料表還原至以 加密的資料表 AWS 擁有的金鑰，Amazon Keyspaces 需要存取來源資料表的 AWS KMS 金鑰。
    +  `point_in_time_recovery`：指定資料表的point-in-time還原是啟用或停用。選項包括 `status:enabled` 和 `status:disabled`. 與建立新資料表時不同，還原資料表的預設狀態是 ，`status:enabled`因為設定繼承自來源資料表。若要停用還原資料表的 PITR，您必須`status:disabled`明確設定 。
    + `replica_updates`：指定多區域資料表 AWS 區域 的特定設定。對於多區域資料表，您可以為每個資料表設定不同的讀取容量 AWS 區域。您可以設定下列參數來執行此操作。
      + `region` – 具有下列設定的資料表複本 AWS 區域 的 ：
        + `read_capacity_units` 
  + `AUTOSCALING_SETTINGS` 包含佈建資料表的選用自動擴展設定。如需詳細的語法和說明，請參閱 [CREATE TABLE](#cql.ddl.table.create)。
  + `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
<a name="cql.ddl.table.drop"></a>

使用 `DROP TABLE`陳述式從 金鑰空間移除資料表。

**語法**

```
drop_table_statement ::=  
    DROP TABLE [ IF EXISTS ] table_name
```

其中：
+ `IF EXISTS` 如果資料表不存在， `DROP TABLE`會防止 失敗。(選用)
+ `table_name` 是要捨棄的資料表名稱。

**範例**

```
DROP TABLE my_keyspace.my_table;
```

# 使用者定義的類型 (UDTs)
<a name="cql.ddl.type"></a>

*UDT* – 欄位和資料類型的分組，可用於在 Amazon Keyspaces 中定義單一資料欄。UDTs 的有效資料類型都是支援的 Cassandra 資料類型，包括您已在相同金鑰空間中建立的集合和其他 UDTs。如需支援的 Cassandra 資料類型的詳細資訊，請參閱 [Cassandra 資料類型支援](cassandra-apis.md#cassandra-data-type)。

```
user_defined_type::= udt_name
udt_name::= [ keyspace_name '.' ] identifier
```

**Topics**
+ [CREATE TYPE](#cql.ddl.type.create)
+ [DROP TYPE](#cql.ddl.type.drop)

## CREATE TYPE
<a name="cql.ddl.type.create"></a>

使用 `CREATE TYPE`陳述式來建立新的類型。

 **語法**

```
create_type_statement ::=  CREATE TYPE [ IF NOT EXISTS ] udt_name
    '('field_definition ( ',' field_definition)* ')'
            field_definition::= identifier cql_type
```

其中：
+ `IF NOT EXISTS` 如果類型已存在， 會`CREATE TYPE`防止 失敗。(選用)
+ `udt_name` 是類型格式 UDT 的完整名稱，例如 `my_keyspace.my_type`。如果您使用 `USE`陳述式定義目前的金鑰空間，則不需要指定金鑰空間名稱。
+ `field_definition` 包含名稱和類型。

下表顯示允許的 UDT 名稱範例。第一欄顯示如何在建立 類型時輸入名稱，第二欄顯示 Amazon Keyspaces 如何在內部格式化名稱。Amazon Keyspaces 預期 等操作的格式化名稱`GetType`。


| 輸入的名稱 | 格式化名稱 | 注意 | 
| --- | --- | --- | 
|  MY\$1UDT  | my\$1udt | 如果沒有雙引號，Amazon Keyspaces 會將所有大寫字元轉換為小寫。 | 
|  "MY\$1UDT"  | MY\$1UDT | 使用雙引號時，Amazon Keyspaces 會遵守大寫字元，並從格式化名稱中移除雙引號。 | 
|  "1234"  | 1234 | 使用雙引號時，名稱可以以數字開頭，Amazon Keyspaces 會從格式化的名稱中移除雙引號。 | 
|  "Special\$1Ch@r@cters<>\$1\$1"  | Special\$1Ch@r@cters<>\$1\$1 | 使用雙引號時，名稱可以包含特殊字元，Amazon Keyspaces 會從格式化的名稱中移除雙引號。 | 
|  "nested""""""quotes"  | nested"""quotes | Amazon Keyspaces 會從格式化名稱中移除外部雙引號和逸出雙引號。 | 

**範例**

```
CREATE TYPE my_keyspace.phone (
    country_code int,
    number text
);
```

如果巢狀 UDTs 凍結，您可以巢狀 UDT。如需 類型預設值和配額的詳細資訊，請參閱 [Amazon Keyspaces UDT 配額和預設值](quotas.md#udt-table)。

```
CREATE TYPE my_keyspace.user (
    first_name text,
    last_name text,
    phones FROZEN<phone>
);
```

如需示範如何建立 UDTs更多程式碼範例，請參閱 [Amazon Keyspaces 中使用者定義的類型 (UDT)](udts.md)。

## DROP TYPE
<a name="cql.ddl.type.drop"></a>

使用 `DROP TYPE`陳述式刪除 UDT。您只能刪除其他類型或資料表未使用的類型。

 **語法**

```
drop_type_statement ::=  DROP TYPE [ IF EXISTS ] udt_name
```

其中：
+ `IF EXISTS` 如果類型不存在， 會`DROP TYPE`防止 失敗。(選用)
+ `udt_name` 是類型格式 UDT 的完整名稱，例如 `my_keyspace.my_type`。如果您使用 `USE`陳述式定義目前的金鑰空間，則不需要指定金鑰空間名稱。

**範例**

```
DROP TYPE udt_name;
```