Iceberg テーブルを作成する
Athena で使用する Iceberg テーブルを作成するには、このページに記載されている CREATE TABLE
ステートメントまたは AWS Glue クローラーを使用できます。
CREATE TABLE ステートメントを使用する
Athena は Iceberg v2 テーブルを作成します。v1 テーブルと v2 テーブルの違いについては、Apache Iceberg ドキュメントの形式バージョンの変更
Athena CREATE TABLE
は、データを含めずに Iceberg テーブルを作成します。テーブルで Iceberg オープンソース Glue カタログ
警告
CREATE EXTERNAL TABLE
を実行すると、「External keyword not supported for table type ICEBERG
」(テーブルタイプ ICEBERG では外部キーワードはサポートされていません) というエラーメッセージが表示されます。
Athena から Iceberg テーブルを作成するには、次に示す構文の概要のように、テーブルプロパティの 'table_type'
を TBLPROPERTIES
句の 'ICEBERG'
に設定します。
CREATE TABLE [db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] ) [PARTITIONED BY (col_name | transform, ... )] LOCATION 's3://amzn-s3-demo-bucket/
your-folder
/' TBLPROPERTIES ( 'table_type' ='ICEBERG' [,property_name
=property_value
] )
Iceberg テーブルでクエリできるデータ型の詳細については、「Athena の Iceberg テーブルでサポートされているデータ型」を参照してください。
パーティションを使用する
パーティションを持つ Iceberg テーブルを作成するには、PARTITIONED BY
構文を使用します。パーティション化に使用される列は、最初に列宣言で指定する必要があります。PARTITIONED BY
句には、列の型を含めることはできません。CREATE TABLE
構文にパーティション変換,
) 文字で区切ります。
CREATE TABLE iceberg_table (id bigint, data string, category string) PARTITIONED BY (category, bucket(16, id)) LOCATION 's3://amzn-s3-demo-bucket/
your-folder
/' TBLPROPERTIES ( 'table_type' = 'ICEBERG' )
次の表に、使用できるパーティション変換関数を示します。
機能 | 説明 | サポートされている型 |
---|---|---|
year(ts) |
年によるパーティション | date , timestamp |
month(ts) |
月によるパーティション | date , timestamp |
day(ts) |
日によるパーティション | date , timestamp |
hour(ts) |
時間によるパーティション | timestamp |
bucket( |
ハッシュ値 mod N のバケットによるパーティション これは、Hive テーブルのハッシュバケット作成と同じ概念です。 |
int , long , decimal ,
date , timestamp ,
string , binary
|
truncate( |
L に切り捨てられた値によるパーティション |
int , long , decimal ,
string |
Athena は Iceberg の隠しパーティション化をサポートしています。詳細については、「Apache Iceberg ドキュメント」の「Iceberg's hidden partitioning
このセクションでは、CREATE
TABLE
ステートメントの TBLPROPERTIES
句でキーと値のペアとして指定できるテーブルプロパティについて説明します。Athena では、Iceberg テーブルを作成または変更するために、テーブルプロパティで事前定義されたキーと値のペアのリストのみが使用できます。次の表に、指定可能なテーブルプロパティを示します。圧縮オプションの詳細については、このドキュメントの「Iceberg テーブルを最適化する」を参照してください。Athena による、特定のオープンソーステーブル設定プロパティのサポートをご希望の場合は、athena-feedback@amazon.com
format
説明 | ファイルデータ形式 |
使用できるプロパティ値 | サポートされるファイル形式と圧縮の組み合わせは、Athena エンジンのバージョンによって異なります。詳細については、「Iceberg テーブル圧縮を使用する」を参照してください。 |
デフォルト値 | parquet |
write_compression
説明 | ファイル圧縮コーデック |
使用できるプロパティ値 | サポートされるファイル形式と圧縮の組み合わせは、Athena エンジンのバージョンによって異なります。詳細については、「Iceberg テーブル圧縮を使用する」を参照してください。 |
デフォルト値 |
デフォルトの書き込み圧縮は Athena エンジンのバージョンによって異なります。詳細については、「Iceberg テーブル圧縮を使用する」を参照してください。 |
optimize_rewrite_data_file_threshold
説明 | データ最適化固有の設定。最適化が必要なデータファイルの数が指定されたしきい値より少ない場合、データファイルは書き換えられません。これにより、蓄積するデータファイルの数を増やしてターゲットサイズに近いファイルを生成し、不要な計算をスキップしてコストを削減できます。 |
使用できるプロパティ値 | 正数。50 未満にする必要があります。 |
デフォルト値 | 5 |
optimize_rewrite_delete_file_threshold
説明 | データ最適化固有の設定。データファイルに関連付けられた削除ファイルの数がしきい値より少ない場合、データファイルは書き換えられません。これにより、データファイルごとに蓄積する削除ファイルの数を増やしてコストを削減できます。 |
使用できるプロパティ値 | 正数。50 未満にする必要があります。 |
デフォルト値 | 2 |
vacuum_min_snapshots_to_keep
説明 |
テーブルのメインブランチに保持するスナップショットの最小数。 この値は |
使用できるプロパティ値 | 正数。 |
デフォルト値 | 1 |
vacuum_max_snapshot_age_seconds
説明 | メインブランチに保持するスナップショットの最大保存期間。vacuum_min_snapshots_to_keep で指定された残りの最小スナップショットが指定された経過日数よりも古い場合、この値は無視されます。このテーブル動作プロパティは、Apache Iceberg 設定の history.expire.max-snapshot-age-ms プロパティに対応しています。 |
使用できるプロパティ値 | 正数。 |
デフォルト値 | 432,000 秒 (5 日間) |
vacuum_max_metadata_files_to_keep
説明 | 以前のメタデータファイルで、テーブルのメインブランチに保持するものの最大数。 |
使用できるプロパティ値 | 正数。 |
デフォルト値 | 100 |
CREATE TABLE ステートメントの例
次の例では、3 つの列を持つ Iceberg テーブルを作成します。
CREATE TABLE iceberg_table ( id int, data string, category string) PARTITIONED BY (category, bucket(16,id)) LOCATION 's3://amzn-s3-demo-bucket/
iceberg-folder
' TBLPROPERTIES ( 'table_type'='ICEBERG', 'format'='parquet', 'write_compression'='snappy', 'optimize_rewrite_delete_file_threshold'='10' )
CREATE TABLE AS SELECT (CTAS) を使用する
この CREATE TABLE
AS
ステートメントを使用して Iceberg テーブルを作成する詳細については、CTAS テーブルのプロパティ セクションに特に注目して「CREATE TABLE AS」を参照してください。
AWS Glue クローラーを使用する
AWS Glue クローラーを使用すると、Iceberg テーブルを AWS Glue Data Catalog に自動的に登録できます。別の Iceberg カタログから移行する場合は、AWS Glue クローラーを作成してスケジュールし、Iceberg テーブルが配置されている Amazon S3 パスを指定できます。AWS Glue クローラーがトラバースできる Amazon S3 パスの最大の階層の深さを指定できます。クローラーをスケジュールすると、AWS Glue クローラーは実行するたびにスキーマ情報を抽出し、スキーマの変更で AWS Glue Data Catalog を更新します。AWS Glue クローラーは、複数のスナップショット間でスキーマのマージをサポートし、AWS Glue Data Catalog 内の最新のメタデータファイルの場所を更新します。詳細については、「AWS Glue のデータカタログとクローラー」を参照してください。