CREATE TABLE AS - Amazon Athena

CREATE TABLE AS

SELECT クエリの結果が入力された新しいテーブルを作成します。空のテーブルを作成するには、CREATE TABLE を使用します。CREATE TABLE AS は CREATE TABLE DDL ステートメントと SELECT DML ステートメントを組み合わせているため、技術的には DDL と DML の両方を含んでいます。ここでは CREATE TABLE AS が他の DDL ステートメントとまとめられているが、Athena の CTAS クエリは、Service Quotas の目的で DML として扱われることに注意してください。Athena の Service Quotasの詳細については、「Service Quotas」を参照してください。

注記

CTAS ステートメントの場合、予想されるバケット所有者の設定は、Amazon S3 内の送信先テーブルの場所には適用されません。予期されるバケット所有者の設定は、Athena クエリの結果の出力先として指定した Amazon S3 内の場所にのみ適用されます。詳細については、「Athena コンソールを使用してクエリ結果の場所を指定する」を参照してください。

このリファレンストピックの対象外である CREATE TABLE AS に関する追加情報については、「クエリ結果からテーブルを作成する (CTAS)」を参照してください。

概要

CREATE TABLE table_name [ WITH ( property_name = expression [, ...] ) ] AS query [ WITH [ NO ] DATA ]

コードの説明は以下のとおりです。

WITH ( property_name = expression [, ...] )

オプションの CTAS テーブルのプロパティのリスト。一部のプロパティはデータストレージ形式に固有です。「CTAS テーブルのプロパティ」を参照してください。

query

新しいテーブルの作成に使用される SELECT クエリです。

重要

パーティションがあるクエリを作成する予定がある場合は、SELECT ステートメントで列のリストの最後に、パーティションされた列の名前を指定します。

[ WITH [ NO ] DATA ]

WITH NO DATA が指定されている場合、元のテーブルと同じスキーマを持つ新しい空のテーブルが作成されます。

注記

クエリの結果出力に列ヘッダーを含めるには、CTAS クエリの代わりに単純な SELECT クエリを実行します。クエリ結果の場所から結果を取得するか、Athena コンソールを使用して結果を直接ダウンロードすることができます。詳細については、「クエリ結果と最近のクエリを操作する」を参照してください。

CTAS テーブルのプロパティ

Athena の各 CTAS テーブルには、WITH (property_name = expression [, ...] ) を使用して指定するオプションの CTAS テーブルプロパティのリストがあります。これらのパラメータの使用方法については、「CTAS クエリの例」を参照してください。

WITH (property_name = expression [, ...], )
table_type = ['HIVE', 'ICEBERG']

オプション。デフォルト: HIVE。生成されるテーブルのテーブルタイプを指定します

例:

WITH (table_type ='ICEBERG')
external_location = [location]
注記

Iceberg テーブルは外部ではないため、このプロパティは Iceberg テーブルには適用されません。CTAS ステートメントで Iceberg テーブルのルートロケーションを定義するには、このセクションで後述する location プロパティを使用します。

オプション。Athena が CTAS クエリを Amazon S3 に保存する場所です。

例:

WITH (external_location ='s3://amzn-s3-demo-bucket/tables/parquet_table/')

Athena は、クエリ結果に同じパスを 2 回使用しません。場所を手動で指定する場合は、指定する Amazon S3 の場所にデータがないことを確認してください。Athena がデータの削除を試みることはありません。再度同じ場所を使用する場合は、手動でデータを削除します。そうしないと、CTAS クエリは失敗します。

クエリ結果の場所を強制するワークグループで external_location を指定する CTAS クエリを実行すると、クエリはエラーメッセージを伴って敗します。ワークグループに対して指定されたクエリ結果の場所を確認するには、ワークグループの詳細を参照してください

ワークグループがクエリ結果の場所に関するクライアント側の設定を上書きする場合、Athena は以下の場所にテーブルを作成します。

s3://amzn-s3-demo-bucket/tables/query-id/

external_location プロパティを使用して場所を指定せず、ワークグループがクライアント側の設定を上書きしない場合、Athena はクエリ結果の場所にクライアント側の設定を使用して、以下の場所にテーブルを作成します。

s3://amzn-s3-demo-bucket/Unsaved-or-query-name/year/month/date/tables/query-id/
is_external = [boolean]

オプション。テーブルが外部テーブルかどうかを示します。デフォルトは true です。Iceberg テーブルの場合、これを false に設定する必要があります。

例:

WITH (is_external = false)
location = [location]

Iceberg テーブルには必須です。クエリ結果から作成される Iceberg テーブルのルート位置を指定します。

例:

WITH (location ='s3://amzn-s3-demo-bucket/tables/iceberg_table/')
field_delimiter = [delimiter]

オプションであり、テキストベースのデータストレージ形式に固有のパラメータ。CSV と TSV のファイル、およびテキストファイルのための単一文字のフィールド区切り文字で、例えば、 。WITH (field_delimiter = ',')現在、CTAS クエリは複数文字のフィールド区切り文字をサポートしてません。フィールド区切り文字を指定しなかった場合、デフォルトで \001 が使用されます。

format = [storage_format]

CTAS クエリ結果のストレージ形式 (例: ORCPARQUETAVROJSONION、または TEXTFILE)。Iceberg テーブルで使用できる形式は ORCPARQUET、および AVRO です。省略した場合は、デフォルトで PARQUET が使用されます。このパラメータの名前である format は小文字で記述する必要があります。そうしないと、CTAS クエリは失敗します。

例:

WITH (format = 'PARQUET')
bucketed_by = ARRAY[ column_name[,…], bucket_count = [int] ]
注記

このプロパティは Iceberg テーブルには適用されません。Iceberg テーブルの場合は、バケット変換によるパーティショニングを使用してください。

データの配置先となるバケットの配列リスト。省略された場合、Athena はこのクエリでデータをバケット化しません。

bucket_count = [int]
注記

このプロパティは Iceberg テーブルには適用されません。Iceberg テーブルの場合は、バケット変換によるパーティショニングを使用してください。

データの配置先となるバケットの数。省略された場合、Athena はデータをバケット化しません。例:

CREATE TABLE bucketed_table WITH ( bucketed_by = ARRAY[column_name], bucket_count = 30, format = 'PARQUET', external_location ='s3://amzn-s3-demo-bucket/tables/parquet_table/' ) AS SELECT * FROM table_name
partitioned_by = ARRAY[ col_name[,…] ]
注記

このプロパティは Iceberg テーブルには適用されません。Iceberg テーブルにパーティション変換を使用するには、このセクションで後述する partitioning プロパティを使用してください。

オプション。CTAS テーブルをパーティションする列の配列リスト。パーティションされた列の名前は、SELECT ステートメントで列のリストの最後に記述します。

partitioning = ARRAY[partition_transform, ...]

オプション。作成する Iceberg テーブルのパーティショニングを指定します。Iceberg は、さまざまなパーティション変換およびパーティションの進化に対応しています。パーティション変換を次の表に要約します。

変換 説明
year(ts) 各年度のパーティションを作成します。パーティション値は、ts から 1970 年 1 月 1 日までの年数の差を整数で表したものです。
month(ts) 各年度の各月にパーティションを作成します。パーティション値は、ts から 1970 年 1 月 1 日までの月数の差を整数で表したものです。
day(ts) 各年度の各日にパーティションを作成します。パーティション値は、ts から 1970 年 1 月 1 日までの日数の差を整数で表したものです。
hour(ts) 各日の各時間帯にパーティションを作成します。パーティション値は、分と秒をゼロに設定したタイムスタンプです。
bucket(x, nbuckets) データを指定された数のバケットにハッシュします。パーティション値は、0 から nbuckets - 1 までの値を持つ、x の整数ハッシュです。
truncate(s, nchars) パーティション値を s の最初の nchars 文字にします。

例:

WITH (partitioning = ARRAY['month(order_date)', 'bucket(account_number, 10)', 'country']))
optimize_rewrite_min_data_file_size_bytes = [long]

オプション。データ最適化固有の設定。指定した値より小さいファイルは、最適化のために含まれます。デフォルトは write_target_data_file_size_bytes の 0.75 倍の値です。このプロパティは Iceberg テーブルにのみ適用されます。詳細については、「Iceberg テーブルを最適化する」を参照してください。

例:

WITH (optimize_rewrite_min_data_file_size_bytes = 402653184)
optimize_rewrite_max_data_file_size_bytes = [long]

オプション。データ最適化固有の設定。指定した値より大きいファイルは、最適化のために含まれます。デフォルトは write_target_data_file_size_bytes の 1.8 倍の値です。このプロパティは Iceberg テーブルにのみ適用されます。詳細については、「Iceberg テーブルを最適化する」を参照してください。

例:

WITH (optimize_rewrite_max_data_file_size_bytes = 966367641)
optimize_rewrite_data_file_threshold = [int]

オプション。データ最適化固有の設定。最適化が必要なデータファイルの数が指定されたしきい値より少ない場合、データファイルは書き換えられません。これにより、蓄積するデータファイルの数を増やしてターゲットサイズに近いファイルを生成し、不要な計算をスキップしてコストを削減できます。デフォルトは 5 です。このプロパティは Iceberg テーブルにのみ適用されます。詳細については、「Iceberg テーブルを最適化する」を参照してください。

例:

WITH (optimize_rewrite_data_file_threshold = 5)
optimize_rewrite_delete_file_threshold = [int]

オプション。データ最適化固有の設定。データファイルに関連付けられた削除ファイルの数がしきい値より少ない場合、データファイルは書き換えられません。これにより、データファイルごとに蓄積する削除ファイルの数を増やしてコストを削減できます。デフォルトは 2 です。このプロパティは Iceberg テーブルにのみ適用されます。詳細については、「Iceberg テーブルを最適化する」を参照してください。

例:

WITH (optimize_rewrite_delete_file_threshold = 2)
vacuum_min_snapshots_to_keep = [int]

オプション。バキューム固有の設定。保持する最新のスナップショットの最小数。デフォルト は 1 です。このプロパティは Iceberg テーブルにのみ適用されます。詳細については、「VACUUM」を参照してください。

注記

vacuum_min_snapshots_to_keep プロパティには、Athena エンジンバージョン 3 が必要です。

例:

WITH (vacuum_min_snapshots_to_keep = 1)
vacuum_max_snapshot_age_seconds = [long]

オプション。バキューム固有の設定。保持するスナップショットの経過時間を表す秒単位の期間。デフォルトは 432,000 (5 日) です。このプロパティは Iceberg テーブルにのみ適用されます。詳細については、「VACUUM」を参照してください。

注記

vacuum_max_snapshot_age_seconds プロパティには、Athena エンジンバージョン 3 が必要です。

例:

WITH (vacuum_max_snapshot_age_seconds = 432000)
write_compression = [compression_format]

圧縮を指定できるストレージ形式に使用するための圧縮タイプ。compression_format は、テーブルへのデータの書き込み時に使用される圧縮を指定します。TEXTFILEJSONPARQUET、および ORC のファイル形式に対して圧縮を指定できます。

例えば、format プロパティにおいてストレージ形式として PARQUET が指定されている場合、write_compression の値で Parquet での圧縮形式を指定します。この場合、write_compression の値を指定することは、parquet_compression の値を指定することと同等です。

同様に、format プロパティにおいてストレージ形式として ORC が指定されている場合には、write_compression の値で ORC の圧縮形式を指定します。この場合、write_compression の値を指定することは、orc_compression の値を指定することと同等です。

同じ CTAS クエリで、テーブルプロパティに複数の圧縮形式を指定することはできません。例えば、同一のクエリ内で、write_compressionparquet_compression の両方を指定することはできません。同様なことが write_compressionorc_compression にも当てはまります。各ファイル形式でサポートされている圧縮タイプの詳細については、「Athena で圧縮を使用する」を参照してください。

orc_compression = [compression_format]

テーブルへの ORC データ書き込み時に、ORC ファイル形式に対して使用される圧縮タイプ 例えば、WITH (orc_compression = 'ZLIB') と指定します。ORC ファイル (ORC Postscript を除く) 内のチャンクは、指定された圧縮を使用して圧縮されます。この指定を省略した場合、ORC に対してはデフォルトで ZLIB 圧縮が使用されます。

注記

整合性を保つために、orc_compression の代わりに write_compression プロパティを使用することをお勧めします。format プロパティを使用して、ストレージ形式を ORC に指定した上で、write_compression プロパティにより、圧縮形式を ORC が使用するものに指定します。

parquet_compression = [compression_format]

Parquet データのテーブルへの書き込み時に、Parquet ファイル形式に対して使用される圧縮タイプ。例えば、WITH (parquet_compression = 'SNAPPY') と指定します。この圧縮は Parquet ファイル内の列チャンクに適用されます。この指定を省略した場合、Parquet に対してはデフォルトで GZIP 圧縮が使用されます。

注記

整合性を保つために、parquet_compression の代わりに write_compression プロパティを使用することをお勧めします。format プロパティを使用して、ストレージ形式を PARQUET に指定した上で、write_compression プロパティにより、圧縮形式を PARQUET が使用するものに指定します。

compression_level = [compression_level]

使用する圧縮レベル。このプロパティは、ZSTD 圧縮にのみ適用されます。有効な値は 1 から 22 です。デフォルト値は 3 です。詳細については、「ZSTD 圧縮レベルを使用する」を参照してください。

CTAS クエリの例については、次のリソースを参照してください。