如何以 CSV 以外的格式 (例如壓縮格式) 儲存 Amazon Athena 查詢作業的輸出內容?

1 分的閱讀內容
0

我想以 CSV 以外的格式儲存 Amazon Athena 的查詢結果,例如 JSON 或壓縮格式。

解決方法

Athena 僅支援以 CSV 檔案輸出。UNLOAD 查詢能以指定的資料格式,將 SELECT 陳述式的查詢結果寫入。UNLOAD 支援的格式包括 Apache Parquet、ORC、Apache Avro 和 JSON。CSV 是 Athena SELECT 查詢唯一使用的輸出格式,不過您可以使用 UNLOAD,以 UNLOAD 支援的格式將 SELECT 查詢的輸出內容寫入。雖然您可以使用 CTAS 陳述式,以 CSV 以外的格式輸出資料,但如果使用這類陳述式,您同樣必須在 Athena 建立資料表。若要以非 CSV 格式輸出 SELECT 查詢結果,但不希望使用相關的資料表,此時 UNLOAD 陳述式就相當好用。舉例來說,下游應用程式可能會要求 SELECT 查詢結果必須採用 JSON 格式,而且如果您打算使用 SELECT 查詢結果進行其他分析,Parquet 或 ORC 在效能上可能會比 CSV 更有優勢。

若要以不同格式儲存查詢作業的輸出檔案,請使用 CREATE TABLE AS SELECT (CTAS) 查詢,接著設定 format 屬性。查詢作業完成後,捨棄 CTAS 資料表。請謹記以下幾點:

  • 您可以將 format 設為 ORC、PARQUET、AVRO、JSON 或 TEXTFILE。如果您未指定 CTAS 查詢的格式,在預設情形下,Athena 會使用 Parquet。
  • 參數 format 的名稱必須使用小寫字母,否則 CTAS 查詢作業會執行失敗。如需範例,請參閱範例: 以不同格式將查詢結果寫入
  • 根據預設,所有 CTAS 查詢作業都會使用 GZIP 壓縮格式。如果是 Parquet 和 ORC,您可以使用 parquet_compressionorc_compression 選項來指定其他壓縮類型,例如 SNAPPY。如需範例,請參閱範例: 指定資料儲存和壓縮格式
  • 如果是以文字為基礎的格式,您可以如下所示指定 field_delimiterWITH (field_delimiter = ',')。如果您未指定欄位分隔符號,Athena 會依預設使用 \001。
  • 如果您在 CTAS 查詢作業中使用 external_location 參數,請確認 Amazon Simple Storage Service (Amazon S3) 位置沒有任何資料,否則您可能會看到以下錯誤: 「HIVE_PATH_ALREADY_EXISTS: Target directory for table 'table_name' already exists: s3://AWSDOC-EXAMPLE-BUCKET」。如需 external_location 參數的詳細資訊,請參閱 CTAS 資料表屬性

相關資訊

CTAS 查詢作業考量事項和限制

AWS 官方
AWS 官方已更新 2 年前