本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用中的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 主控台中編輯表格屬性的步驟
-
在 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 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")