

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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` 陳述式在您想以非 CSV 格式輸出 `SELECT` 查詢結果，但不要相關聯的資料表時十分有用。例如，下游應用程式可能需要 `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 Quotas](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。

### Parameters
<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 = ',')
```
目前不支援多字元欄位分隔符號。如果您未指定欄位分隔符號，系統會使用八進位制字元 `\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 壓縮方式以 Parquet 格式寫入 `SELECT` 查詢的輸出。

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

下列範例會以文字格式寫入四個資料欄，且輸出依最後一個資料欄分割。

```
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 大數據部落格*中的[使用 Amazon Athena UNLOAD 特徵簡化 ETL 和 ML 管道](https://aws.amazon.com/blogs/big-data/simplify-your-etl-and-ml-pipelines-using-the-amazon-athena-unload-feature/)。