CTAS クエリに関する考慮事項と制約事項 - 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>/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<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 または INSERT INTO ステートメントが失敗した場合、孤立したデータがデータの場所に残っている可能性があります。Athena はバケットからデータ (部分データも含む) を削除しないため、後続のクエリでこの部分データが読み取り可能になる可能性があります。検査または削除する孤立したファイルを見つけるには、Athena に用意されているデータマニフェストファイルを使用して、書き込まれるファイルのリストを追跡できます。詳細については、「クエリ出力ファイルの識別」および「DataManifestLocation」を参照してください。

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

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

圧縮形式

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

パーティションとバケットの制限

CTAS クエリの結果データをパーティション化およびバケット化することができます。詳細については、「バケット化とパーティション化の比較」を参照してください。Athena では、100 個の一意のパーティションとバケットの組み合わせへの書き込みがサポートされます。たとえば、送信先テーブルにバケットが定義されていない場合、最大 100 個のパーティションを指定できます。バケットを 5 個指定すると、(それぞれ 5 個のバケットを持つ) 20 個のパーティションが許可されます。この数を超えると、エラーが発生します。

送信先テーブルのプロパティを指定する WITH 句の最後に、パーティション化とバケット化の述語を含めます。詳細については、「例: バケット化およびパーティション化されたテーブルを作成する」および「バケット化とパーティション化の比較」を参照してください。

100 パーティションの制限を回避する方法については、「CTAS および INSERT INTO を使用した、100 個を超えるパーティションを持つテーブルの作成」を参照してください。

暗号化

Amazon S3 で CTAS クエリの結果を暗号化できます。これは Athena で他のクエリの結果を暗号化する方法と同様です。詳細については、「Amazon S3 に保存されたクエリ結果の暗号化」を参照してください。

データ型

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