Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、ブログ記事
テーブル定義の変更
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 テーブルの参照」を参照してください。
ALTER TABLE ステートメントを使用するときは、次のことを検討してください。
-
ALTER TABLEステートメントは現在 Iceberg v2 テーブルのみをサポートしています。 -
すべての
ALTER TABLEステートメントはメタデータのみのオペレーションです。 -
ALTER TABLEステートメントは、複雑な型の列を持つテーブルをサポートしていません。
目次
ALTER TABLE RENAME COLUMN
ALTER TABLEiceberg_tableRENAME [COLUMN]col_nameTOnew_name;
ALTER TABLE RENAME COLUMN は既存の列の名前を変更します。 には、パーティション列またはパーティション化されていない列のいずれも指定できます。名前を変更した後、列のデータ型とパーティション仕様は変更されません。col_name
注記
ALTER TABLE RENAME COLUMN は、AWS Lake Formation に登録されたテーブルではサポートされていません。
ALTER TABLE ADD/DROP COLUMN
ALTER TABLEiceberg_tableADD [COLUMN]col_namecol_type;
ALTER TABLEiceberg_tableDROP [COLUMN]col_name;
ADD COLUMN は既存の Iceberg テーブルに 1 つの列を追加します。Amazon Redshift Iceberg の書き込みでサポートされている任意のデータ型を使用できます。詳細については、「Apache Iceberg テーブルでサポートされているデータ型」を参照してください。
ADD COLUMN はメタデータのみのオペレーションです。既存の行に新しく追加された列の値は NULL です。
DROP COLUMN は既存の Iceberg テーブルから列を削除します。パーティションテーブルの場合、現在のパーティション仕様に属する列を削除することはできません。列を削除する前に、最初に列を含むパーティションフィールドを削除する必要があります。詳細については、「ALTER TABLE ADD、DROP、および REPLACE PARTITION FIELD」を参照してください。
ALTER TABLE ALTER COLUMN
ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameTYPEupdated_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 TABLEiceberg_table(cint int) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/';
これは、次の ALTER ステートメントによって拡張できます。
ALTER TABLEiceberg_tableALTER COLUMN cint TYPE int8;
Amazon Redshift タイプと Iceberg タイプ間のデータ型マッピングの完全なリストについては、「Apache Iceberg テーブルでサポートされているデータ型」を参照してください。
既存のパーティション仕様に属する列の型の拡張はサポートされていません。
ALTER TABLE SET TABLE PROPERTIES
ALTER TABLEiceberg_tableSET 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
ALTER TABLEiceberg_tableADD PARTITION FIELDcolumn_name|transform_function;
ALTER TABLEiceberg_tableDROP PARTITION FIELDcolumn_name|transform_function;
ALTER TABLEiceberg_tableREPLACE PARTITION FIELDcolumn_name|transform_functionWITHcolumn_name|transform_function;
[ADD | DROP | REPLACE] PARTITION FIELD ステートメントを使用すると、既存のテーブルパーティション仕様を変更し、Amazon Redshift によるパーティションの進化をサポートできます。
パーティション仕様の ALTER ステートメントはテーブルメタデータのみを変更し、既存のテーブルデータを再パーティション化しません。ALTER の後、テーブルに挿入された新しいデータは、新しく定義されたパーティション仕様に従います。
これらのステートメントには、次の制限事項を考慮してください。
-
ADDまたはREPLACE ... WITH ...を使用して新しいパーティションフィールドを定義する場合、新しいフィールドには、既に他のパーティションフィールドの一部である列を含めることはできません。これは、CREATE TABLEで最初のパーティション仕様を定義する場合と同じ制限です。詳細については、「CREATE TABLE」を参照してください。例えば、以下のテーブルがある場合:
CREATE TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...;ship_dateが既存のパーティションフィールドの一部になっているため、以下は失敗します。ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(128, ship_date); -
新しいパーティションフィールドを追加する場合、新しく追加されたフィールドは常にテーブルのパーティションの最終レベルとして扱われます。例えば、次のようになります。
CREATE TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...; ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(256, item_id);テーブルパーティション仕様は以下と同じです。
CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; -
パーティションフィールドを削除する場合、パーティションの最後のレベルに制限されません。既存の任意のパーティションフィールドを削除できます。例えば、次のようになります。
CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableDROP PARTITION FIELD year(ship_date);この
ALTERの後、テーブルはbucket(256, item_id)によってのみパーティション化されます。 -
REPLACE PARTITION FIELD ... WITH ...を呼び出す場合、置き換えるパーティションフィールドは仕様内の任意のフィールドであり、最後のフィールドに限定されません。例えば、次のようになります。CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableREPLACE PARTITION FIELD year(ship_date) WITH month(ship_date);この
ALTERの後、テーブルパーティションは(month(ship_date), bucket(256, item_id))になります。 -
void変換はパーティションALTERステートメントではサポートされていません。