Amazon Athena
ユーザーガイド

CTAS クエリに関する考慮事項と制約事項

次の表に、Athena での CTAS クエリに関して理解する必要がある事項について説明します。

項目 把握しておくべきこと
CTAS クエリ構文

CTAS クエリ構文は、テーブルを作成するために使用される CREATE [EXTERNAL] TABLE 構文と異なります。「CREATE TABLE AS」を参照してください。

注記

CTAS クエリのテーブル、データベース、または列名には、引用符やバックティックを含めることはできません。そのために、テーブル、データベース、または列名が予約語を表していないこと、および特殊文字が含まれていないことを確認します (引用符またはバックティックで囲む必要があります)。詳細については、「テーブル、データベース、および列の名前」を参照してください。

CTAS クエリとビューの違い

CTAS クエリでは Amazon S3 の指定した場所に新しいデータ書き込みますが、ビューではデータを書き込みません。

CTAS クエリ結果の場所

CTAS クエリの結果を Amazon S3 に保存する場所は空であることが必要です。CTAS クエリはバケットのパス位置 (プレフィックス) が空であるかどうかをチェックして、その場所に既にデータが含まれる場合は、データを上書きしません。再度同じ場所を使用するには、バケットのキープレフィックス位置にあるデータを削除します。削除しない場合は、CTAS クエリは失敗します。

CTAS クエリの結果を保存する場所を指定できます。これを省略し、ワークグループがクライアント側の設定を上書きしない場合、Athena はデフォルトで次の場所を使用します。s3://aws-athena-query-results-<account>-<region>/<query-name-or-unsaved>/<year>/<month/<date>/<query-id>/

ワークグループがクライアント側の設定を上書きする場合は、ワークグループのクエリ結果の場所が CTAS クエリに使用されます。別の結果の場所を指定した場合、クエリは失敗します。ワークグループの指定された結果の場所を取得するには、ワークグループの詳細を表示します。

クエリが実行されるワークグループが強制されたクエリ結果の場所で設定されている場合、CTAS クエリの external_location を指定しないでください。Athena でエラーが発生し、この場合 external_location を指定したクエリは失敗します。たとえば、クエリ結果の場所に対するクライアント側の設定を上書きし、ワークグループに独自の場所を使用するように強制すると、このクエリは失敗します。CREATE TABLE <DB>.<TABLE1> WITH (format='Parquet', external_location='s3://my_test/test/') AS SELECT * FROM <DB>.<TABLE2> LIMIT 10;

クエリの結果を保管する形式

CTAS クエリの結果は、デフォルトで Parquet 形式で保存されます (データストレージ形式を指定しない場合)。CTAS の結果を PARQUETORCAVROJSON、および TEXTFILE で保存できます。CTAS クエリでは形式の変換を解釈するために SerDe を指定する必要はありません。「例 5: 別の形式で CTAS クエリの結果を保存する」を参照してください。

圧縮形式

デフォルトでは、GZIP 圧縮が CTAS クエリ結果に使用されます。Parquet および ORC では、SNAPPY を指定することもできます。「例 4: CTAS のクエリ結果のデータストレージおよび圧縮形式の指定」を参照してください。

パーティション化

1 つまたは複数の列により、CTAS クエリの結果データをパーティション化することができます。パーティション分割されたテーブルを作成するときに、Athena はパーティションを自動的に AWS Glue Data Catalog に追加します。

重要

Athena での CTAS クエリの結果では、最大 100 個のパーティションを作成できます。これは、CTAS クエリ結果を Amazon S3 の指定した場所に書き込むときに Athena が作成します。結果データを並列書き込みするパーティションの数が 100 を超えると、Athena はエラーを出します。

CTAS クエリの SELECT ステートメントの末尾にパーティション列をリストします。詳細については、「例 7: パーティションありの CTAS クエリ」および「バケット化とパーティション化の比較」を参照してください。

バケット化

CTAS クエリの結果とバケットデータを 1 つまたは複数の列に保存するようにバケットを設定することができます。指定できるバケットの数に制限はありません。詳細については、「例 8: バケット化がある CTAS クエリ」および「バケット化とパーティション化の比較」を参照してください。

暗号化

Amazon S3 で CTAS クエリの結果を暗号化できます。これは Athena で他のクエリの結果を暗号化する方法と同様です。詳細については「暗号化オプションの設定」を参照してください。

データ型

CTAS クエリの列のデータ型は元のクエリに指定されているものと同じです。