

# AWS Glue에서 CSV 데이터로 작업
<a name="schema-csv"></a>

이 페이지에서는 AWS Glue를 사용하여 각 열의 데이터 값을 따옴표로 묶은 CSV 파일 또는 헤더 값이 포함된 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\""
```

따옴표로 묶인 값을 가진 CSV 파일에서 생성된 테이블에 대해 Athena에서 쿼리를 실행하려면 OpenCSVSerDe를 사용하기 위해 AWS Glue에서 테이블 속성을 수정해야 합니다. OpenCSV SerDe에 대한 자세한 내용은 [CSV 처리를 위한 Open CSV SerDe](csv-serde.md) 단원을 참조하세요.

**AWS Glue 콘솔에서 테이블 속성을 편집하려면**

1. AWS Glue 콘솔 탐색 창에서 **테이블**을 선택합니다.

1. 편집할 테이블 링크를 선택한 다음 **작업(Actions)**, **테이블 편집(Edit table)**을 선택합니다.

1. **테이블 편집** 페이지에서 다음과 같이 변경합니다.
   + **직렬화 라이브러리(Serialization lib)**에 `org.apache.hadoop.hive.serde2.OpenCSVSerde`를 입력합니다.
   + **Serde 파라미터(Serde parameters)**에서 `escapeChar`, `quoteChar`, `separatorChar` 키에 다음 값을 입력합니다.
     + `escapeChar`에 백슬래시(**\$1**)를 입력합니다.
     + `quoteChar`에 큰따옴표(**"**)를 입력합니다.
     + `separatorChar`에 쉼표(**,**)를 입력합니다.

1. **Save**(저장)를 선택합니다.

자세한 내용은 *AWS Glue 개발자 안내서*의 [테이블 세부 정보 보기 및 편집](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html#console-tables-details)을 참조하세요.

프로그래밍 방식으로 AWS Glue 테이블 속성을 업데이트할 수도 있습니다. 다음 JSON 예제처럼 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` 블록을 수정합니다.

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

## 헤더가 포함된 CSV 파일 취급
<a name="schema-csv-headers"></a>

다음 예제와 같이 `CREATE TABLE` 문으로 Athena에서 테이블을 정의할 때 `skip.header.line.count` 테이블 속성을 사용하여 CSV 데이터의 헤더를 무시할 수 있습니다.

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

또는 헤더 정보가 Athena 쿼리 결과에 포함되지 않도록 미리 CSV 헤더를 제거할 수 있습니다. 한 가지 방법은 추출, 변환 및 로드(ETL) 작업을 수행하는 AWS Glue 작업을 사용하는 것입니다. AWS Glue에서 PySpark Python 언어의 확장 언어를 사용하여 스크립트를 작성할 수 있습니다. 자세한 내용은 *AWS Glue 개발자 안내서*의 [AWS Glue에 작업 작성](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html)을 참조하세요.

다음 예는 `from_options`를 사용하여 동적 프레임을 작성하고 `writeHeader` 형식 옵션을 false로 설정하여 헤더 정보를 제거하는 AWS Glue 스크립트의 함수를 보여줍니다.

```
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")
```