使用中的CSV資料 AWS Glue - Amazon Athena

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

使用中的CSV資料 AWS Glue

本頁說明如 AWS Glue 何使用在每個資料欄的資料值周圍加上引號的CSV檔案,或是從包含標頭值的CSV檔案建立結構定義。

處理引號中的CSV數據

假設CSV檔案的資料欄位以雙引號括住,如下列範例所示。

"John","Doe","123-555-1231","John said \"hello\"" "Jane","Doe","123-555-9876","Jane said \"hello\""

若要在 Athena 中對使用引號值的CSV檔案建立的資料表執行查詢,您必須修改中的資料表屬性 AWS Glue 才能使用 O penCSVSer De。如需「開啟」的詳細資訊 CSV SerDe,請參閱開放CSV SerDe 進行處理 CSV

在 AWS Glue 主控台中編輯表格屬性的步驟
  1. 在 AWS Glue 主控台瀏覽窗格中,選擇 [格]。

  2. 選擇您想要編輯的資料表連結,然後選擇 Action (動作)、Edit table (編輯資料表)。

  3. Edit table (編輯資料表) 頁面上,進行下列變更:

    • 對於 Serialization lib (序列化程式庫),請輸入 org.apache.hadoop.hive.serde2.OpenCSVSerde

    • 對於 Serde parameters (SerDe 參數),請輸入金鑰 escapeCharquoteChar 以及 separatorChar 的值:

      • 對於 escapeChar,請輸入反斜線 (\)。

      • 對於 quoteChar,請輸入雙引號 (")。

      • 對於 separatorChar,請輸入逗號 (,)。

  4. 選擇 Save (儲存)。

如需詳細資訊,請參閱《AWS Glue 開發人員指南》中的檢視與編輯資料表詳細資訊

您也可以程式設計方式更新 AWS Glue 資料表屬性 使用 AWS Glue UpdateTableAPI作業或 updatete-table AWS CLI 指令來修改資料表定義中的SerDeInfo圖塊,如下列範JSON例所示。

"SerDeInfo": { "name": "", "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde", "parameters": { "separatorChar": "," "quoteChar": "\"" "escapeChar": "\\" } },

使用標頭處理CSV檔案

使用CREATE TABLE陳述式在 Athena 中定義資料表時,可以使用 skip.header.line.count table 屬性忽略CSV資料中的標頭,如下列範例所示。

... STORED AS TEXTFILE LOCATION 's3://amzn-s3-demo-bucket/csvdata_folder/'; TBLPROPERTIES ("skip.header.line.count"="1")

或者,您也可以事先移除CSV標頭,這樣標頭資訊就不會包含在 Athena 查詢結果中。實現這一目標的一種方法是使用 AWS Glue 工作,它們執行提取,轉換和 load (ETL) 工作。您可以 AWS Glue 使用 PySpark Python 方言延伸的語言來撰寫指令碼。如需詳細資訊,請參閱AWS Glue 開發人員指南中的使用 AWS Glue 編寫工作

下列範例會示範 AWS Glue 指令碼中的函數,該函式會使用寫出動態影格from_options,並將writeHeader格式選項設定為 false,這會移除標頭資訊:

glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://amzn-s3-demo-bucket/MYTABLEDATA/"}, format = "csv", format_options = {"writeHeader": False}, transformation_ctx = "datasink2")