

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Step Functions가 입력 CSV 파일을 구문 분석하는 방법
<a name="example-csv-parse-dist-map"></a>

**상태 관리 및 데이터 트랜스포밍**  
[변수를 사용하여 상태 간 데이터 전달](workflow-variables.md)과 [JSONata를 사용하여 데이터 트랜스포밍](transforming-data.md)에 대해 알아봅니다.

Step Functions는 다음 규칙을 기반으로 텍스트로 구분된 파일을 구문 분석합니다.
+ 필드를 구분하는 구분 기호는 *ReaderConfig*의 `CSVDelimiter`에서 지정합니다. 구분 기호의 기본값은 `COMMA`입니다.
+ 줄 바꿈은 **레코드**를 구분하는 구분 기호입니다.
+ 필드는 문자열로 취급됩니다. 데이터 유형 변환의 경우 [ItemSelector(맵)](input-output-itemselector.md)에서 `States.StringToJson` 내장 함수를 사용합니다.
+ 문자열을 묶을 때 큰따옴표(“ ”)는 필요하지 않습니다. 그러나 큰따옴표로 묶인 문자열에는 레코드 구분 기호 역할을 하지 않는 쉼표와 줄 바꿈이 포함될 수 있습니다.
+ 큰따옴표를 반복해서 사용하여 유지할 수 있습니다.
+ 백슬래시(\$1)는 특수 문자를 이스케이프하는 또 다른 방법입니다. 백슬래시는 다른 백슬래시, 큰따옴표 및 쉼표나 파이프와 같이 구성된 필드 구분자에서만 작동합니다. 다른 문자 뒤에 오는 백슬래시는 자동으로 제거됩니다.
+ 백슬래시는 반복하여 보존할 수 있습니다. 예제: 

  ```
  path,size
  C:\\Program Files\\MyApp.exe,6534512
  ```
+ 큰따옴표(`\"`)를 이스케이프하는 백슬래시는 쌍에 포함된 경우에만 작동하므로 큰따옴표를 반복하여(`""`) 이스케이프하는 것이 좋습니다.
+ 행의 필드 수가 헤더의 필드 수보다 **적으면** Step Functions에서 누락된 값에 **빈 문자열**을 제공합니다.
+ 행의 필드 수가 헤더의 필드 수보다 **많으면** Step Functions는 추가 필드를 **건너뜁니다**.

**입력 CSV 파일 구문 분석 예시**  
행 하나를 입력으로 포함하는 `myCSVInput.csv`라는 CSV 파일을 제공했다고 가정해보겠습니다. 그런 다음 `amzn-s3-demo-bucket`이라는 Amazon S3 버킷에 이 파일을 저장했습니다. CSV 파일은 다음과 같습니다.

```
abc,123,"This string contains commas, a double quotation marks (""), and a newline (
)",{""MyKey"":""MyValue""},"[1,2,3]"
```

다음 상태 머신에서 이 CSV 파일을 읽고 [ItemSelector(맵)](input-output-itemselector.md)를 사용하여 일부 필드의 데이터 유형을 변환합니다.

```
{
  "StartAt": "Map",
  "States": {
    "Map": {
      "Type": "Map",
      "ItemProcessor": {
        "ProcessorConfig": {
          "Mode": "DISTRIBUTED",
          "ExecutionType": "STANDARD"
        },
        "StartAt": "Pass",
        "States": {
          "Pass": {
            "Type": "Pass",
            "End": true
          }
        }
      },
      "End": true,
      "Label": "Map",
      "MaxConcurrency": 1000,
      "ItemReader": {
        "Resource": "arn:aws:states:::s3:getObject",
        "ReaderConfig": {
          "InputType": "CSV",
          "CSVHeaderLocation": "GIVEN",
          "CSVHeaders": [
            "MyLetters",
            "MyNumbers",
            "MyString",
            "MyObject",
            "MyArray"
          ]
        },
        "Parameters": {
          "Bucket": "amzn-s3-demo-bucket",
          "Key": "myCSVInput.csv"
        }
      },
      "ItemSelector": {
        "MyLetters.$": "$$.Map.Item.Value.MyLetters",
        "MyNumbers.$": "States.StringToJson($$.Map.Item.Value.MyNumbers)",
        "MyString.$": "$$.Map.Item.Value.MyString",
        "MyObject.$": "States.StringToJson($$.Map.Item.Value.MyObject)",
        "MyArray.$": "States.StringToJson($$.Map.Item.Value.MyArray)"
      }
    }
  }
}
```

이 상태 머신을 실행하면 다음 출력이 생성됩니다.

```
[
  {
    "MyNumbers": 123,
    "MyObject": {
      "MyKey": "MyValue"
    },
    "MyString": "This string contains commas, a double quote (\"), and a newline (\n)",
    "MyLetters": "abc",
    "MyArray": [
      1,
      2,
      3
    ]
  }
]
```