

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

# 在 中使用 CSV 資料 AWS Glue
<a name="schema-csv"></a>

此頁面說明如何使用 從每個資料欄的資料值有引號的 CSV 檔案 AWS Glue ，或從包含標頭值的 CSV 檔案建立結構描述。

## 處理以引號括住的 CSV 資料
<a name="schema-csv-quotes"></a>

假設一個 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 的 Open CSV SerDe](csv-serde.md)。

**在 AWS Glue 主控台中編輯資料表屬性**

1. 在 AWS Glue 主控台導覽窗格中，選擇**資料表**。

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

1. 在 **Edit table** (編輯資料表) 頁面上，進行下列變更：
   + 對於 **Serialization lib** (序列化程式庫)，請輸入 `org.apache.hadoop.hive.serde2.OpenCSVSerde`。
   + 對於 **Serde parameters** (SerDe 參數)，請輸入金鑰 `escapeChar`、`quoteChar` 以及 `separatorChar` 的值：
     + 對於 `escapeChar`，請輸入反斜線 (**\\**)。
     + 對於 `quoteChar`，請輸入雙引號 (**"**)。
     + 對於 `separatorChar`，請輸入逗號 (**,**)。

1. 選擇**儲存**。

如需詳細資訊，請參閱《AWS Glue 開發人員指南》中的**[檢視與編輯資料表詳細資訊](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html#console-tables-details)。

您也可以以程式設計方式更新 AWS Glue 資料表屬性。使用 AWS Glue [UpdateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateTable.html) API 操作或 [update-table](https://docs.aws.amazon.com/cli/latest/reference/glue/update-table.html) AWS CLI 命令來修改資料表定義中的`SerDeInfo`區塊，如下列 JSON 範例所示。

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

## 處理具有標頭的 CSV 檔案
<a name="schema-csv-headers"></a>

當您在 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 中編寫任務](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html)。 *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")
```