

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 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 테이블에 대해 외부 스키마 참조 또는 3부분 표기법 참조를 사용하는 것을 지원합니다. 아래 구문 예에서 `{{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)
+ [ALTER TABLE ALTER COLUMN](#iceberg-alter-table-alter-column)
+ [ALTER TABLE SET TABLE PROPERTIES](#iceberg-alter-table-set-properties)
+ [ALTER TABLE ADD, DROP 및 REPLACE PARTITION FIELD](#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 FIELD](#iceberg-alter-table-partition-field) 섹션을 참조하세요.

## ALTER TABLE ALTER COLUMN
<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바이트 int에 매핑되는 한, 유형을 8바이트 정수로 확장할 수 있습니다.

예를 들어 Iceberg 테이블은 4바이트 정수 유형을 사용하여 생성됩니다.

```
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) 섹션을 참조하세요.

기존 파티션 사양에 속하는 열의 유형을 확장하는 것은 지원되지 않습니다.

## ALTER TABLE SET TABLE PROPERTIES
<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`, `snappy`, `uncompressed`, `zstd`입니다.

## ALTER TABLE ADD, DROP 및 REPLACE PARTITION FIELD
<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))`이 됩니다.
+ `void` 변환은 파티션 `ALTER` 문에서 지원되지 않습니다.