Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、ブログ記事
SQL コマンド
Amazon Redshift の Apache Iceberg テーブルは、データレイク内の大規模な分析データセットを管理する強力な方法を提供します。これらのテーブルは、分析ワークロードのハイパフォーマンスを維持しながら、ACID トランザクション、スキーマの進化、タイムトラベル機能をサポートします。Apache Iceberg テーブルを使用すると、データを効率的に整理してパーティション化し、ファイル形式と圧縮を制御し、他の AWS サービスとシームレスに統合できます。
CREATE TABLE
... USING ICEBERG および CREATE TABLE ... USING ICEBERG AS SELECT コマンドを使用して、パーティション分割された Iceberg テーブルとパーティション分割されていない Iceberg テーブルを作成できます。Iceberg テーブルは、外部スキーマ表記 (external_schema.table_name) または 3 つの部分からなる表記 ("catalog_name".database_name.table_name) を使用して参照できます。このセクションの例は、両方の方法を示しています。
テーブルを作成したら、標準 INSERT コマンドを使用してデータを追加できます。Amazon Redshift は多くの Iceberg データ型で動作しますが、情報を挿入するときに一部のデータ形式を変換する必要がある場合があります。
SHOW TABLES コマンドを使用して Iceberg テーブルを表示できます。AWS Glue Data Catalog からテーブルを削除する場合は、DROP TABLE コマンドを使用できます。これにより、テーブル登録のみが削除されます。実際のデータは、別個に削除するまでストレージに保持されます。
DELETE、UPDATE、MERGE、ALTER TABLE などの他のすべての SQL ステートメントは、Iceberg テーブルではまだサポートされていません。
以下のセクションでは、Amazon Redshift で Iceberg テーブルを作成、挿入、管理するための SQL 構文を示します。
CREATE TABLE
CREATE TABLE [IF NOT EXISTS]<external_schema>.<table_name>( column_name data_type [, ...] ) USING ICEBERG [LOCATION 's3://your-bucket-name/prefix/'] [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression_value>')]
S3 テーブルバケットには 3 つの部分からなる表記を使用することもできます。
CREATE TABLE "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>( column_name data_type [, ...] ) USING ICEBERG [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression_value>')]
は、外部テーブルを作成する既存の外部スキーマ名である必要があります。外部スキーマを作成および管理する方法の詳細については、Amazon Redshift ドキュメントの「CREATE EXTERNAL SCHEMA」を参照してください。<external_schema>
LOCATION 句は、新しく作成された Iceberg テーブルのテーブルの場所を定義します。Amazon S3 Tables の場合、テーブルの場所は Amazon S3 Tables カタログ (s3tablescatalog) によって決定されるため、LOCATION を指定することはできません。
それ以外の場合、LOCATION は必須であり、空の場所である必要があります。つまり、この同じバケットとプレフィックスを共有する既存の Amazon S3 オブジェクトはありません。Amazon S3 バケットは、Amazon Redshift クラスターと同じリージョンに存在する必要があります。
ただし、AWS には、AWS Glue Data Catalog に保存されている Iceberg テーブルからデータをある AWS リージョンから別の AWS リージョンにレプリケートする方法が用意されているため、書き込みを別のリージョンにレプリケートできます。詳細については、「AWS リージョン間でデータをレプリケートする」を参照してください。
PARTITIONED BY は Iceberg テーブルパーティションを定義します。Amazon Redshift は、void を除くすべての Iceberg v2 パーティション変換をサポートしています。サポートされている変換のリストを次に示します。
-
identity
-
bucket[N]
-
truncate[W]
-
year
-
month
-
day
-
hour
これらの変換の詳しい定義および互換性のあるデータ型については、Apache Iceberg ドキュメントの「パーティション変換
PARTITIONED BY は、マルチレベルパーティショニングをサポートしています。例えば、次のコマンドを実行できます。
CREATE TABLE ... USING ICEBERG LOCATION ... PARTITIONED BY (bucket(16, id), year(ship_date));
ただし、Amazon Redshift は複数の変換で 1 つの列を使用することをサポートしていません。例えば、次の構文はサポートされていません。
CREATE TABLE ... USING ICEBERG LOCATION ... PARTITIONED BY (bucket(16, ship_date), year(ship_date));
TABLE PROPERTIES 句は、この Iceberg テーブルの追加のテーブルプロパティを定義します。サポートされる唯一のテーブルプロパティは、デフォルトの Parquet データファイル圧縮を定義する compression_type です。これを指定しない場合、snappy は圧縮コーデックとして使用されます。compression_type の想定される値は、zstd、brotli、gzip、snappy、uncompressed です。
注記
CREATE TABLE ... LIKE ... は Iceberg テーブルではサポートされていません。Iceberg テーブルは、RMS テーブルにあるような列の制約や列属性もサポートしていません。
または、CREATE TABLE AS SELECT を使用して 1 回の操作で Iceberg テーブルを作成して入力することもできます。
CREATE TABLE AS SELECT
CREATE TABLE<external_schema>.<table_name>[( column_name[, ...] )] USING ICEBERG [LOCATION 's3://your-bucket-name/prefix/'] [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression-value>')] AS SELECT query
3 つの部分からなる表記を使用して、自動マウントカタログにテーブルを作成することもできます。
CREATE TABLE "<catalog_name>".<database_name>.<table_name>[( column_name[, ...] )] USING ICEBERG [LOCATION 's3://your-bucket-name/prefix/'] [PARTITIONED BY [[column_name | transform_function]], ...] [TABLE PROPERTIES ('compression_type'='<compression-value>')] AS SELECT query
これは、CREATE の後に SELECT ステートメントが SELECT クエリ結果をテーブルに入力することを除いて、CREATE TABLE ステートメントに似ています。
ここでの CREATE TABLE 句では、列のデータ型が SELECT クエリによって決定されるため、データ型を指定できなくなりました。
何らかの理由で SELECT クエリが失敗した場合、このクエリは失敗し、Iceberg テーブルは作成されません。
SHOW
TABLE を使用して Iceberg テーブルの構造を表示できます。
テーブルを表示する
SHOW TABLE<external_schema>.<table_name>
自動マウントカタログでは、3 つの部分からなる表記を使用することもできます。
SHOW TABLE "<catalog_name>".<database_name>.<table_name>
SHOW TABLE は Iceberg テーブルの CREATE TABLE ステートメントを表示します。コマンドは、テーブルのタイプに基づいて適切な結果を表示します。以下は、Iceberg テーブルの SHOW TABLE 出力の例です。
CREATE TABLE my_schema.items (id int, price decimal(5, 2)) USING ICEBERG LOCATION 's3://my_s3_bucket/items/' PARTITIONED BY (bucket(16, id)) TABLE PROPERTIES ('compression_type'='snappy')
注記
Amazon S3 テーブルの場合、テーブルの場所は Amazon S3 テーブルカタログによって管理されるため、LOCATION 句は SHOW TABLE の結果では省略されます。
テーブルを作成したら、INSERT INTO を使用してデータを追加できます。
INSERT INTO
INSERT INTO<external_schema>.<table_name>[(column_name [, ...])] VALUES (...) INSERT INTO<external_schema>.<table_name>[(column_name [, ...])] (SELECT query) -- Using three-part notation for S3 table buckets: INSERT INTO "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>[(column_name [, ...])] VALUES (...) INSERT INTO "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>[(column_name [, ...])] (SELECT query)
上記の構文を使用して、既存の Iceberg テーブルに挿入 (INSERT INTO) できます。VALUES 句を使用する場合で、column_name 部が省略されている場合、column_name またはすべての列でリストされている列の値を指定します。
データがパーティション分割されたテーブルに挿入されると、事前定義されたパーティション仕様に従って新しい行が分散されます。何らかの理由で SELECT クエリが失敗した場合、クエリは失敗し、データは Iceberg テーブルに挿入されません。
Amazon Redshift によって作成されていない Iceberg テーブルに INSERT INTO を使用することは可能です。ただし、いくつかの制限があります。
-
テーブルは Iceberg v2 テーブルである必要があります。
-
テーブルは、デフォルトのデータ形式として Parquet を使用している必要があります。
-
テーブルでメタデータ圧縮が True に設定されていないことが必要です。
-
テーブルで Write-Audit-Publish (WAP) が有効にされていないことが必要です。
カタログから Iceberg テーブルを削除するには、DROP TABLE コマンドを使用します。
DROP TABLE
DROP TABLE<external_schema>.<table_name>
自動マウントカタログでは、3 つの部分からなる表記を使用することもできます。
DROP TABLE "<catalog_name>.<database_name>.<table_name>
Iceberg テーブルの削除はメタデータのみの操作です。Amazon S3 テーブルの場合、AWS Glue Data Catalog と Amazon S3 テーブルカタログからテーブルエントリを削除します。Amazon Redshift は、テーブルの場所にある既存のデータファイルやメタデータファイルをクリーンアップまたは削除しません。AWS Glue および Amazon S3 テーブルの機能を使用して、孤立したファイルを削除できます。AWS Glue については、「孤立ファイルの削除」を参照してください。Amazon S3 テーブルについては、「テーブルのメンテナンス」を参照してください。