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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

以下のセクションでは、Athena で CREATE TABLE AS SELECT (CTAS) クエリを使用する際に留意すべき考慮事項と制限事項について説明します。

CTAS クエリ構文

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

CTAS クエリとビューの違い

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

CTAS クエリ結果の場所

ワークグループがクエリ結果の場所に関するクライアント側の設定を上書きする場合、Athena は s3://<workgroup-query-results-location>/tables/<query-id>/ の場所にテーブルを作成します。ワークグループに指定されたクエリ結果の場所を表示するには、ワークグループの詳細を表示します

ワークグループがクエリ結果の場所を上書きしない場合は、CTAS クエリの構文 WITH (external_location ='s3://location/') を使用して、CTAS クエリ結果の保存場所を指定できます。

注記

external_location プロパティは、空の場所を指定する必要があります。CTAS クエリはバケットのパス位置 (プレフィックス) が空であるかどうかをチェックして、その場所に既にデータが含まれる場合は、データを上書きしません。同じ場所を再度使用するには、バケット内のキープレフィックスの場所のデータを削除します。

external_location 構文を省略しており、ワークグループ設定を使用していない場合、Athena はクエリ結果の場所にクライアント側の設定を使用し、s3://<client-query-results-location>/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/ の場所にテーブルを作成します。

孤立したファイルの検索

CTAS または INSERT INTO ステートメントが失敗した場合、孤立したデータがデータの場所に残っている可能性があります。Athena は場合によってはバケットからデータまたは部分データを削除しないため、後続のクエリでこの部分データが読み込み可能になる可能性があります。検査または削除する孤立したファイルを見つけるには、Athena に用意されているデータマニフェストファイルを使用して、書き込まれるファイルのリストを追跡できます。詳細については、クエリ出力ファイルの識別およびDataManifestLocationを参照してください。

ORDER BY 句は無視されます

CTAS クエリでは、Athena はクエリの SELECT 部分にある ORDER BY 句を無視します。

SQL 仕様 (ISO 9075 Part 2) では、クエリ式で指定されたテーブル行の順序が保証されるのは、ORDER BY 句が直後に含まれるクエリ式だけです。SQL のテーブルはどのような場合でも本来は順序付けられておらず、ORDER BY をサブクエリ句に追加してもクエリのパフォーマンスが低下するだけで、出力は順序付けられません。したがって、Athena CTAS クエリでは、データが書き込まされた際に ORDER BY 句によって指定された順序が保持される保証はありません。

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

CTAS クエリの結果は、デフォルトで Parquet 形式で保存されます (データストレージ形式を指定しない場合)。CTAS の結果は、PARQUETORCAVROJSON、および TEXTFILE で保存できます。CTAS TEXTFILE 形式では複数文字の区切り文字がサポートされません。CTAS クエリでは、 SerDe フォーマット変換を解釈するためにを指定する必要はありません。「Example: Writing query results to a different format」を参照してください。

圧縮形式

JSON 形式と TEXTFILE 形式の CTAS クエリ結果には、GZIP 圧縮が使用されます。Parquet の場合、デフォルトは GZIP で、GZIP または SNAPPY も使用可能です。ORC の場合、デフォルトは ZLIB で、LZ4SNAPPYZLIB、または ZSTD も使用できます。圧縮を指定する CTAS の例については、Example: Specifying data storage and compression formats を参照してください。Athena での圧縮の詳細については、「Athena での圧縮のサポート」を参照してください。

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

CTAS クエリの結果データをパーティションおよびバケット化することができます。詳細については、「Athena におけるパーティション化とバケット化」を参照してください。CTAS を使用してパーティションテーブルを作成する場合、Athena では 100 個のパーティションを書き込むという制限があります。

宛先テーブルのプロパティを指定する WITH 句の最後に、パーティションとバケット化の述語を含めます。詳細については、「Example: Creating bucketed and partitioned tables」および「Athena におけるパーティション化とバケット化」を参照してください。

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

Encryption

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

予想されるバケット所有者

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

データ型

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