

# UNLOAD
<a name="unload"></a>

`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 よりもパフォーマンス面での利点を得られる可能性があります。

## 考慮事項と制限事項
<a name="unload-considerations-and-limitations"></a>

Athena で `UNLOAD` ステートメント使用するときは、次の点に注意してください。
+ **ファイルのグローバルな順序付けがありません** - `UNLOAD` 結果が複数のファイルに並行して書き込まれます。`UNLOAD` ステートメントの `SELECT` クエリでソート順序が指定されている場合、各ファイルの内容はソート順序になりますが、ファイル同士は互いにソートされません。
+ **孤立したデータが削除されません** - 障害が発生した場合、Athena は孤立したデータの削除を試みません。この動作は、CTAS および `INSERT INTO` ステートメントの動作と同じです。
+ **最大パーティション数** - `UNLOAD` で使用できるパーティションの最大数は 100 です。
+ **メタデータおよびマニフェストファイル** - Athena が、`UNLOAD` クエリごとにメタデータファイルとデータマニフェストファイルを生成します。マニフェストは、クエリが書き込んだファイルを追跡します。両方のファイルが、Amazon S3 の Athena クエリ結果の場所に保存されます。詳細については、「[クエリ出力ファイルを識別する](querying-finding-output-files.md#querying-identifying-output-files)」を参照してください。
+ **暗号化** - `UNLOAD` 出力ファイルが、Amazon S3 で使用される暗号化設定に従って暗号化されます。暗号化設定を設定して `UNLOAD` 結果を暗号化するには、[EncryptionConfiguration API](https://docs.aws.amazon.com/athena/latest/APIReference/API_EncryptionConfiguration.html) を使用します。
+ **準備済みステートメント** - `UNLOAD` は、準備済みステートメントで使用できます。Athena での準備済みステートメントの詳細については、「[パラメータ化されたクエリを使用する](querying-with-prepared-statements.md)」を参照してください。
+ **サービスクォータ** - `UNLOAD` は、DML クエリクォータを使用します。クオータの詳細については、「[サービスクォータ](service-limits.md)」を参照してください。
+ **予想されるバケット所有者** — 予想されるバケット所有者の設定は、`UNLOAD` クエリで指定された送信先の Amazon S3 の場所には適用されません。予期されるバケット所有者の設定は、Athena クエリの結果の出力先として指定した Amazon S3 内の場所にのみ適用されます。詳細については、「[Athena コンソールを使用してクエリ結果の場所を指定する](query-results-specify-location-console.md)」を参照してください。

## 構文
<a name="unload-syntax"></a>

`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 と指定されたパーティションにデータをアンロードします。

### パラメータ
<a name="unload-parameters"></a>

*property\$1name* に使用できる値は次のとおりです。

** 形式 =「*file\$1format*」 **  
必須。出力のファイル形式を指定します。*file\$1format* に使用できる値は、`ORC`、`PARQUET`、`AVRO`、`JSON`、 または`TEXTFILE` です。

** 圧縮 =「*compression\$1format*」 **  
オプション。このオプションは、ORC および Parquet 形式に固有のものです。ORC の場合、デフォルトは `zlib` で、Parquet の場合、デフォルトは `gzip` です。サポートされている圧縮形式については、「[Athena 圧縮サポート](https://docs.aws.amazon.com/athena/latest/ug/compression-formats.html)」を参照してください。  
このオプションは、`AVRO` 形式には適用されません。Athena が、`JSON` および `TEXTFILE` 形式に `gzip` を使用します。

**compression\$1level = *compression\$1level* **  
オプション。ZSTD 圧縮に使用する圧縮レベル。このプロパティは、ZSTD 圧縮にのみ適用されます。詳細については、「[ZSTD 圧縮レベルを使用する](compression-support-zstd-levels.md)」を参照してください。

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

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

** partitioned\$1by = ARRAY[ *col\$1name*[,...]] **  
オプション。出力をパーティション化する列の配列リスト。  
`SELECT` ステートメントでは、パーティション化された列の名前は、列のリストの最後に記述されていることを確認してください。

## 例
<a name="unload-examples"></a>

次の例では、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)
```

## その他のリソース
<a name="unload-additional-resources"></a>
+ *AWS Big Data Blog* の「[Simplify your ETL and ML pipelines using the Amazon Athena UNLOAD feature](https://aws.amazon.com/blogs/big-data/simplify-your-etl-and-ml-pipelines-using-the-amazon-athena-unload-feature/)」。