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 クエリ結果のストレージ形式 (例:
ORC、PARQUET、AVRO、JSON、ION、またはTEXTFILE)。Iceberg テーブルで使用できる形式はORC、PARQUET、および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 * FROMtable_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は、テーブルへのデータの書き込み時に使用される圧縮を指定します。TEXTFILE、JSON、PARQUET、およびORCのファイル形式に対して圧縮を指定できます。例えば、
formatプロパティにおいてストレージ形式としてPARQUETが指定されている場合、write_compressionの値で Parquet での圧縮形式を指定します。この場合、write_compressionの値を指定することは、parquet_compressionの値を指定することと同等です。同様に、
formatプロパティにおいてストレージ形式としてORCが指定されている場合には、write_compressionの値で ORC の圧縮形式を指定します。この場合、write_compressionの値を指定することは、orc_compressionの値を指定することと同等です。同じ CTAS クエリで、テーブルプロパティに複数の圧縮形式を指定することはできません。例えば、同一のクエリ内で、
write_compressionとparquet_compressionの両方を指定することはできません。同様なことがwrite_compressionとorc_compressionにも当てはまります。各ファイル形式でサポートされている圧縮タイプの詳細については、「Athena で圧縮を使用する」を参照してください。 -
orc_compression = [compression_format] -
テーブルへの
ORCデータ書き込み時に、ORCファイル形式に対して使用される圧縮タイプ 例えば、WITH (orc_compression = 'ZLIB')と指定します。ORCファイル (ORCPostscript を除く) 内のチャンクは、指定された圧縮を使用して圧縮されます。この指定を省略した場合、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 クエリの例については、次のリソースを参照してください。