UNLOAD - Amazon Athena

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

UNLOAD

SELECT 陳述式寫入查詢結果至指定的資料格式。支持的格式UNLOAD包括阿帕奇鑲木地板ORC,阿帕奇阿夫羅,和JSON. CSV是 Athena SELECT 命令唯一支援的輸出格式,但您可以使用支援多種輸出格式的UNLOAD指令,將SELECT查詢括起來,並將其輸出重新寫入其中一種UNLOAD支援的格式。

雖然您可以使用CTAS陳述式以外的格式輸出資料CSV,但這些陳述式也需要在 Athena 中建立資料表。當您想要以非格式輸出SELECT查詢的結果,但不需要關聯的資料表時,這個UNLOAD陳述CSV式非常有用。例CSV如,下游應用程式可能需要SELECT查詢結果為JSON格式,而 Parquet 或者如果您打算使用SELECT查詢結果進行其他分析,則ORC可能會提供效能優勢。

考量與限制

當您在 Athena 中使用 UNLOAD 陳述式時,請謹記以下幾點:

  • 沒有檔案的全域排序UNLOAD結果會同時寫入多個檔案。如果 UNLOAD 陳述式中的 SELECT 查詢會指定排序順序,則每個檔案的內容會依排序順序排列,但檔案並不會彼此排序。

  • 未刪除孤立資料 – 在發生故障的情況下,Athena 不會嘗試刪除孤立的資料。這種行為與 for INSERT INTO 語句CTAS相同。

  • 分割區數量上限 – 可搭配 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_formatORCPARQUETAVROJSON、或TEXTFILE

壓縮 = 'compression_format'

選用。此選項特定於ORC和鑲木地板格式。對於ORC,預設為zlib,對於「實木地板」,預設值為gzip。如需有關支援的壓縮格式的資訊,請參閱 Athena 壓縮支援

注意

此選項不適用於 AVRO 格式。Athena 對 JSONTEXTFILE 格式使用 gzip

壓縮層級 = compression_level

選用。用於壓縮的ZSTD壓縮級別。此屬性僅適用於ZSTD壓縮。如需詳細資訊,請參閱使用ZSTD壓縮層級

字段分隔符 = 'delimiter'

選用。為CSV、TSV和其他文字格式中的檔案指定單一字元欄位分隔符號。以下範例指定逗點分隔符號。

WITH (field_delimiter = ',')

目前不支援多字元欄位分隔符號。如果您未指定欄位分隔符號,系統會使用八進位制字元 \001 (^A)。

分區 _ 由 = [ARRAY col_name[,...] ]

選用。資料欄的陣列清單,輸出依這些資料欄進行分割。

注意

SELECT 陳列式中,請確保已分割資料欄的名稱位於資料欄清單中的最後。

範例

下列範例會s3://amzn-s3-demo-bucket/unload_test_1/使用JSON格式將SELECT查詢的輸出寫入 Amazon S3 位置。

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)

其他資源