UNLOAD - Amazon Athena

UNLOAD

SELECT ステートメントからのクエリ結果を指定したデータ形式に書き込みます。UNLOAD でサポートされる形式には Apache Parquet、ORC、Apache Avro、および JSON が含まれます。CSV は Athena SELECT コマンドがサポートする唯一の出力形式ですが、さまざまな出力形式をサポートする UNLOAD コマンドを使用して SELECT クエリを囲み、クエリの出力を UNLOAD がサポートする形式のいずれかに書き換えることができます。

CREATE TABLE AS (CTAS) ステートメントを使用して CSV 以外の形式でデータを出力できますが、CTAS ステートメントでは Athena でテーブルを作成する必要があります。UNLOAD ステートメントは、SELECT クエリの結果を非 CSV 形式で出力したいが、関連付けられたテーブルを必要としない場合に便利です。たとえば、ダウンストリームアプリケーションでは、SELECT クエリの結果を JSON 形式にする必要があります。また、SELECT クエリの結果を追加の分析に使用する場合は、Parquet や ORC の方が CSV よりもパフォーマンス面での利点を得られる可能性があります。

考慮事項と制約事項

Athena で UNLOAD ステートメント使用するときは、次の点に注意してください。

  • ファイルのグローバルな順序付けがありません - UNLOAD 結果が複数のファイルに並行して書き込まれます。UNLOAD ステートメントの SELECT クエリでソート順序が指定されている場合、各ファイルの内容はソート順序になりますが、ファイル同士は互いにソートされません。

  • 孤立したデータが削除されません - 障害が発生した場合、Athena は孤立したデータの削除を試みません。この動作は、CTAS および INSERT INTO ステートメントの動作と同じです。

  • 最大パーティション数 - UNLOAD で使用できるパーティションの最大数は 100 です。

  • メタデータおよびマニフェストファイル - Athena が、UNLOAD クエリごとにメタデータファイルとデータマニフェストファイルを生成します。マニフェストは、クエリが書き込んだファイルを追跡します。両方のファイルが、Amazon S3 の Athena クエリ結果の場所に保存されます。詳細については、「クエリ出力ファイルを識別する」を参照してください。

  • 暗号化 - UNLOAD 出力ファイルが、Amazon S3 で使用される暗号化設定に従って暗号化されます。暗号化設定を設定して UNLOAD 結果を暗号化するには、EncryptionConfiguration API を使用します。

  • 準備済みステートメント - UNLOAD は、準備済みステートメントで使用できます。Athena での準備済みステートメントの詳細については、「パラメータ化されたクエリを使用する」を参照してください。

  • サービスクォータ - UNLOAD は、DML クエリクォータを使用します。クオータの詳細については、「Service Quotas」を参照してください。

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

構文

UNLOAD ステートメントでは、次の構文を使用します。

UNLOAD (SELECT col_name[, ...] FROM old_table) TO 's3://amzn-s3-demo-bucket/my_folder/' WITH ( property_name = 'expression' [, ...] )

パーティションに書き込む場合を除き、TO 書き込み先にはデータのない Amazon S3 ロケーションを指定する必要があります。UNLOAD クエリが、指定された場所に書き込む前に、バケットの場所が空であることを確認します。UNLOAD は、指定された場所にデータがすでに存在する場合、その場所にデータを書き込まないので、UNLOADが既存のデータを上書きすることはありません。バケットの場所を UNLOAD の送信先として再利用するには、バケットの場所にあるデータを削除して、クエリを再度実行します。

UNLOAD がパーティションにき込む場合、これとは異なる動作になることに注意してください。同じ SELECT ステートメント、同じ TO ロケーション、および同じパーティションを持つ同一の UNLOAD クエリを複数回実行する場合、各 UNLOAD クエリはそのロケーションにある Amazon S3 と指定されたパーティションにデータをアンロードします。

パラメータ

property_name に使用できる値は次のとおりです。

形式 =「file_format

必須。出力のファイル形式を指定します。file_format に使用できる値は、ORCPARQUETAVROJSON、 またはTEXTFILE です。

圧縮 =「compression_format

オプション。このオプションは、ORC および Parquet 形式に固有のものです。ORC の場合、デフォルトは zlib で、Parquet の場合、デフォルトは gzip です。サポートされている圧縮形式については、「Athena 圧縮サポート」を参照してください。

注記

このオプションは、AVRO 形式には適用されません。Athena が、JSON および TEXTFILE 形式に gzip を使用します。

compression_level = compression_level

オプション。ZSTD 圧縮に使用する圧縮レベル。このプロパティは、ZSTD 圧縮にのみ適用されます。詳細については、「ZSTD 圧縮レベルを使用する」を参照してください。

field_delimiter =「delimiter

オプション。CSV、TSV、およびその他のテキスト形式のファイルのための単一文字のフィールド区切り文字を指定します。次に示す例では、カンマ区切り文字を指定しています。

WITH (field_delimiter = ',')

現在、複数文字のフィールド区切り文字はサポートされていません。フィールド区切り文字を指定しない場合、8 進文字 \001 (^A) が使用されます。

partitioned_by = ARRAY[ col_name[,...]]

オプション。出力をパーティション化する列の配列リスト。

注記

SELECT ステートメントでは、パーティション化された列の名前は、列のリストの最後に記述されていることを確認してください。

次の例では、JSON 形式を使用して SELECT クエリの出力を Amazon S3 の場所 s3://amzn-s3-demo-bucket/unload_test_1/ に書き込みます。

UNLOAD (SELECT * FROM old_table) TO 's3://amzn-s3-demo-bucket/unload_test_1/' WITH (format = 'JSON')

次の例では、Snappy 圧縮を使用して SELECT クエリの出力を Parquet 形式で書き込みます。

UNLOAD (SELECT * FROM old_table) TO 's3://amzn-s3-demo-bucket/' WITH (format = 'PARQUET',compression = 'SNAPPY')

次の例では、出力が最後の列でパーティション化された状態で、4 つの列をテキスト形式で書き込みます。

UNLOAD (SELECT name1, address1, comment1, key1 FROM table1) TO 's3://amzn-s3-demo-bucket/ partitioned/' WITH (format = 'TEXTFILE', partitioned_by = ARRAY['key1'])

次の例では、Parquet ファイル形式、ZSTD 圧縮、および ZSTD 圧縮レベル 4 を使用して、クエリ結果を指定された場所にアンロードします。

UNLOAD (SELECT * FROM old_table) TO 's3://amzn-s3-demo-bucket/' WITH (format = 'PARQUET', compression = 'ZSTD', compression_level = 4)

追加リソース