本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 SELECT
陳述式寫入查詢結果至指定的資料格式。針對 UNLOAD
支援的格式包括 Apache Parquet、ORC、Apache Avro 和 JSON。CSV 是 Athena SELECT
命令唯一支援的輸出格式,但您可以使用 UNLOAD
命令,該命令支援各種輸出格式,以包圍SELECT
查詢,並將其輸出重寫為其中一個UNLOAD
支援的格式。
雖然您可以使用 CREATE TABLE AS
(CTAS) 陳述式以 CSV 以外的格式輸出資料,但 CTAS 陳述式需要在 Athena 中建立資料表。當您想要以非 CSV 格式輸出SELECT
查詢的結果,但不想要相關聯的資料表時,此UNLOAD
陳述式很有用。例如,下游應用程式可能需要 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
的可能值為ORC
、PARQUET
、AVRO
、JSON
或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 = ',')
目前不支援多字元欄位分隔符號。如果您未指定欄位分隔符號,系統會使用八進位制字元
\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 壓縮方式以 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)
其他資源
-
AWS 大數據部落格中的使用 Amazon Athena UNLOAD 特徵簡化 ETL 和 ML 管道
。