本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
此頁面說明如何使用 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 ,以使用 OpenCSVSerDe。如需 OpenCSV SerDe 的詳細資訊,請參閱開啟 CSV SerDe 以處理 CSV。
在 AWS Glue 主控台中編輯資料表屬性
-
在 AWS Glue 主控台導覽窗格中,選擇資料表。
-
選擇您想要編輯的資料表連結,然後選擇 Action (動作)、Edit table (編輯資料表)。
-
在 Edit table (編輯資料表) 頁面上,進行下列變更:
-
對於 Serialization lib (序列化程式庫),請輸入
org.apache.hadoop.hive.serde2.OpenCSVSerde
。 -
對於 Serde parameters (SerDe 參數),請輸入金鑰
escapeChar
、quoteChar
以及separatorChar
的值:-
對於
escapeChar
,請輸入反斜線 (\
)。 -
對於
quoteChar
,請輸入雙引號 ("
)。 -
對於
separatorChar
,請輸入逗號 (,
)。
-
-
-
選擇 Save (儲存)。
如需詳細資訊,請參閱《AWS Glue 開發人員指南》中的檢視與編輯資料表詳細資訊。
您也可以以程式設計方式更新 AWS Glue 資料表屬性。使用 AWS Glue UpdateTable API 操作或 update-table AWS CLI 命令來修改資料表定義中的SerDeInfo
區塊,如下列 JSON 範例所示。
"SerDeInfo": {
"name": "",
"serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
"parameters": {
"separatorChar": ","
"quoteChar": "\""
"escapeChar": "\\"
}
},
使用標頭處理 CSV 檔案
當您在 Athena 中以 CREATE TABLE
陳述式定義資料表時,您可以使用 skip.header.line.count
資料表屬性忽略 CSV 資料中的標頭,如下列範例所示。
...
STORED AS TEXTFILE
LOCATION 's3://amzn-s3-demo-bucket/csvdata_folder
/';
TBLPROPERTIES ("skip.header.line.count"="1")
或者,您也可以事先移除 CSV 標頭,使標頭資訊不包含在 Athena 查詢結果中。可達成此目的的其中一種方法是使用 AWS Glue 任務,它會執行擷取、轉換和載入 (ETL) 工作。您可以使用 PySpark Python 方言延伸 AWS Glue 的語言,在 中編寫指令碼。如需詳細資訊,請參閱《 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")