

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# 變更資料表定義
<a name="iceberg-alter-table"></a>

`ALTER TABLE` 陳述式用於變更資料表定義，包括結構描述、分割區規格和屬性。您可以使用這些 DDL 陳述式，直接透過 Amazon Redshift 管理您的 Iceberg 資料表。

所有`ALTER TABLE`陳述式都支援使用 Iceberg 資料表的外部結構描述參考或三部分表示法參考。在下面的語法範例中， `{{iceberg_table}}`可以是以下任何一個：

```
-- External schema notation:
{{<external_schema>}}.{{<table_name>}}

-- Three-part notation for S3 table buckets:
"{{<table_bucket_name>}}@s3tablescatalog".{{<database_name>}}.{{<table_name>}}

-- Three-part notation for the awsdatacatalog root catalog:
awsdatacatalog.{{<database_name>}}.{{<table_name>}}
```

如需詳細資訊，請參閱[在 Amazon Redshift 中參考 Iceberg 資料表](referencing-iceberg-tables.md)。

使用`ALTER TABLE`陳述式時，請考慮下列事項：
+ `ALTER TABLE` 陳述式目前僅支援 Iceberg v2 資料表。
+ 所有`ALTER TABLE`陳述式都是僅限中繼資料的操作。
+ `ALTER TABLE` 陳述式不支援具有複雜類型資料欄的資料表。

**Contents**
+ [ALTER TABLE RENAME COLUMN](#iceberg-alter-table-rename-column)
+ [ALTER TABLE ADD/DROP COLUMN](#iceberg-alter-table-add-drop-column)
+ [更改資料表更改資料欄](#iceberg-alter-table-alter-column)
+ [更改資料表集資料表屬性](#iceberg-alter-table-set-properties)
+ [ALTER TABLE ADD、DROP 和 REPLACE PARTITION 欄位](#iceberg-alter-table-partition-field)

## ALTER TABLE RENAME COLUMN
<a name="iceberg-alter-table-rename-column"></a>

```
ALTER TABLE {{iceberg_table}}
RENAME [COLUMN] {{col_name}} TO {{new_name}};
```

`ALTER TABLE RENAME COLUMN` 重新命名現有的資料欄。`{{col_name}}` 可以是分割區資料欄或非分割區資料欄。重新命名後，資料欄資料類型和分割區規格不會變更。

**注意**  
`ALTER TABLE RENAME COLUMN` 已 AWS Lake Formation 註冊的資料表不支援 。

## ALTER TABLE ADD/DROP COLUMN
<a name="iceberg-alter-table-add-drop-column"></a>

```
ALTER TABLE {{iceberg_table}}
ADD [COLUMN] {{col_name}} {{col_type}};
```

```
ALTER TABLE {{iceberg_table}}
DROP [COLUMN] {{col_name}};
```

`ADD COLUMN` 會將一欄新增至現有的 Iceberg 資料表。您可以使用 Amazon Redshift Iceberg 寫入支援的任何資料類型。如需詳細資訊，請參閱[Apache Iceberg 資料表支援的資料類型支援的資料類型](querying-iceberg-supported-data-types.md)。

`ADD COLUMN` 是僅限中繼資料的操作。在現有資料列上新增的資料欄值為 `NULL`。

`DROP COLUMN` 從現有的 Iceberg 資料表捨棄資料欄。對於分割資料表，您無法捨棄屬於目前分割區規格的資料欄。在捨棄資料欄之前，您必須先移除涉及資料欄的分割區欄位。如需詳細資訊，請參閱[ALTER TABLE ADD、DROP 和 REPLACE PARTITION 欄位](#iceberg-alter-table-partition-field)。

## 更改資料表更改資料欄
<a name="iceberg-alter-table-alter-column"></a>

```
ALTER TABLE {{iceberg_table}}
    ALTER COLUMN {{column_name}} TYPE {{updated_data_type}};
```

`ALTER TABLE ALTER COLUMN` 會變更現有資料欄的資料類型。僅允許類型變寬，不允許變窄。由於資料不會在 之後重寫`ALTER`，因此在耗用現有的資料表資料時，縮小資料類型可能會導致溢位。每個 Iceberg 規格允許以下類型加寬：

```
int → bigint
float → double
decimal(P, S) → decimal(P2, S) where P2 > P (scale cannot be changed)
```

在 Amazon Redshift 中，資料類型可以有別名。例如，4 位元組整數使用類型名稱 `int`或 `int4`。只要它們映射到 Iceberg 類型的 4 位元組整數，就可以將類型加寬到 8 位元組整數。

例如，使用 4 位元組整數類型建立 Iceberg 資料表：

```
CREATE TABLE {{iceberg_table}} (cint int) USING ICEBERG LOCATION 's3://{{your-bucket-name}}/prefix/';
```

它可以被此`ALTER`陳述式加寬：

```
ALTER TABLE {{iceberg_table}} ALTER COLUMN cint TYPE int8;
```

如需 Amazon Redshift 類型和 Iceberg 類型之間資料類型映射的完整清單，請參閱 [Apache Iceberg 資料表支援的資料類型支援的資料類型](querying-iceberg-supported-data-types.md)。

不支援擴展屬於現有分割區規格的資料欄類型。

## 更改資料表集資料表屬性
<a name="iceberg-alter-table-set-properties"></a>

```
ALTER TABLE {{iceberg_table}}
SET TABLE PROPERTIES (
 'compression_type' = '{{compression_value}}');
```

此陳述式可讓您覆寫預設資料表屬性。此陳述式目前唯一允許的資料表屬性為 `compression_type`。您可以覆寫它，以針對 Iceberg 資料表 Parquet 檔案使用不同的壓縮類型。在 之後插入的資料`ALTER`會使用新的壓縮類型。

的可能值`compression_type`為：`brotli`、`gzip`、`uncompressed`、 `snappy`和 `zstd`。

## ALTER TABLE ADD、DROP 和 REPLACE PARTITION 欄位
<a name="iceberg-alter-table-partition-field"></a>

```
ALTER TABLE {{iceberg_table}}
    ADD PARTITION FIELD {{column_name}} | {{transform_function}};
```

```
ALTER TABLE {{iceberg_table}}
    DROP PARTITION FIELD {{column_name}} | {{transform_function}};
```

```
ALTER TABLE {{iceberg_table}}
    REPLACE PARTITION FIELD {{column_name}} | {{transform_function}}
        WITH {{column_name}} | {{transform_function}};
```

`[ADD | DROP | REPLACE] PARTITION FIELD` 陳述式可讓您變更現有的資料表分割區規格，支援透過 Amazon Redshift 進行分割區演變。

分割區規格的`ALTER`陳述式只會變更資料表中繼資料，而且不會重新分割現有的資料表資料。在 之後`ALTER`，插入資料表的新資料會遵循新定義的分割區規格。

請考慮這些陳述式的下列限制：
+ 透過 `ADD`或 定義新的分割區欄位時`REPLACE ... WITH ...`，新欄位不能包含已屬於其他分割區欄位的資料欄。這與您在 定義初始分割區規格時的限制相同`CREATE TABLE`。如需詳細資訊，請參閱[CREATE TABLE](iceberg-writes-sql-syntax.md#iceberg-writes-create-table)。

  例如，當您有資料表時：

  ```
  CREATE TABLE {{iceberg_table}} ... PARTITIONED BY year(ship_date) USING ICEBERG ...;
  ```

  下列 已`ship_date`是現有分割區欄位的一部分，因此失敗：

  ```
  ALTER TABLE {{iceberg_table}} ADD PARTITION FIELD bucket(128, ship_date);
  ```
+ 新增分割區欄位時，新增的欄位一律會被視為資料表的最後一個分割區層級。例如：

  ```
  CREATE TABLE {{iceberg_table}} ... PARTITIONED BY year(ship_date) USING ICEBERG ...;
  ALTER TABLE {{iceberg_table}} ADD PARTITION FIELD bucket(256, item_id);
  ```

  資料表分割區規格與下列項目相同：

  ```
  CREATE TABLE {{iceberg_table}} ... PARTITIONED BY (year(ship_date), bucket(256, item_id))
      USING ICEBERG ...;
  ```
+ 捨棄分割區欄位時，不限於最後一個分割區層級。您可以捨棄任何現有的分割區欄位。例如：

  ```
  CREATE TABLE {{iceberg_table}} ... PARTITIONED BY (year(ship_date), bucket(256, item_id))
      USING ICEBERG ...;
  ALTER TABLE {{iceberg_table}} DROP PARTITION FIELD year(ship_date);
  ```

  在此 之後`ALTER`，資料表只會依 分割`bucket(256, item_id)`。
+ 呼叫 時`REPLACE PARTITION FIELD ... WITH ...`，要取代的分割區欄位可以是規格中的任何欄位，且不限於最後一個欄位。例如：

  ```
  CREATE TABLE {{iceberg_table}} ... PARTITIONED BY (year(ship_date), bucket(256, item_id))
      USING ICEBERG ...;
  ALTER TABLE {{iceberg_table}} REPLACE PARTITION FIELD year(ship_date) WITH month(ship_date);
  ```

  在此之後`ALTER`，資料表分割區會變成 `(month(ship_date), bucket(256, item_id))`。
+ 分割區`ALTER`陳述式不支援`void`轉換。