

# AWS Glue Studio에서 시각적 ETL 작업 시작
<a name="edit-nodes-chapter"></a>

AWS Glue Studio의 간단한 시각적 인터페이스를 사용하여 ETL 작업을 생성할 수 있습니다. [**작업(Jobs)**] 페이지를 사용하여 새 작업을 생성합니다. 스크립트 편집기 또는 노트북을 사용하여 AWS Glue Studio ETL 작업 스크립트의 코드로 직접 작업할 수도 있습니다.

**작업(Jobs)** 페이지에서 AWS Glue Studio 또는 AWS Glue로 생성한 모든 작업을 볼 수 있습니다. 이 페이지에서 작업을 보고, 관리하고, 실행할 수 있습니다.

 AWS Glue Studio에서 ETL 작업을 생성하는 방법에 대한 또 다른 예제는 [블로그 자습서](https://aws.amazon.com/blogs/big-data/making-etl-easier-with-aws-glue-studio/)도 참조하세요.

## AWS Glue Studio에서 작업 시작
<a name="create-jobs-start"></a>

 AWS Glue에서는 시각적 인터페이스, 대화형 코드 노트북 또는 스크립트 편집기를 통해 작업을 생성할 수 있습니다. 원하는 옵션을 클릭하여 작업을 시작하거나 샘플 작업을 기반으로 새 작업을 생성할 수 있습니다.

 선택한 도구를 사용하여 샘플 작업에서 작업을 생성합니다. 예를 들어 샘플 작업을 사용하면 CSV 파일을 카탈로그 테이블에 결합하는 시각적 ETL 작업을 생성하거나 pandas에 대한 작업을 수행할 때 AWS Glue for Ray 또는 AWS Glue for Spark에서 대화형 코드 노트북에서 작업을 생성하거나 SparkSQL을 사용하여 대화형 코드 노트북에서 작업을 생성할 수 있습니다.

### 처음부터 AWS Glue Studio에서 작업 생성
<a name="create-jobs-start-from-scratch"></a>

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/gluestudio/](https://console.aws.amazon.com/gluestudio/)에서 AWS Glue Studio 콘솔을 엽니다.

1.  탐색 창에서 **ETL 작업**을 선택합니다.

1.  **작업 생성** 섹션에서 작업에 대한 구성 옵션을 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/sample-jobs.png)

    처음부터 새로 작업을 생성하는 옵션: 
   +  **시각적 ETL** - 데이터 흐름에 초점을 맞춘 시각적 인터페이스에서 작성 
   +  **대화형 코드 노트북을 사용하여 작성** - Jupyter Notebook 기반의 노트북 인터페이스에서 대화형으로 작업 작성 

      이 옵션을 선택하는 경우 노트북 작성 세션을 생성하기 전에 추가 정보를 제공해야 합니다. 이 정보를 지정하는 방법에 대한 자세한 내용은 [AWS Glue Studio에서 노트북 시작하기](notebook-getting-started.md) 섹션을 참조하세요.
   + **스크립트 편집기에서 코드 작성** - ETL 스크립트 작성 및 프로그래밍에 익숙한 사용자의 경우 이 옵션을 선택하여 새 Spark ETL 작업을 생성합니다. 엔진(Python 쉘, Ray, Spark(Python) 또는 Spark(Scala))를 선택합니다. 그런 다음 **새로 시작** 또는 **스크립트 업로드**를 선택합니다. 그러면 로컬 파일에서 기존 스크립트를 업로드합니다. 스크립트 편집기를 사용하는 옵션을 선택한 경우 시각적 작업 편집기를 사용하여 작업을 설계하거나 편집할 수 없습니다.

     Spark 작업은 AWS Glue에서 관리하는 Apache Spark 환경에서 실행됩니다. 기본적으로 새 스크립트는 Python으로 코딩됩니다. 새 Scala 스크립트를 작성하려면 [AWS Glue Studio에서 Scala 스크립트 생성 및 편집](edit-nodes-script.md#edit-job-scala-script) 섹션을 참조하세요.

### 예제 작업으로부터 AWS Glue Studio에서 작업 생성
<a name="create-jobs-start-from-example-job"></a>

 예제 작업에서 작업을 생성하도록 선택할 수 있습니다. **예제 작업** 섹션에서 샘플 작업을 선택한 다음 **샘플 작업 생성**을 선택합니다. 옵션 중 하나에서 샘플 작업을 생성하면 작업할 수 있는 빠른 템플릿이 제공됩니다.

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/gluestudio/](https://console.aws.amazon.com/gluestudio/)에서 AWS Glue Studio 콘솔을 엽니다.

1.  탐색 창에서 **ETL 작업**을 선택합니다.

1.  샘플 작업에서 작업을 생성하는 옵션을 선택합니다.
   +  **여러 소스를 결합하는 시각적 ETL 작업** - 세 개의 CSV 파일을 읽고, 데이터를 결합한 후 데이터 형식을 변경하고 Amazon S3에 데이터를 쓴 후에 나중에 쿼리할 수 있도록 카탈로그화합니다.
   +  **Pandas를 사용하는 Spark 노트북** - Spark와 결합된 인기 있는 Pandas 프레임워크를 사용하여 데이터를 탐색하고 시각화합니다.
   +  **SQL을 사용하는 Spark 노트북** - SQL을 사용하여 Apache Spark를 빠르게 시작할 수 있습니다. AWS Glue 데이터 카탈로그를 통해 데이터에 액세스하고 친숙한 명령을 사용하여 데이터를 변환합니다.

1. **샘플 작업 생성**을 선택합니다.

# 작업 편집기 기능
<a name="job-editor-features"></a>

작업 편집기는 작업 생성 및 편집을 위해 다음과 같은 기능을 제공합니다.
+ 각 작업 태스크에 대한 노드가 있는 작업의 시각적 다이어그램: 데이터를 읽기 위한 데이터 원본 노드. 데이터를 수정하기 위한 변환 노드, 데이터를 쓰기 위한 데이터 대상 노드.

  작업 다이어그램에서 각 노드의 속성을 보고 구성할 수 있습니다. 작업 다이어그램에서 각 노드에 대한 스키마 및 샘플 데이터를 볼 수도 있습니다. 이러한 기능을 사용하면 작업을 실행할 필요 없이 작업이 올바른 방식으로 데이터를 수정하고 변환하는지 확인할 수 있습니다.
+ 작업에 대해 생성된 코드를 수정할 수 있는 스크립트 보기 및 편집 탭.
+ AWS Glue ETL 작업이 실행되는 환경을 사용자 정의하기 위해 다양한 설정을 구성할 수 있는 작업 세부 정보 탭.
+ 작업의 현재 및 이전 실행을 보고, 작업 실행 상태를 보고, 작업 실행에 대한 로그에 액세스할 수 있는 실행 탭.
+ 작업에 데이터 품질 규칙을 적용할 수 있는 데이터 품질 탭.
+ 작업 시작 시간을 구성하거나 반복 작업 실행을 설정할 수 있는 일정 탭.
+ 작업에 사용할 Git 서비스를 구성할 수 있는 버전 제어 탭.

## 시각적 작업 편집기에서 스키마 미리 보기 사용
<a name="schema-previews"></a>

작업을 생성하거나 편집하는 동안 [**출력 스키마(Output schema)**] 탭을 사용하여 데이터에 대한 스키마를 볼 수 있습니다.

스키마를 보려면 먼저 작업 편집기에 데이터 원본에 액세스할 수 있는 권한이 필요합니다. 편집기의 작업 세부 정보 탭이나 노드의 [**출력 스키마(Output schema)**] 탭에서 IAM 역할을 지정할 수 있습니다. IAM 역할에 데이터 원본에 액세스하는 데 필요한 모든 권한이 있는 경우 노드의 [**출력 스키마(Output schema)**] 탭에서 스키마를 볼 수 있습니다.

## 시각적 작업 편집기에서 데이터 미리 보기 사용
<a name="data-previews"></a>



[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/EqmljEWlp0c/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/EqmljEWlp0c)




데이터 미리 보기를 사용하면 작업을 반복적으로 실행할 필요 없이 데이터 샘플을 이용하여 작업을 생성하고 테스트할 수 있습니다. 데이터 미리 보기를 사용하여 다음을 수행할 수 있습니다.
+ IAM 역할을 테스트하여 데이터 소스 또는 데이터 대상에 대한 액세스 권한이 있는지 확인할 수 있습니다.
+ 변환이 의도한 방식으로 데이터를 수정하고 있는지 확인할 수 있습니다. 예를 들어 필터 변환을 사용하는 경우 필터가 올바른 데이터 하위 집합을 선택하는지 확인할 수 있습니다.
+ 데이터를 확인하십시오. 데이터 집합에 여러 유형의 값이 있는 열이 포함된 경우 데이터 미리 보기에 이러한 열에 대한 튜플 목록이 표시됩니다. 각 튜플에는 데이터 유형과 해당 값이 포함됩니다.

**참고**  
 데이터 미리 보기 세션과 사용자 지정 SQL 또는 사용자 지정 코드 노드를 사용하는 경우 데이터 미리 보기 세션은 전체 데이터세트에 대해 SQL 또는 코드 블록을 있는 그대로 실행합니다.

 작업을 생성하거나 편집하는 동안 작업 캔버스 아래에 있는 **데이터 미리 보기** 탭을 사용하여 데이터 샘플을 볼 수 있습니다. 작업에 역할이 이미 구성되어 있거나 계정에 기본 IAM 역할이 설정된 경우 새 데이터 미리 보기 세션이 자동으로 시작됩니다. 역할이 이전에 구성되지 않은 경우 역할을 선택하여 세션을 시작할 수 있습니다.

**참고**  
 데이터 미리 보기 세션에서 선택한 역할이 작업에도 사용됩니다.



 정보 아이콘을 클릭하면 세션 상태와 진행 상황, 세션 세부 정보를 볼 수 있습니다.

 세션이 준비되면 AWS Glue Studio가 선택한 노드에 대한 데이터를 로드합니다. 진행 상황에 따라 **완료율 %**을 확인할 수 있습니다.

![\[스크린샷은 시작한 노드의 데이터 미리보기 탭을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data-preview-progress.png)


 시각적 작업을 작성할 때 **출력 스키마** 탭에서 **세션에서 스키마 추론**을 전환하면 선택한 노드의 스키마를 AWS Glue Studio가 자동으로 업데이트합니다.

![\[스크린샷은 시작한 노드의 데이터 미리보기 탭을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data-preview-output-schema.png)


 데이터 미리 보기 기본 설정을 구성하는 방법: 

설정 아이콘(기어 기호)을 선택하여 데이터 미리 보기에 대한 기본 설정을 구성합니다. 이러한 설정은 작업 다이어그램의 모든 노드에 적용됩니다. 다음을 할 수 있습니다.
+ 한 줄에서 다음 줄로 텍스트를 줄 바꿈하도록 선택합니다. 이 옵션은 기본적으로 활성화되어 있습니다
+ 행 수 변경(기본값 200개) 
+ 필요한 경우 IAM 역할을 선택하거나 IAM 역할을 생성합니다
+ 작업을 작성할 때 새 세션을 자동으로 시작하도록 선택합니다. 이렇게 하면 작업을 작성할 때 새 대화형 세션이 프로비저닝됩니다. **이 설정은 계정 수준에서 적용됩니다.** 일단 설정하면 작업을 편집할 때 계정의 모든 사용자에게 적용됩니다.
+ 스키마를 자동으로 유추하도록 선택합니다. 선택한 노드에 대해 출력 스키마가 자동으로 추론됩니다
+ AWS Glue 라이브러리를 자동으로 가져오도록 선택합니다. 이는 세션을 다시 시작해야 하는 새 변환을 추가할 때 데이터 미리 보기에서 새 세션이 다시 시작되지 않도록 하므로 유용합니다.

 추가 기능에는 다음과 같은 기능이 포함됩니다.
+ [**필드 y개 중 x개 미리 보기(Previewing x of y fields)**] 버튼을 선택하여 미리 보려는 열(필드)을 선택합니다. 기본 설정을 사용하여 데이터를 미리 보면 작업 편집기에 데이터 집합의 처음 5개 열이 표시됩니다. 모두 표시하거나 표시하지 않도록 변경할 수 있습니다(권장하지 않음).
+ 데이터 미리 보기 창을 가로 및 세로로 스크롤할 수 있습니다.
+ 최대화 버튼을 사용하여 데이터 미리보기 탭을 오버레이 작업 그래프로 확장하면 데이터 및 데이터 구조를 더 잘 볼 수 있습니다. 이와 유사하게 최소화 버튼을 사용하여 데이터 미리 보기 탭을 최소화합니다. 핸들 창을 잡고 위로 드래그하여 **데이터 미리 보기** 탭을 확장할 수도 있습니다.  
![\[스크린샷은 최소화 및 최대화 버튼이 강조 표시된 데이터 미리 보기 창과 데이터 미리 보기 창을 세로로 확장하는 데 사용할 수 있는 핸들 창을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data-preview-maximize-handle.png)
+ **세션 종료**를 사용하여 데이터 미리 보기를 중지합니다. 세션을 중지할 때 새 IAM 역할을 선택하고, 새 세션을 자동으로 시작하거나, 스키마를 유추하거나, AWS Glue 라이브러리를 가져와서 세션을 다시 시작하도록 추가 설정(예: 설정 켜기 또는 끄기)을 설정할 수 있습니다.

## 데이터 미리 보기 사용 시 제한 사항
<a name="data-preview-limits"></a>

데이터 미리 보기를 사용할 때 다음과 같은 제한 사항이 있을 수 있습니다.
+ [데이터 미리 보기(Data preview)] 탭을 처음 선택할 때 IAM 역할을 선택해야 합니다. 이 역할에는 데이터 미리 보기를 만드는 데 필요한 데이터 및 기타 리소스에 액세스하는 데 필요한 권한이 있어야 합니다.
+ IAM 역할을 제공한 후 데이터를 볼 수 있을 때까지 시간이 걸립니다. 데이터가 1GB 미만인 데이터 집합의 경우 최대 1분이 소요될 수 있습니다. 큰 데이터 집합이 있는 경우 파티션을 사용하여 로드 시간을 개선해야 합니다. Amazon S3에서 직접 데이터를 로드하는 것이 성능이 가장 좋습니다.
+ 매우 큰 데이터 집합이 있고 데이터 미리 보기를 위해 데이터를 쿼리하는 데 15분 이상 걸리는 경우 요청 시간이 초과됩니다. 데이터 미리 보기의 유휴 제한 시간은 30분입니다. 이를 완화하려면 데이터 미리 보기 사용에 데이터 세트 크기를 줄이세요.
+ 기본으로 처음 50 열이 데이터 미리 보기 탭에 표시됩니다. 열에 데이터 값이 없는 경우 표시 할 데이터가 없다는 메시지가 나타납니다. 샘플링된 행 수를 늘리거나 다른 열을 선택하여 데이터 값을 볼 수 있습니다.
+ 데이터 미리 보기는 현재 스트리밍 데이터 원본 또는 사용자 정의 커넥터를 사용하는 데이터 원본에 대해 지원되지 않습니다.
+ 한 노드의 오류는 전체 작업에 영향을 줍니다. 데이터 미리 보기에서 한 노드에 오류가 있는 경우 이를 수정할 때까지 모든 노드에 오류가 표시됩니다.
+ 작업의 데이터 원본을 변경하는 경우 해당 데이터 원본의 하위 노드를 새 스키마와 일치하도록 업데이트해야 할 수 있습니다. 예를 들어 열을 수정하는 ApplyMapping 노드가 있고 해당 열이 대체 데이터 원본에 없는 경우 ApplyMapping 변환 노드를 업데이트해야 합니다.
+ SQL 쿼리 변환 노드에 대한 데이터 미리 보기 탭을 볼 때 SQL 쿼리에서 잘못된 필드 이름을 사용하면 데이터 미리 보기 탭에 오류가 표시됩니다.

## 스크립트 코드 생성
<a name="code-gen"></a>

시각적 편집기를 사용하여 작업을 생성하는 경우 자동으로 ETL 코드가 생성됩니다. AWS Glue Studio는 기능적이고 완전한 작업 스크립트를 생성하여 Amazon S3 위치에 저장합니다.

AWS Glue Studio에서는 원본 또는 클래식 버전과 간소화된 최신 버전인 두 가지 형식의 코드를 생성합니다. 기본값으로 새 코드 생성기가 작업 스크립트를 생성하는 데 사용됩니다. **스크립트(Script)** 탭에서 **클래식 스크립트 생성(Generate classic script)** 토글 버튼을 선택하여 클래식 코드 생성기로 작업 스크립트를 생성할 수 있습니다.

새 버전의 생성된 코드에서 유의할 몇 가지 차이점은 다음과 같습니다.
+ 더 이상 스크립트에 큰 주석 블록이 추가되지 않습니다.
+ 시각적 편집기에서 지정한 노드 이름이 코드의 출력 구조에 사용됩니다. 클래스 스크립트에서 출력 구조의 이름이 간단히 `DataSource0`, `DataSource1`, `Transform0`, `Transform1`, `DataSink0`, `DataSink1` 등으로 지정됩니다.
+ 긴 명령이 여러 줄로 분할되므로 전체 명령을 보기 위해 페이지를 스크롤할 필요가 없습니다.

AWS Glue Studio의 새로운 기능을 사용하려면 새 버전의 코드를 생성해야 하며 클래식 코드 스크립트에서는 작동하지 않습니다. 이러한 작업을 실행하려고 하면 업데이트하라는 메시지가 표시됩니다.

# AWS Glue 관리형 변환으로 데이터 변환
<a name="edit-jobs-transforms"></a>

 AWS Glue Studio에서는 두 가지 유형의 변환을 제공합니다.
+  ****AWS Glue 네이티브 변환 - 모든 사용자가 사용할 수 있으며 AWS Glue에서 관리합니다.
+  ****사용자 지정 시각적 변환 - 자체 변환을 업로드하여 AWS Glue Studio에서 사용할 수 있습니다.

## AWS Glue 관리형 데이터 변환 노드
<a name="edit-jobs-transforms-glue-managed"></a>

AWS Glue Studio는 기본 설정 변환 세트를 제공하여 데이터를 사용할 수 있습니다. 데이터는 작업 다이어그램의 한 노드에서 Apache Spark SQL `DataFrame`의 확장인 `DynamicFrame`이라는 데이터 구조의 다른 노드로 전달됩니다.

작업에 대해 미리 채워진 다이어그램에서 데이터 소스와 데이터 대상 노드 사이에는 **스키마 변경** 변환 노드가 있습니다. 이 변환 노드를 구성하여 데이터를 수정하거나 추가 변환을 사용할 수 있습니다.

AWS Glue Studio에서 사용 가능한 기본 제공 변환은 다음과 같습니다.
+ **[ChangeSchema](transforms-configure-applymapping.md)**: 데이터 소스의 데이터 속성 키를 데이터 대상의 데이터 속성 키에 매핑합니다. 키의 이름을 바꾸고 키의 데이터 유형을 수정하고 데이터 집합에서 삭제할 키를 선택할 수 있습니다.
+ **[SelectFields](transforms-configure-select-fields.md)**: 유지할 데이터 속성 키를 선택합니다.
+ **[DropFields](transforms-configure-drop-fields.md)**: 삭제할 데이터 속성 키를 선택합니다.
+ **[RenameField](transforms-configure-rename-field.md)**: 단일 데이터 속성 키의 이름을 바꿉니다.
+ **[Spigot](transforms-configure-spigot.md)**: Amazon S3 버킷에 데이터 샘플을 씁니다.
+ **[Join](transforms-configure-join.md)**: 지정된 데이터 속성 키의 비교 구문을 사용하여 두 데이터 집합을 하나의 데이터 집합으로 조인합니다. 내부, 외부, 왼쪽, 오른쪽, 왼쪽 반 및 왼쪽 안티 조인을 사용할 수 있습니다.
+ **[Union](transforms-configure-union.md)**: 스키마가 동일한 둘 이상의 데이터 소스에서 행을 결합합니다.
+ **[SplitFields](transforms-configure-split-fields.md)**: 데이터 속성 키를 두 개의 `DynamicFrames`로 분할합니다. 출력은 `DynamicFrames`의 컬렉션입니다. 하나는 선택한 데이터 속성 키가 있고 다른 하나는 나머지 데이터 속성 키가 있습니다.
+ **[SelectFromCollection](transforms-selectfromcollection-overview.md)**: `DynamicFrames` 컬렉션에서 `DynamicFrame`을 하나 선택합니다. 출력은 선택된 `DynamicFrame`입니다.
+ **[FillMissingValues](transforms-configure-fmv.md)**: 데이터 집합에서 누락 값이 있는 레코드를 찾고 대체를 통해 결정된 제안 값으로 새 필드를 추가합니다.
+ **[필터(Filter)](transforms-filter.md)**: 필터 조건에 따라 하나의 데이터 집합을 두 개로 분할합니다.
+  **[Null 필드 삭제](transforms-dropnull-fields.md)**: 열의 모든 값이 'null'인 경우 데이터 집합에서 열을 제거합니다.
+  ** [중복 삭제](transforms-drop-duplicates.md)**: 전체 행을 일치시키거나 키를 지정하도록 선택하여 데이터 소스에서 행을 제거합니다.
+ **[SQL](transforms-sql.md)**: SQL 쿼리를 사용하여 데이터를 변환하려면 텍스트 입력 필드에 SparkSQL 코드를 입력합니다. 출력은 단일 `DynamicFrame`입니다.
+  **[집계](transforms-aggregate-fields.md)**: 선택한 필드와 행에서 계산(예: 평균, 합계, 최소, 최대)을 수행하고 새로 계산된 값으로 새 필드를 생성합니다.
+ **[Flatten](transforms-flatten.md)**: 구조체 내부의 필드를 최상위 필드로 추출합니다.
+ **[UUID](transforms-uuid.md)**: 각 행에 범용 고유 식별자가 있는 열을 추가합니다.
+ **[식별자](transforms-identifier.md)**: 각 행에 숫자 식별자가 있는 열을 추가합니다.
+ **[타임스탬프로 변환](transforms-to-timestamp.md)**: 열을 타임스탬프 유형으로 변환합니다.
+ **[타임스탬프 형식 지정](transforms-format-timestamp.md)**: 타임스탬프 열을 형식이 지정된 문자열로 변환합니다.
+ **[조건부 라우터 변환](transforms-conditional-router.md)**: 수신 데이터에 여러 조건을 적용합니다. 수신 데이터의 각 행은 그룹 필터 조건을 기준으로 평가되고 해당 그룹으로 처리됩니다.
+  **[열 연결 변환](transforms-concatenate-columns.md)**: 선택적 스페이서가 있는 다른 열의 값을 사용하여 새 문자열 열을 구축합니다.
+  **[문자열 분할 변환](transforms-split-string.md)**: 정규식을 사용하여 문자열을 토큰 배열로 분할해 분할 방식을 정의합니다.
+  **[배열을 열로 변환](transforms-array-to-columns.md)**: 배열 유형의 열에 있는 일부 또는 모든 요소를 새 열로 추출합니다.
+  **[현재 타임스탬프 추가 변환](transforms-add-current-timestamp.md)**: 데이터가 처리된 시간으로 행을 표시합니다. 이는 감사 목적이나 데이터 파이프라인에서 지연 시간을 추적하는 데 유용합니다.
+  **[행을 열로 피벗 변환](transforms-pivot-rows-to-columns.md)**: 선택한 열에서 고유 값을 교체하여 숫자 열을 집계합니다. 이 열은 새 열이 됩니다. 열을 여러 개 선택하면 값이 연결되어 새 열의 이름이 지정됩니다.
+  **[열을 행으로 피벗 취소 변환](transforms-unpivot-columns-to-rows.md)**: 열을 새 열의 값으로 변환하여 각 고유 값에 대한 행을 생성합니다.
+  **[처리 균형 자동 조절 변환](transforms-autobalance-processing.md)**: 더 나은 성능을 위해 작업자 사이에서 데이터를 재배포합니다. 이는 데이터가 불균형하거나 소스에서 가져온 데이터로 인해 충분한 병렬 처리가 불가능한 경우에 유용합니다.
+  **[파생 열 변환](transforms-derived-column.md)**: 상수 및 리터럴뿐만 아니라 데이터의 다른 열을 사용할 수 있는 수학 공식 또는 SQL 표현식을 기반으로 새 열을 정의합니다.
+  **[조회 변환](transforms-lookup.md)**: 키가 데이터에 정의된 조회 열과 일치하는 경우 정의된 카탈로그 테이블의 열을 추가합니다.
+  **[배열 또는 맵을 행으로 분해 변환](transforms-explode-array.md)**: 중첩된 구조에서 조작하기 쉬운 개별 행으로 값을 추출합니다.
+  **[레코드 일치 변환](transforms-record-matching.md)**: 기존 레코드 일치 기계 학습 데이터 분류 변환을 간접 호출합니다.
+  **[null 행 제거 변환](transforms-remove-null-rows.md)** 제거: 모든 열이 null이거나 비어 있는 행을 데이터세트에서 제거합니다.
+  **[JSON 열 구문 분석 변환](transforms-parse-json-column.md)**: JSON 데이터를 포함하는 문자열 열을 구문 분석하고 JSON이 객체인지 또는 배열인지에 따라 각각 해당 문자열 열을 구문 또는 배열 열로 변환합니다.
+  **[JSON 경로 추출 변환](transforms-extract-json-path.md)**: JSON 문자열 열에서 새 열을 추출합니다.
+  **[정규식에서 문자열 조각 추출](transforms-regex-extractor.md)**: 정규식을 사용하여 문자열 조각을 추출하고 문자열 조각에서 새 열을 생성하거나 정규식 그룹을 사용하는 경우 여러 열을 생성합니다.
+ **[사용자 지정 변환(Custom transform)](transforms-custom.md)**: 사용자 지정 변환을 사용하려면 텍스트 입력 필드에 코드를 입력합니다. 출력은 `DynamicFrames`의 컬렉션입니다.

# AWS Glue Studio에서 데이터 준비 레시피 사용
<a name="glue-studio-data-preparation"></a>

 **데이터 준비 레시피** 변환을 사용하면 대화형 그리드 스타일 작성 인터페이스를 사용하여 처음부터 데이터 준비 레시피를 작성할 수 있습니다. 또한 기존 AWS Glue DataBrew 레시피를 가져온 다음 AWS Glue Studio에서 편집할 수 있습니다.

 **데이터 준비 레시피** 노드는 리소스 패널에서 사용할 수 있습니다. **데이터 준비 레시피** 노드를 시각적 워크플로의 다른 노드 (데이터 소스 노드이거나 다른 변환 노드)에 연결할 수 있습니다. AWS Glue DataBrew 레시피와 버전을 선택하면 레시피에 적용된 단계가 노드 속성 탭에 표시됩니다.

## 사전 조건
<a name="glue-studio-databrew-prerequisites"></a>
+  AWS Glue DataBrew 레시피를 가져오는 경우 [AWS Glue Studio에서 AWS Glue DataBrew 레시피 가져오기](glue-studio-data-preparation-import-recipe.md)에 설명된 대로 필요한 IAM 권한이 있어야 합니다.
+  데이터 미리 보기 세션이 생성되어 있어야 합니다.

## 제한 사항
<a name="glue-studio-databrew-limitations"></a>
+  AWS Glue DataBrew 레시피는 [상용 DataBrew 리전](https://docs.aws.amazon.com/general/latest/gr/databrew.html)에서만 지원됩니다.
+  AWS Glue에서 모든 AWS Glue DataBrew 레시피가 지원되는 것은 아닙니다. 일부 레시피는 AWS Glue Studio에서 실행할 수 없습니다.
  +  `UNION` 및 `JOIN` 변환이 포함된 레시피는 지원되지 않습니다. 대신, AWS Glue Studio에는 **데이터 준비 레시피 노드** 이전 또는 이후에 사용할 수 있는 '조인' 및 '집합' 변환 노드가 이미 있습니다.
+  **데이터 준비 레시피** 노드는 AWS Glue 버전 4.0 이상 작업에 대해 지원됩니다. 이 버전은 **데이터 준비 레시피** 노드가 작업에 추가된 후에 자동으로 선택됩니다.
+  **데이터 준비 레시피** 노드에는 Python이 필요합니다. **데이터 준비 레시피** 노드가 작업에 추가될 때 자동으로 설정됩니다.
+  시각적 그래프에 새 **데이터 준비 레시피** 노드를 추가하면 올바른 라이브러리로 데이터 미리 보기 세션을 자동으로 재시작하여 **데이터 준비 레시피** 노드를 사용할 수 있습니다.
+  `GROUP_BY`, `PIVOT`, `UNPIVOT` 및 `TRANSPOSE` 변환은 **데이터 준비 레시피** 노드에서 가져오기 또는 편집이 지원되지 않습니다.

## 기타 기능
<a name="glue-studio-data-preparation-recipe-transform-features"></a>

 **데이터 준비 레시피** 변환을 선택하면 **레시피 작성**을 선택한 후 추가 작업을 수행할 수 있습니다.
+  단계 추가 - 필요에 따라 단계 추가 아이콘을 선택하여 레시피에 단계를 추가하거나, 작업을 선택하여 미리 보기 창의 도구 모음을 사용할 수 있습니다.  
![\[이 스크린샷은 레시피 추가 아이콘을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/add-recipe-icon.png)  
![\[이 스크린샷은 레시피 추가 아이콘을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/author-recipe-toolbar.png)
+  레시피 가져오기 - **더 보기**를 선택한 다음 **레시피 가져오기**를 선택하여 AWS Glue Studio 작업에 사용합니다.  
![\[이 스크린샷은 더 보기 아이콘을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data-preparation-recipe-node-more-icon.png)  
![\[이 스크린샷은 더 보기 아이콘을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data-preparation-recipe-node-more-features.png)
+  YAML로 다운로드 - **더 보기**를 선택한 다음 **YAML로 다운로드**를 선택하여 레시피를 다운로드하고 AWS Glue Studio 외부에 저장합니다.
+  JSON으로 다운로드 - **더 보기**를 선택한 다음 **JSON으로 다운로드**를 선택하여 레시피를 다운로드하고 AWS Glue Studio 외부에 저장합니다.
+  레시피 단계 실행 취소 및 재실행 - 그리드의 데이터를 사용할 때 미리 보기 창에서 레시피 단계를 실행 취소하고 다시 실행할 수 있습니다.  
![\[이 스크린샷은 더 보기 아이콘을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/author-recipe-toolbar-undo-redo.png)

# 시각적 ETL AWS Glue 작업에서 데이터 준비 레시피 작성 및 실행
<a name="glue-studio-data-preparation-recipe-transform-tutorial"></a>

 이 시나리오에서는 DataBrew에서 먼저 만들지 않고도 데이터 준비 레시피를 작성할 수 있습니다. 레시피 작성을 시작하려면 먼저 다음을 수행해야 합니다.
+  활성 데이터 미리 보기 세션을 실행합니다. 데이터 미리 보기 세션이 준비되면 **레시피 작성**이 활성화되고 레시피 작성 또는 편집을 시작할 수 있습니다.  
![\[이 스크린샷은 데이터 미리 보기 세션이 완료된 것을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data-preparation-recipe-data-preview-complete.png)
+  **Glue 라이브러리 자동 가져오기** 토글이 활성화되어 있는지 확인합니다.  
![\[스크린샷은 Glue 라이브러리 자동 가져오기 옵션이 켜져 있는 것을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data-preparation-recipe-automatically-import-glue-libraries.png)

   데이터 미리 보기 패널에서 톱니바퀴 아이콘을 선택하여 이 작업을 수행할 수 있습니다.  
![\[스크린샷은 Glue 라이브러리 자동 가져오기 옵션이 켜져 있는 것을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data-preview-preferences.png)

**AWS Glue Studio에서 데이터 준비 레시피 노드 작성:**

1.  **데이터 준비 레시피** 변환을 작업 캔버스에 추가합니다. 변환은 데이터 소스 노드 상위 항목에 연결되어야 합니다. **데이터 준비 레시피** 노드를 추가하면 노드가 적절한 라이브러리와 함께 다시 시작되고 데이터 프레임이 준비되는 것을 볼 수 있습니다.  
![\[이 스크린샷은 데이터 준비 레시피를 추가한 후의 데이터 프레임 로드 과정을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data-preparation-preparing-dataframe.png)

1.  데이터 미리 보기 세션이 준비되면 이전 단계가 적용된 데이터가 화면 하단에 표시됩니다.

1.  **레시피 작성**을 선택합니다. 이렇게 하면 AWS Glue Studio에서 새 레시피를 시작할 수 있습니다.  
![\[이 스크린샷은 이름 및 노드 상위 항목 필드와 레시피 작성 옵션이 있는 변환 패널을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data-preparation-recipe-transform-tab-new.png)

1.  작업 캔버스 오른쪽에 있는 **변환** 패널에서 데이터 준비 레시피의 이름을 입력합니다.

1.  왼쪽의 캔버스는 데이터의 그리드 보기로 대체됩니다. 오른쪽의 **변환** 패널이 변경되어 레시피 단계가 표시됩니다. **단계 추가**를 선택하여 레시피에 첫 번째 단계를 추가합니다.  
![\[이 스크린샷은 단계 추가를 선택한 후의 변환 패널을 보여줍니다. 열을 선택하면 옵션이 동적으로 변경됩니다. 정렬하고, 열에 대한 작업을 수행하고, 값을 필터링할 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/author-recipe-preview-data-transform-panel.png)

1.  **변환** 패널에서 정렬하고, 열에 대한 작업을 수행하고, 값을 필터링합니다. 예를 들어 **열 이름 변경**을 선택합니다.  
![\[이 스크린샷은 단계 추가를 선택한 후의 변환 패널을 보여줍니다. 열을 선택하면 옵션이 동적으로 변경됩니다. 정렬하고, 열에 대한 작업을 수행하고, 값을 필터링할 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/author-recipe-add-step.png)

1.  오른쪽의 변환 패널에서 열 이름 변경 옵션을 사용하여 이름을 변경할 소스 열을 선택하고 새 열 이름을 입력할 수 있습니다. 완료하면 **적용**을 선택합니다.

    각 단계를 미리 보고, 단계를 취소하고, 단계를 재정렬하고, 필터, 정렬, 분할, 병합 등과 같은 작업 아이콘을 사용할 수 있습니다. 데이터 그리드에서 작업을 수행하면 변환 패널의 레시피에 단계가 추가됩니다.  
![\[이 스크린샷은 도구 모음이 강조 표시된 데이터 미리 보기 그리드를 보여줍니다. 원하는 도구를 사용하여 작업을 적용할 수 있으며, 해당 작업은 오른쪽 변환 패널의 레시피에 추가됩니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/author-recipe-preview-data-grid.png)

    변경이 필요한 경우 미리 보기 창에서 각 단계의 결과를 미리 보고, 단계를 실행 취소하고, 단계를 재정렬하여 변경할 수 있습니다. 예: 
   +  단계 실행 취소/다시 실행 – **실행 취소** 아이콘을 선택하여 단계를 실행 취소합니다. **다시 실행** 아이콘을 선택하면 단계를 반복할 수 있습니다.  
![\[이 스크린샷은 더 보기 아이콘을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/author-recipe-toolbar-undo-redo.png)
   +  단계 순서 변경 단계 - 단계 순서를 변경하면 AWS Glue Studio에서 각 단계를 검증하고 단계가 유효하지 않은지 알려줍니다.

1.  단계를 적용하면 변환 패널에 레시피의 모든 단계가 표시됩니다. 모든 단계를 지우고 다시 시작하고, 추가 아이콘을 선택하여 단계를 더 추가하거나, **레시피 작성 완료**를 선택할 수 있습니다.  
![\[이 스크린샷은 레시피에 단계가 추가된 변환 패널을 보여줍니다. 완료되면 레시피 작성 완료를 선택하거나 추가 아이콘을 선택하여 레시피에 단계를 더 추가합니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/author-recipe-done-authoring-recipe.png)

1.  화면 오른쪽 상단에서 **저장**을 선택합니다. 작업을 저장할 때까지 레시피 단계는 저장되지 않습니다.

# AWS Glue Studio에서 AWS Glue DataBrew 레시피 가져오기
<a name="glue-studio-data-preparation-import-recipe"></a>

 AWS Glue DataBrew에서 레시피는 데이터 변환 단계 세트입니다. AWS Glue DataBrew 레시피에서는 이미 읽은 데이터를 변환하는 방법을 규정하지만, 데이터를 읽는 위치와 방법, 그리고 데이터를 쓰는 방법과 위치에 대해서는 설명하지 않습니다. 레시피는 AWS Glue Studio의 소스 및 대상 노드에서 구성됩니다. 레시피에 대한 자세한 내용은 [Creating and using AWS Glue DataBrew recipes](https://docs.aws.amazon.com/databrew/latest/dg/recipes.html)를 참조하세요.

 AWS Glue Studio에서 AWS Glue DataBrew 레시피를 사용하려면 먼저 AWS Glue DataBrew에서 레시피를 생성합니다. 사용할 레시피가 이미 있으면 이 단계를 건너뛸 수 있습니다.

## AWS Glue DataBrew에 대한 IAM 권한
<a name="glue-studio-databrew-permissions"></a>

 이 주제에서는 IAM 관리자가 데이터 준비 레시피 변환에 대한 AWS Identity and Access Management(IAM) 정책에서 사용할 수 있는 작업과 리소스를 이해하는 데 도움이 되는 정보를 제공합니다.

 AWS Glue에서 보안에 대한 자세한 내용은 [액세스 관리](https://docs.aws.amazon.com/glue/latest/dg/security.html)를 참조하세요.

**참고**  
 다음 표에는 기존 AWS Glue DataBrew 레시피를 가져올 때 사용자에게 필요한 권한이 나와 있습니다.


**데이터 준비 레시피 변환 작업**  

| 작업 | 설명 | 
| --- | --- | 
| databrew:ListRecipes | AWS Glue DataBrew 레시피를 검색할 수 있는 권한을 부여합니다. | 
| databrew:ListRecipeVersions | AWS Glue DataBrew 레시피 버전을 검색할 수 있는 권한을 부여합니다. | 
| databrew:DescribeRecipe | AWS Glue DataBrew 레시피 설명을 검색할 수 있는 권한을 부여합니다. | 



 이 기능에 액세스하는 데 사용하는 역할에는 여러 AWS Glue DataBrew 작업을 허용하는 정책이 있어야 합니다. 필요한 작업이 포함된 `AWSGlueConsoleFullAccess` 정책을 사용하거나 역할에 다음 인라인 정책을 추가하여 이를 달성할 수 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "databrew:ListRecipes",
        "databrew:ListRecipeVersions",
        "databrew:DescribeRecipe"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------



 데이터 준비 레시피 변환을 사용하려면 권한 정책에 `IAM:PassRole` 작업을 추가해야 합니다.


**필요한 추가 권한**  

| 작업 | 설명 | 
| --- | --- | 
| iam:PassRole | 사용자가 승인된 역할을 전달할 수 있도록 IAM에 권한을 부여합니다. | 

이 권한이 없으면 다음과 같은 오류가 발생합니다.

```
"errorCode": "AccessDenied"
"errorMessage": "User: arn:aws:sts::account_id:assumed-role/AWSGlueServiceRole is not 
authorized to perform: iam:PassRole on resource: arn:aws:iam::account_id:role/service-role/AWSGlueServiceRole 
because no identity-based policy allows the iam:PassRole action"
```



## AWS Glue DataBrew 레시피 가져오기
<a name="glue-studio-databrew-import-steps"></a>

**AWS Glue DataBrew 레시피를 가져와 AWS Glue Studio에서 사용하기:**

 기존 **데이터 준비 레시피** 노드가 있고 AWS Glue Studio에서 레시피 단계를 직접 편집하려면 AWS Glue Studio 작업으로 레시피 단계를 가져와야 합니다.

1.  AWS Glue Studio에서 데이터 소스와 함께 AWS Glue 작업을 시작합니다.

1.  **데이터 준비 레시피** 노드를 작업 캔버스에 추가합니다.  
![\[스크린샷에서는 선택할 수 있는 데이터 준비 레시피가 있는 노드 추가 모달을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/glue-add-node-data-preparation-recipe.png)

1.  변환 패널에 레시피의 이름을 입력합니다.

1.  캔버스에서 사용 가능한 노드를 드롭다운 목록에서 선택하여 하나 이상의 상위 노드를 선택합니다.

1.  **레시피 작성**을 선택합니다. **작성자 레시피**가 회색이면 노드 상위를 선택하고 데이터 미리 보기 세션이 완료될 때까지 사용할 수 없습니다.  
![\[Author Data Preparation Recipe form with name field and node parents selection dropdown.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/glue-author-data-preparation-recipe.png)

1.  DataFrame이 로드되고 소스 데이터에 대한 자세한 정보가 표시됩니다.

    **추가 작업** 아이콘을 선택하고 **레시피 가져오기**를 선택합니다.  
![\[Data preparation interface showing "Build your Recipe" with an "Add step" button.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/glue-dataframe-import-recipe.png)

1.  레시피 가져오기 마법사를 사용하여 단계를 완료합니다. 1단계에서 레시피를 검색하고 선택한 후, **다음**을 선택합니다.  
![\[Import recipe interface showing two recipes, with one selected for import.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/import-recipe-step-1.png)

1.  2단계에서 가져오기 옵션을 선택합니다. 기존 레시피에 새 레시피를 추가하거나 기존 레시피를 덮어쓰도록 선택할 수 있습니다. **다음**을 선택합니다.  
![\[Import recipe interface showing selected recipe, version, and two imported steps.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/import-recipe-step-2.png)

1.  3단계에서 레시피 단계를 검증합니다. AWS Glue DataBrew 레시피를 가져온 후에는 AWS Glue Studio에서 직접 이 레시피를 편집할 수 있습니다.  
![\[Recipe import interface showing two steps and a validation progress indicator.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/import-recipe-step-3.png)  
![\[Import recipe interface showing validated steps for sorting and formatting data.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/import-recipe-step-3-validated-2.png)

1.  이후에는 AWS Glue 작업의 일부로 단계를 가져오게 됩니다. 필요한 경우 **작업 세부 정보** 탭에서 작업 이름 지정 및 할당된 용량 조정과 같은 필요한 구성 변경을 수행합니다. **저장**을 선택하여 작업과 레시피를 저장합니다.
**참고**  
 JOIN, UNION, GROUP\$1BY, PIVOT, UNPIVOT, TRANSPOSE는 레시피 가져오기에 지원되지 않으며, 레시피 작성 모드에서도 사용할 수 없습니다.

1.  필요한 경우 다른 변환 노드를 추가하여 작업 작성을 완료하고 데이터 대상 노드를 추가할 수 있습니다.

    레시피를 가져온 후 단계를 재정렬하면 AWS Glue에서 해당 단계에 대한 검증을 수행합니다. 예를 들어 이름을 변경한 다음 열을 삭제하고, 삭제 단계를 맨 위로 이동한 경우, 이름 변경 단계는 유효하지 않게 됩니다. 이후 단계를 편집하여 검증 오류를 수정할 수 있습니다.

# AWS Glue DataBrew에서 AWS Glue Studio로 마이그레이션
<a name="databrew-migration-to-glue-studio"></a>

 AWS Glue DataBrew에 레시피가 있는 경우 다음 체크리스트를 사용하여 레시피를 AWS Glue Studio로 마이그레이션합니다.


| 다음을 수행하려는 경우… | 수행할 작업 | 
| --- | --- | 
|  사용자가 AWS Glue DataBrew 레시피, 레시피 버전 및 레시피 설명을 검색할 수 있습니다. |  역할이 필요한 작업에 액세스할 수 있도록 허용하는 정책에 IAM 권한을 추가합니다. [AWS Glue DataBrew에 대한 IAM 권한](glue-studio-data-preparation-import-recipe.md#glue-studio-databrew-permissions)을(를) 참조하세요. | 
|  기존 AWS Glue DataBrew 레시피를 AWS Glue Studio로 가져옵니다. |  [AWS Glue DataBrew 레시피 가져오기](glue-studio-data-preparation-import-recipe.md#glue-studio-databrew-import-steps) 섹션의 단계를 따르세요. | 
|  JOIN 및 UNION을 사용하여 레시피를 가져옵니다. |  UNION 및 JOIN 변환이 있는 레시피는 지원되지 않습니다. 데이터 준비 레시피 노드 전후에 AWS Glue Studio에서 조인 및 유니온 변환을 사용합니다. | 

# 스키마 변경을 사용하여 데이터 속성 키 다시 매핑
<a name="transforms-configure-applymapping"></a>

*스키마 변경* 변환은 소스 데이터 속성 키를 대상 데이터에 대해 구성된 원하는 항목으로 다시 매핑합니다. 스키마 변경 변환 노드에서는 다음을 수행할 수 있습니다.
+ 여러 데이터 속성 키의 이름을 변경합니다.
+ 새 데이터 유형이 지원되고 두 데이터 유형 사이에 변환 경로가 있는 경우 데이터 속성 키의 데이터 유형을 변경합니다.
+ 삭제할 데이터 속성 키를 표시하여 데이터 속성 키의 하위 집합을 선택합니다.

필요한 경우 추가 **스키마 변경 노드를 작업 다이어그램에 추가할 수도 있습니다. 예를 들어 추가 데이터 소스를 수정하거나 **조인 변환을 따릅니다.

## 소수 데이터 유형에서 스키마 변경 사용
<a name="transforms-configure-applymapping-decimal-datatype"></a>

 소수 데이터 유형에서 **스키마 변경** 변환을 사용하는 경우 **스키마 변경** 변환은 정밀도를 (10,2)의 기본값으로 수정합니다. 이를 수정하고 사용 사례의 정밀도를 설정하려면 **SQL 쿼리** 변환을 사용하고 열을 특정 정밀도로 캐스팅할 수 있습니다.

 예를 들어 소수 유형의 'DecimalCol'이라는 입력 열이 있고 특정 정밀도가 (18,6)인 'OutputDecimalCol'이라는 출력 열에 다시 매핑하려는 경우 다음을 수행합니다.

1.  **스키마 변경** 변환 후 후속 **SQL 쿼리** 변환을 추가합니다.

1.  **SQL 쿼리** 변환에서 SQL 쿼리를 사용하여 다시 매핑된 열을 원하는 정밀도로 캐스팅합니다. SQL 쿼리는 다음과 같습니다.

   ```
   SELECT col1, col2, CAST(DecimalCol AS DECIMAL(18,6)) AS OutputDecimalCol
   FROM __THIS__
   ```

    위의 SQL 쿼리에서: 
   +  `col1` 및 `col2`는 수정 없이 전달하려는 데이터의 다른 열입니다.
   +  `DecimalCol`은 입력 데이터의 원래 열 이름입니다.
   +  `CAST(DecimalCol AS DECIMAL(18,6))`는 `DecimalCol`을 숫자 18자리 및 소수 6자리의 정밀도인 소수 유형으로 캐스팅합니다.
   +  `AS OutputDecimalCol`은 캐스팅된 열의 이름을 `OutputDecimalCol`으로 바꿉니다.

 **SQL 쿼리** 변환을 사용하면 **스키마 변경** 변환으로 설정된 기본 정밀도를 재정의하고 소수 열을 원하는 정밀도로 명시적으로 캐스팅할 수 있습니다. 이 접근 방식을 사용하면 후속 **SQL 쿼리** 변환을 통해 소수 열의 정밀도 요구 사항을 처리하는 동시에 데이터 이름 변경 및 구조 조정을 위해 **스키마 변경** 변환을 활용할 수 있습니다.

## 작업에 스키마 변경 변환 추가
<a name="transforms-configure-applymapping-add-to-job"></a>

**참고**  
**스키마 변경** 변환은 대소문자를 구분하지 않습니다.

**작업 다이어그램에 스키마 변경 변환 노드를 추가하려면**

1. (선택 사항) 필요한 경우 리소스 패널을 열고 **스키마 변경**을 선택하여 작업 다이어그램에 새 변환을 추가합니다.

1. 노드 속성 패널에서 작업 다이어그램에 노드 이름을 입력합니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. 노드 속성 패널에서 **변환** 탭을 선택합니다.

1. 입력 스키마를 수정합니다.
   + 데이터 속성 키의 이름을 바꾸려면 [**대상 키(Target key)**] 필드에 키의 새 이름을 입력합니다.
   + 데이터 속성 키의 데이터 유형을 변경하려면 [**데이터 유형(Data type)**] 목록에서 키의 새 데이터 유형을 선택합니다.
   + 대상 스키마에서 데이터 속성 키를 제거하려면 해당 키의 [**삭제(Drop)**] 확인란을 선택합니다.

1. (선택 사항) 변환 노드 속성을 구성한 후 노드 세부 정보 패널에서 [**출력 스키마(Output schema)**] 탭을 선택하여 데이터에 대해 수정된 스키마를 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. [**작업 세부 정보(Job details)**] 탭에서 IAM 역할을 지정하지 않은 경우 여기에 IAM 역할을 입력하라는 메시지가 나타납니다.

1. (선택 사항) 노드 속성과 변환 속성을 구성한 후 노드 세부 정보 패널에서 [**데이터 미리 보기(Data preview)**] 탭을 선택하여 수정된 데이터 집합을 미리 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. 이 기능 사용과 관련된 비용이 있으며 IAM 역할을 제공하는 즉시 결제가 시작됩니다.

# 중복 삭제 사용
<a name="transforms-drop-duplicates"></a>

 중복 삭제 변환은 두 가지 옵션을 제공하여 데이터 소스에서 행을 제거합니다. 완전히 동일한 중복 행을 제거하거나 일치시킬 필드를 선택하고 선택한 필드를 기반으로 해당 행만 제거하도록 선택할 수 있습니다.

 예를 들어 이 데이터 세트에는 일부 행에서는 모든 값이 다른 행과 완전히 동일하고, 또 다른 행에서는 값이 같거나 다른 중복 행이 있습니다.


| 열 | 명칭 | 이메일 | Age | State | Note | 
| --- | --- | --- | --- | --- | --- | 
| 1 | Joy | joy@gmail | 33 | NY |  | 
| 2 | Tim | tim@gmail | 45 | OH |  | 
| 3 | Rose | rose@gmail | 23 | NJ |  | 
| 4 | Tim | tim@gmail | 42 | OH |  | 
| 5 | Rose | rose@gmail | 23 | NJ |  | 
| 6 | Tim | tim@gmail | 42 | OH | 이것은 중복된 행이며 4번째 행의 모든 값과 완전히 일치합니다. | 
| 7 | Rose | rose@gmail | 23 | NJ | 이것은 중복된 행이며 5번째 행의 모든 값과 완전히 일치합니다. | 

 전체 행을 일치시키도록 선택하면 6번째 행과 7번째 행이 데이터 세트에서 제거됩니다. 이제 데이터 세트는 다음과 같습니다.


| 열 | 명칭 | 이메일 | Age | State | 
| --- | --- | --- | --- | --- | 
| 1 | Joy | joy@gmail | 33 | NY | 
| 2 | Tim | tim@gmail | 45 | OH | 
| 3 | Rose | rose@gmail | 23 | NJ | 
| 4 | Tim | tim@gmail | 42 | OH | 
| 5 | Rose | rose@gmail | 23 | NJ | 

 키를 지정하기로 선택한 경우 'name' 및 'email'에서 일치하는 행을 제거하도록 선택할 수 있습니다. 이렇게 하면 데이터 세트의 '중복 행'을 더 세밀하게 제어할 수 있습니다. 'name' 및 'email'을 지정하면 이제 데이터 세트는 다음과 같습니다.


| 열 | 명칭 | 이메일 | Age | State | 
| --- | --- | --- | --- | --- | 
| 1 | Joy | joy@gmail | 33 | NY | 
| 2 | Tim | tim@gmail | 45 | OH | 
| 3 | Rose | rose@gmail | 23 | NJ | 



 다음 사항에 유의하세요.
+  중복 행으로 인식하기 위해 값은 대소문자를 구분합니다. 행의 모든 값은 동일한 대소문자를 사용해야 합니다. 이는 선택한 옵션(전체 행 일치 또는 키 지정)에 적용됩니다.
+  모든 값은 문자열로 읽습니다.
+  **중복 삭제** 변환은 Spark dropDuplicates 명령을 활용합니다.
+  **중복 삭제** 변환을 사용하는 경우 첫 번째 행은 유지되고 다른 행은 삭제됩니다.
+  **중복 삭제** 변환은 데이터 프레임의 스키마를 변경하지 않습니다. 키를 지정하도록 선택한 경우 모든 필드가 그 결과로 나타나는 데이터 프레임에서 유지됩니다.

# SelectFields를 사용하여 대부분의 데이터 속성 키 제거
<a name="transforms-configure-select-fields"></a>

*SelectFields* 변환을 사용 사용하여 데이터 집합에서 데이터 속성 키의 하위 집합을 생성할 수 있습니다. 유지하려는 데이터 속성 키를 지정하면 나머지는 데이터 집합에서 제거됩니다.

**참고**  
*SelectFields*는 대/소문자를 구분합니다. 필드를 선택하기 위해 대/소문자를 구분하지 않는 방법이 필요한 경우 *ApplyMapping*을 사용합니다.

**작업 다이어그램에 SelectFields 변환 노드를 추가하려면**

1. (선택 사항) 필요한 경우 리소스 패널을 열고 **SelectFields**를 선택하여 작업 다이어그램에 새 변환을 추가합니다.

1. [**노드 속성(Node properties)**] 탭에서 작업 다이어그램에 노드 이름을 입력합니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. 노드 세부 정보 패널에서 [**변환(Transform)**] 탭을 선택합니다.

1. 머리글 [**SelectFields**] 아래에서 유지하려는 데이터 집합의 데이터 속성 키를 선택합니다. 선택하지 않은 데이터 속성 키는 데이터 집합에서 모두 삭제됩니다.

   열 머리글 [**필드(Field)**] 옆에 있는 확인란을 선택하여 데이터 집합의 모든 데이터 속성 키를 자동으로 선택할 수도 있습니다. 그런 다음 개별 데이터 속성 키를 선택 취소하여 데이터 집합에서 제거할 수 있습니다.

1. (선택 사항) 변환 노드 속성을 구성한 후 노드 세부 정보 패널에서 [**출력 스키마(Output schema)**] 탭을 선택하여 데이터에 대해 수정된 스키마를 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. [**작업 세부 정보(Job details)**] 탭에서 IAM 역할을 지정하지 않은 경우 여기에 IAM 역할을 입력하라는 메시지가 나타납니다.

1. (선택 사항) 노드 속성과 변환 속성을 구성한 후 노드 세부 정보 패널에서 [**데이터 미리 보기(Data preview)**] 탭을 선택하여 수정된 데이터 집합을 미리 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. 이 기능 사용과 관련된 비용이 있으며 IAM 역할을 제공하는 즉시 결제가 시작됩니다.

# DropFields를 사용하여 대부분의 데이터 속성 키 유지
<a name="transforms-configure-drop-fields"></a>

*DropFields* 변환을 사용 사용하여 데이터 집합에서 데이터 속성 키의 하위 집합을 생성할 수 있습니다. 데이터 집합에서 제거하려는 데이터 속성 키를 지정하면 나머지 키는 유지됩니다.

**참고**  
*DropFields* 변환은 대/소문자를 구분합니다. 필드를 선택할 때 대소문자를 구분하지 않는 방법이 필요한 경우 *스키마 변경*을 사용합니다.

**작업 다이어그램에 DropFields 변환 노드를 추가하려면**

1. (선택 사항) 필요한 경우 리소스 패널을 열고 **DropFields**를 선택하여 작업 다이어그램에 새 변환을 추가합니다.

1. [**노드 속성(Node properties)**] 탭에서 작업 다이어그램에 노드 이름을 입력합니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. 노드 세부 정보 패널에서 [**변환(Transform)**] 탭을 선택합니다.

1. 머리글 [**DropFields**] 아래에서 데이터 원본에서 삭제할 데이터 속성 키를 선택합니다.

   열 머리글 [**필드(Field)**] 옆에 있는 확인란을 선택하여 데이터 집합의 모든 데이터 속성 키를 자동으로 선택할 수도 있습니다. 그런 다음 개별 데이터 속성 키를 선택 취소하여 데이터 집합에 보존할 수 있습니다.

1. (선택 사항) 변환 노드 속성을 구성한 후 노드 세부 정보 패널에서 [**출력 스키마(Output schema)**] 탭을 선택하여 데이터에 대해 수정된 스키마를 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. [**작업 세부 정보(Job details)**] 탭에서 IAM 역할을 지정하지 않은 경우 여기에 IAM 역할을 입력하라는 메시지가 나타납니다.

1. (선택 사항) 노드 속성과 변환 속성을 구성한 후 노드 세부 정보 패널에서 [**데이터 미리 보기(Data preview)**] 탭을 선택하여 수정된 데이터 집합을 미리 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. 이 기능 사용과 관련된 비용이 있으며 IAM 역할을 제공하는 즉시 결제가 시작됩니다.

# 데이터 집합에서 필드 이름 바꾸기
<a name="transforms-configure-rename-field"></a>

*RenameField* 변환을 사용하여 데이터 집합의 개별 속성 키 이름을 변경할 수 있습니다.

**참고**  
*RenameField*는 대/소문자를 구분합니다. 대/소문자를 구분하지 않는 변환이 필요한 경우 *ApplyMapping*을 사용합니다.

**작은 정보**  
*스키마 변경* 변환을 사용하는 경우 단일 변환으로 데이터 세트에 있는 여러 데이터 속성 키의 이름을 바꿀 수 있습니다.

**작업 다이어그램에 RenameField 변환 노드를 추가하려면**

1. (선택 사항) 필요한 경우 리소스 패널을 열고 **RenameField**를 선택하여 작업 다이어그램에 새 변환을 추가합니다.

1. [**노드 속성(Node properties)**] 탭에서 작업 다이어그램에 노드 이름을 입력합니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. [**변환(Transform)**] 탭을 선택합니다.

1. 머리글 [**데이터 필드(Data field)**] 아래에서 소스 데이터의 속성 키를 선택한 다음 [**새 필드 이름(New field name)**] 필드에 새 이름을 입력합니다.

1. (선택 사항) 변환 노드 속성을 구성한 후 노드 세부 정보 패널에서 [**출력 스키마(Output schema)**] 탭을 선택하여 데이터에 대해 수정된 스키마를 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. [**작업 세부 정보(Job details)**] 탭에서 IAM 역할을 지정하지 않은 경우 여기에 IAM 역할을 입력하라는 메시지가 나타납니다.

1. (선택 사항) 노드 속성과 변환 속성을 구성한 후 노드 세부 정보 패널에서 [**데이터 미리 보기(Data preview)**] 탭을 선택하여 수정된 데이터 집합을 미리 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. 이 기능 사용과 관련된 비용이 있으며 IAM 역할을 제공하는 즉시 결제가 시작됩니다.

# Spigot을 사용하여 데이터 집합 샘플링
<a name="transforms-configure-spigot"></a>

작업에서 수행한 변환을 테스트하기 위해 데이터 샘플을 가져와 변환이 의도한 대로 작동하는지 확인할 수 있습니다. *Spigot* 변환은 데이터 집합의 레코드 하위 집합을 Amazon S3 버킷의 JSON 파일에 기록합니다. 데이터 샘플링 방법은 파일 시작 부분의 특정 레코드 수 또는 레코드 선택에 사용되는 확률 요소일 수 있습니다.

**작업 다이어그램에 Spigot 변환 노드를 추가하려면**

1. (선택 사항) 필요한 경우 리소스 패널을 열고 **Spigot**을 선택하여 작업 다이어그램에 새 변환을 추가합니다.

1. [**노드 속성(Node properties)**] 탭에서 작업 다이어그램에 노드 이름을 입력합니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. 노드 세부 정보 패널에서 [**변환(Transform)**] 탭을 선택합니다.

1. Amazon S3 경로를 입력하거나 [**S3 찾아보기(Browse S3)**]를 선택하여 Amazon S3에서 위치를 선택합니다. 작업이 데이터 샘플이 포함된 JSON 파일을 작성하는 위치입니다.

1. 샘플링 방법에 대한 정보를 입력합니다. 데이터 집합의 시작부터 쓸 [**레코드 수(Number of records)**]에 대한 값과 지정된 레코드를 선택하는 [**확률 임계값(Probability threshold)**](최대값이 1인 십진수 값으로 입력됨)을 지정할 수 있습니다.

   예를 들어 데이터 집합에서 처음 50개의 레코드를 쓰려면 [**레코드 수(Number of records)**]를 50으로 설정하고 [**확률 임계값(Probability threshold)**]을 1(100%)로 설정합니다.

# 데이터 집합 조인
<a name="transforms-configure-join"></a>

*Join* 변환을 사용하면 2개의 데이터 집합을 하나로 결합 할 수 있습니다. 비교할 각 데이터 집합의 스키마에 키 이름을 지정합니다. 출력 `DynamicFrame`에는 키가 조인 조건을 충족하는 행이 포함됩니다. 조인 조건을 충족하는 각 데이터 집합의 행은 두 데이터 집합에서 찾은 모든 열을 포함하는 출력 `DynamicFrame`의 단일 행으로 결합됩니다.

**작업 다이어그램에 Join 변환 노드를 추가하려면**

1. 사용 가능한 데이터 원본이 하나만 있는 경우 작업 다이어그램에 새 데이터 원본 노드를 추가해야 합니다.

1. 조인을 위한 소스 노드 중 하나를 선택합니다. 리소스 패널을 열고 **Join**을 선택하여 작업 다이어그램에 새 변환을 추가합니다.

1. [**노드 속성(Node properties)**] 탭에서 작업 다이어그램에 노드 이름을 입력합니다.

1. 조인에 대한 입력을 제공하는 2개의 데이터 집합이 있도록 [**노드 속성(Node properties)**] 탭의 머리글 [**노드 상위 항목(Node parents)**] 아래에서 상위 노드를 추가합니다. 상위 항목은 데이터 원본 노드 또는 변환 노드일 수 있습니다.
**참고**  
조인은 2개의 상위 노드만 가질 수 있습니다.

1. [**변환(Transform)**] 탭을 선택합니다.

   충돌하는 키 이름이 있다는 메시지가 나타나면 다음 중 하나를 수행할 수 있습니다.
   + 작업 다이어그램에 *ApplyMapping* 변환 노드를 자동으로 추가하려면 [**해결(Resolve it)**]을 선택합니다. ApplyMapping 노드는 다른 데이터 집합의 키와 이름이 같은 데이터 집합의 모든 키에 접두사를 추가합니다. 예를 들어 기본값인 **right**를 사용하면 왼쪽 데이터 집합의 키와 이름이 같은 오른쪽 데이터 집합의 모든 키 이름이 `(right)key name`으로 바뀝니다.
   + 충돌하는 키를 제거하거나 이름을 바꾸려면 작업 다이어그램 앞부분에 변환 노드를 수동으로 추가합니다.

1. [**조인 유형(Join type)**] 목록에서 조인 유형을 선택합니다.
   + [**내부 조인(Inner join)**]: 조인 조건에 따라 모든 일치 항목에 대해 두 데이터 집합의 열이 있는 행을 반환합니다. 조인 조건을 만족하지 않는 행은 반환되지 않습니다.
   + [**왼쪽 조인(Left join)**]: 왼쪽 데이터 집합의 모든 행과 조인 조건을 충족하는 오른쪽 데이터 집합의 행만.
   + [**오른쪽 조인(Right join)**]: 오른쪽 데이터 집합의 모든 행과 조인 조건을 충족하는 왼쪽 데이터 집합의 행만.
   + [**외부 조인(Outer join)**]: 두 데이터 집합의 모든 행.
   + [**왼쪽 세미 조인(Left semi join)**]: 조인 조건에 따라 오른쪽 데이터 집합과 일치하는 왼쪽 데이터 집합의 모든 행.
   + [**왼쪽 안티 조인(Left semi join)**]: 조인 조건에 따라 오른쪽 데이터 집합과 일치하지 않는 왼쪽 데이터 집합의 모든 행.

1. [**변환(Transform)**] 탭의 [**조인 조건(Join conditions)**] 아래에서 [**조건 추가(Add condition)**]를 선택합니다. 각 데이터 집합에서 비교할 속성 키를 선택합니다. 비교 연산자의 왼쪽에 있는 속성 키를 왼쪽 데이터 집합이라고 하고 오른쪽에 있는 속성 키를 오른쪽 데이터 집합이라고 합니다.

   더 복잡한 조인 조건의 경우 [**조건 추가(Add condition)**]를 두 번 이상 선택하여 일치하는 키를 추가할 수 있습니다. 실수로 조건을 추가한 경우 삭제 아이콘(![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/delete-icon-black.png))을 클릭하여 제거할 수 있습니다.

1. (선택 사항) 변환 노드 속성을 구성한 후 노드 세부 정보 패널에서 [**출력 스키마(Output schema)**] 탭을 선택하여 데이터에 대해 수정된 스키마를 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. [**작업 세부 정보(Job details)**] 탭에서 IAM 역할을 지정하지 않은 경우 여기에 IAM 역할을 입력하라는 메시지가 나타납니다.

1. (선택 사항) 노드 속성과 변환 속성을 구성한 후 노드 세부 정보 패널에서 [**데이터 미리 보기(Data preview)**] 탭을 선택하여 수정된 데이터 집합을 미리 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. 이 기능 사용과 관련된 비용이 있으며 IAM 역할을 제공하는 즉시 결제가 시작됩니다.

조인 출력 스키마의 예를 들어 다음 속성 키를 사용하여 두 데이터 집합 간의 조인을 고려합니다.

```
Left: {id, dept, hire_date, salary, employment_status}
Right: {id, first_name, last_name, hire_date, title}
```

조인은 `=` 비교 연산자를 사용하여 `id` 및 `hire_date` 키에서 일치하도록 구성됩니다.

두 데이터 집합 모두 `id` 및 `hire_date` 키를 포함하므로 [**해결(Resolve it)**]을 선택하여 올바른 데이터 집합의 키에 접두사 **right**를 자동으로 추가합니다.

출력 스키마의 키는 다음과 같습니다.

```
{id, dept, hire_date, salary, employment_status, 
(right)id, first_name, last_name, (right)hire_date, title}
```

# 집합을 사용하여 행 결합
<a name="transforms-configure-union"></a>

 스키마가 같은 둘 이상의 데이터 소스에서 행을 결합하려는 경우 집합(Union) 변환 노드를 사용합니다.

 집합 변환에는 두 가지 유형이 있습니다.

1. 모두 - 모두를 적용하면 그 결과로 나타나는 집합에서 중복된 행을 제거하지 않습니다.

1. 고유 - 고유를 적용하면 그 결과로 나타나는 집합에서 중복된 행을 제거합니다.

 **집합과 조인 비교** 

 집합을 사용하여 행을 결합합니다. 조인을 사용하여 열을 결합합니다.

**시각적 ETL 캔버스에서 집합 변환 사용**

1.  하나 이상의 데이터 소스를 추가하여 집합 변환을 수행합니다. 데이터 소스를 추가하려면 리소스 패널을 열고 소스 탭에서 데이터 소스를 선택합니다. 집합 변환을 사용하기 전에 집합과 관련된 모든 데이터 소스의 스키마와 구조가 동일한지 확인해야 합니다.

1.  집합 변환을 사용하여 결합하려는 데이터 소스가 둘 이상 있는 경우 집합 변환을 캔버스에 추가하여 집합 변환을 생성합니다. 캔버스에서 리소스 패널을 열고 '집합'을 검색합니다. 리소스 패널에서 변환 탭을 선택하고 집합 변환을 찾을 때까지 아래로 스크롤한 후 **집합**을 선택할 수도 있습니다.

1. 작업 캔버스에서 집합 노드를 선택합니다. 노드 속성 창에서 집합 변환에 연결할 상위 노드를 선택합니다.

1. AWS Glue에서는 집합 변환을 모든 데이터 소스에 적용할 수 있는지 확인하기 위해 호환성을 검사합니다. 데이터 소스의 스키마가 동일하면 작업이 허용됩니다. 데이터 소스의 스키마가 같지 않으면 유효하지 않음을 나타내는 오류 메시지가 표시됩니다. 'The input schemas of this union are not the same Consider using ApplyMapping to match the schemas.' 이 문제를 해결하려면 **ApplyMapping** 사용을 선택합니다.

1. 집합 유형을 선택합니다.

   1. 모두 - 기본적으로 모두 집합 유형이 선택됩니다. 이 경우 데이터 조합에 중복된 행이 있을 경우 행이 중복됩니다.

   1. 고유 - 그 결과로 나타나는 데이터 조합에서 중복된 행을 제거하려면 고유를 선택합니다.

# SplitFields를 사용하여 데이터 집합을 2개로 분할
<a name="transforms-configure-split-fields"></a>

*SplitFields* 변환을 사용하면 입력 데이터 집합에서 일부 데이터 속성 키를 선택하여 하나의 데이터 집합에 넣고 선택되지 않은 키를 별도의 데이터 집합에 넣을 수 있습니다. 이 변환의 출력은 `DynamicFrames`의 컬렉션입니다.

**참고**  
출력을 대상 위치로 보내기 전에 *SelectFromCollection* 변환을 사용하여 `DynamicFrames` 컬렉션을 단일 `DynamicFrame`으로 변환해야 합니다.

*SplitFields*는 대/소문자를 구분합니다. 대/소문자를 구분하지 않는 속성 키 이름이 필요한 경우 *ApplyMapping* 변환을 상위 노드로 추가합니다.

**작업 다이어그램에 SplitFields 변환 노드를 추가하려면**

1. (선택 사항) 필요한 경우 리소스 패널을 열고 **SplitFields**를 선택하여 작업 다이어그램에 새 변환을 추가합니다.

1. [**노드 속성(Node properties)**] 탭에서 작업 다이어그램에 노드 이름을 입력합니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. [**변환(Transform)**] 탭을 선택합니다.

1. 첫 번째 데이터 집합에 넣을 속성 키를 선택합니다. 선택하지 않는 키는 두 번째 데이터 집합에 배치됩니다.

1. (선택 사항) 변환 노드 속성을 구성한 후 노드 세부 정보 패널에서 [**출력 스키마(Output schema)**] 탭을 선택하여 데이터에 대해 수정된 스키마를 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. [**작업 세부 정보(Job details)**] 탭에서 IAM 역할을 지정하지 않은 경우 여기에 IAM 역할을 입력하라는 메시지가 나타납니다.

1. (선택 사항) 노드 속성과 변환 속성을 구성한 후 노드 세부 정보 패널에서 [**데이터 미리 보기(Data preview)**] 탭을 선택하여 수정된 데이터 집합을 미리 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. 이 기능 사용과 관련된 비용이 있으며 IAM 역할을 제공하는 즉시 결제가 시작됩니다.

1. 결과 데이터 집합을 처리하도록 *SelectFromCollection* 변환 노드를 구성합니다.

# *SelectFromCollection* 변환의 개요
<a name="transforms-selectfromcollection-overview"></a>

특정 변환에는 단일 데이터 집합 대신 여러 데이터 집합이 출력으로 포함됩니다(예: *SplitFields*). *SelectFromCollection* 변환은 데이터 집합(`DynamicFrames`의 배열)에서 하나의 데이터 집합(`DynamicFrame`)을 선택합니다. 변환에 대한 출력은 선택된 `DynamicFrame`입니다.

다음과 같이 `DynamicFrames`의 컬렉션을 생성하는 변환을 사용한 후에는 이 변환을 사용해야 합니다.
+ 사용자 정의 코드 변환
+ *SplitFields*

이러한 변환 후 작업 다이어그램에 *SelectFromCollection* 변환 노드를 추가하지 않으면 작업에 대한 오류가 발생합니다.

이 변환의 상위 노드는 `DynamicFrames`의 컬렉션을 반환하는 노드여야 합니다. *Join* 변환과 같이 단일 `DynamicFrame`을 반환하는 이 변환 노드의 상위 항목을 선택하면 작업에서 오류를 반환합니다.

마찬가지로, 단일 `DynamicFrame`을 입력으로 예상하는 변환의 상위 항목으로 작업 다이어그램에서 *SelectFromCollection* 노드를 사용하는 경우 작업에서 오류를 반환합니다.

![\[스크린샷은 노드 세부 정보 패널의 노드 속성 탭에 있는 노드 상위 항목 필드를 보여줍니다. 선택한 노드 항목은 SplitFields이고 "상위 노드인 필드 분할은 컬렉션을 출력하지만 필드 삭제 노드는 컬렉션을 허용하지 않습니다.(Parent node Split Fields outputs a collection, but node Drop Fields does not accept a collection.)"라는 오류 메시지가 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/screenshot-edit-splitfields-wrong-parent.png)


# SelectFromCollection을 사용하여 유지할 데이터 집합 선택
<a name="transforms-configure-select-collection"></a>

*SelectFromCollection* 변환을 사용하여 `DynamicFrames`의 컬렉션을 단일 `DynamicFrame`으로 변환합니다.

**작업 다이어그램에 SelectFromCollection 변환 노드를 추가하려면**

1. (선택 사항) 필요한 경우 리소스 패널을 열고 **SelectFromCollection**을 선택하여 작업 다이어그램에 새 변환을 추가합니다.

1. [**노드 속성(Node properties)**] 탭에서 작업 다이어그램에 노드 이름을 입력합니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. [**변환(Transform)**] 탭을 선택합니다.

1. [**프레임 인덱스(Frame index)**] 머리글 아래에서 `DynamicFrames`의 컬렉션에서 선택하려는 `DynamicFrame`에 해당하는 배열 인덱스 번호를 선택합니다.

   예를 들어 이 변환의 상위 노드가 *SplitFields* 변환인 경우 해당 노드의 [**출력 스키마(Output schema)**] 탭에서 각 `DynamicFrame`에 대한 스키마를 볼 수 있습니다. [**출력 2(Output 2)**]의 스키마와 연결된 `DynamicFrame`을 유지하려면 목록의 두 번째 값인 [**프레임 인덱스(Frame index)**] 값으로 **1**을 선택합니다.

   선택하는 `DynamicFrame`만 출력에 포함됩니다.

1. (선택 사항) 변환 노드 속성을 구성한 후 노드 세부 정보 패널에서 [**출력 스키마(Output schema)**] 탭을 선택하여 데이터에 대해 수정된 스키마를 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. [**작업 세부 정보(Job details)**] 탭에서 IAM 역할을 지정하지 않은 경우 여기에 IAM 역할을 입력하라는 메시지가 나타납니다.

1. (선택 사항) 노드 속성과 변환 속성을 구성한 후 노드 세부 정보 패널에서 [**데이터 미리 보기(Data preview)**] 탭을 선택하여 수정된 데이터 집합을 미리 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. 이 기능 사용과 관련된 비용이 있으며 IAM 역할을 제공하는 즉시 결제가 시작됩니다.

# 데이터 집합에서 누락된 값 찾기 및 채우기
<a name="transforms-configure-fmv"></a>

*FillMissingValues* 변환을 사용하여 데이터 집합에서 누락된 값이 있는 레코드를 찾고 대치에 의해 결정된 값으로 새 필드를 추가할 수 있습니다. 입력 데이터 집합은 누락 값을 결정하는 기계 학습 모델을 훈련하는 데 사용됩니다. 증분 데이터 집합을 사용하는 경우 각 증분 집합은 기계 학습 모델의 훈련 데이터로 사용되므로 결과가 정확하지 않을 수 있습니다.

**작업 다이어그램에서 FillMissingValues 변환 노드를 사용하려면**

1. (선택 사항) 필요한 경우 리소스 패널을 열고 **FillMissingValues**를 선택하여 작업 다이어그램에 새 변환을 추가합니다.

1. [**노드 속성(Node properties)**] 탭에서 작업 다이어그램에 노드 이름을 입력합니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. [**변환(Transform)**] 탭을 선택합니다.

1. [**데이터 필드(Data field)**]에서 누락된 값을 분석할 소스 데이터의 열 또는 필드 이름을 선택합니다.

1. (선택 사항) [**새 필드 이름(New field name)**] 필드에 분석된 필드의 예상 대체 값을 보유할 각 레코드에 추가된 필드의 이름을 입력합니다. 분석된 필드에 누락된 값이 없으면 분석된 필드의 값이 새 필드에 복사됩니다.

   새 필드의 이름을 지정하지 않으면 기본 이름은 `_filled`가 추가된 분석된 열의 이름입니다. 예를 들어 [**데이터 필드(Data field)**]에 **Age**를 입력하고 [**새 필드 이름(New field name)**]에 값을 지정하지 않으면 **Age\$1filled**라는 새 필드가 각 레코드에 추가됩니다.

1. (선택 사항) 변환 노드 속성을 구성한 후 노드 세부 정보 패널에서 [**출력 스키마(Output schema)**] 탭을 선택하여 데이터에 대해 수정된 스키마를 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. [**작업 세부 정보(Job details)**] 탭에서 IAM 역할을 지정하지 않은 경우 여기에 IAM 역할을 입력하라는 메시지가 나타납니다.

1. (선택 사항) 노드 속성과 변환 속성을 구성한 후 노드 세부 정보 패널에서 [**데이터 미리 보기(Data preview)**] 탭을 선택하여 수정된 데이터 집합을 미리 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. 이 기능 사용과 관련된 비용이 있으며 IAM 역할을 제공하는 즉시 결제가 시작됩니다.

# 데이터 집합 내의 키 필터링
<a name="transforms-filter"></a>

*Filter* 변환을 사용하여 정규식을 기반으로 입력 데이터 집합의 레코드를 필터링하여 새 데이터 집합을 생성합니다. 필터 조건을 만족하지 않는 행은 출력에서 제거됩니다.
+ 문자열 데이터 유형의 경우 키 값이 지정된 문자열과 일치하는 행을 필터링할 수 있습니다.
+ 숫자 데이터 유형의 경우 비교 연산자 `<`, `>`, `=`, `!=`, `<=` 및 `>=`로 키 값을 지정된 값과 비교하여 행을 필터링할 수 있습니다.

여러 필터 조건을 지정하면 기본적으로 `AND` 연산자를 사용하여 결과가 결합되지만 대신 `OR`를 선택할 수 있습니다.

*Filter* 변환은 대/소문자를 구분합니다. 대/소문자를 구분하지 않는 속성 키 이름이 필요한 경우 *ApplyMapping* 변환을 상위 노드로 추가합니다.

**작업 다이어그램에 Filter 변환 노드를 추가하려면**

1. (선택 사항) 필요한 경우 리소스 패널을 열고 **필터**를 선택하여 작업 다이어그램에 새 변환을 추가합니다.

1. [**노드 속성(Node properties)**] 탭에서 작업 다이어그램에 노드 이름을 입력합니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. [**변환(Transform)**] 탭을 선택합니다.

1. [**전역 AND(Global AND)**] 또는 [**전역 OR(Global OR)**]를 선택합니다. 이에 따라 여러 필터 조건이 결합되는 방법이 결정됩니다. 모든 조건은 `AND` 또는 `OR` 연산을 사용하여 결합됩니다. 필터 조건이 하나만 있는 경우 둘 중 하나를 선택할 수 있습니다.

1. [**필터 조건(Filter condition)**] 섹션에서 [**조건 추가(Add condition)**] 버튼을 선택하여 필터 조건을 추가합니다.

   [**키(Key)**] 필드에서 데이터 집합의 속성 키 이름을 선택합니다. [**연산(Operation)**] 필드에서 비교 연산자를 선택합니다. [**값(Value)**] 필드에 비교 값을 입력합니다. 다음은 필터 조건의 몇 가지 예입니다.
   + `year >= 2018`
   + `State matches 'CA*'`

   문자열 값을 필터링할 때 비교 값이 작업 속성(Python 또는 Scala)에서 선택한 스크립트 언어와 일치하는 정규식 포맷을 사용하는지 확인합니다.

1. 필요에 따라 필터 조건을 추가합니다.

1. (선택 사항) 변환 노드 속성을 구성한 후 노드 세부 정보 패널에서 [**출력 스키마(Output schema)**] 탭을 선택하여 데이터에 대해 수정된 스키마를 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. [**작업 세부 정보(Job details)**] 탭에서 IAM 역할을 지정하지 않은 경우 여기에 IAM 역할을 입력하라는 메시지가 나타납니다.

1. (선택 사항) 노드 속성과 변환 속성을 구성한 후 노드 세부 정보 패널에서 [**데이터 미리 보기(Data preview)**] 탭을 선택하여 수정된 데이터 집합을 미리 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. 이 기능 사용과 관련된 비용이 있으며 IAM 역할을 제공하는 즉시 결제가 시작됩니다.

# DropNullField를 사용하여 Null 값이 포함된 필드 제거
<a name="transforms-dropnull-fields"></a>

 필드의 모든 값이 'null'인 경우 데이터 집합에서 필드를 제거하려면 *DropNullFields* 변환을 사용합니다. 기본값으로 AWS Glue Studio는 Null 객체를 인식하지만 빈 문자열, 'null'인 문자열, -1 정수 또는 0과 같은 다른 자리 표시자 등의 일부 값은 자동으로 Null로 인식되지 않습니다.

**DropNullFields를 사용하려면**

1.  작업 다이어그램에 DropNullFields 노드를 추가합니다.

1.  **노드 속성(Node properties)** 탭에서 Null 값을 나타내는 추가 값을 선택합니다. 값을 선택하지 않거나 모두 선택할 수 있습니다.  
![\[스크린샷은 DropNullFields 노드의 변환(Transform) 탭을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/DropNullFields-transform-tab.png)
   +  빈 문자열("" 또는 '') - 빈 문자열이 포함된 필드가 제거됩니다.
   +  'Null 문자열' - 'null'이라는 단어를 포함하는 문자열이 포함된 필드가 제거됩니다.
   +  -1 정수 - -1(음수 1) 정수가 포함된 필드가 제거됩니다.

1.  필요한 경우 사용자 지정 Null 값을 지정할 수도 있습니다. 이러한 Null 값은 해당 데이터 집합에 고유할 수 있습니다. 사용자 지정 Null 값을 추가하려면 **새 값 추가(Add new value)**를 선택합니다.

1.  사용자 지정 Null 값을 입력합니다. 예를 들어 0이거나 데이터 집합에서 Null을 나타내는 데 사용되는 임의 값일 수 있습니다.

1.  드롭다운 필드에서 데이터 유형을 선택합니다. 데이터 유형은 문자열 또는 정수일 수 있습니다.
**참고**  
 필드가 Null 값으로 인식되고 필드가 제거되려면 사용자 지정 Null 값과 해당 데이터 유형이 정확히 일치해야 합니다. 사용자 지정 null 값만 일치하고 데이터 형식은 일치하지 않는 부분 일치의 경우 필드가 제거되지 않습니다.

# SQL 쿼리를 사용하여 데이터 변환
<a name="transforms-sql"></a>

**SQL** 변환을 사용하여 SQL 쿼리 형식으로 고유한 변환을 작성할 수 있습니다.

SQL 변환 노드는 여러 데이터 집합을 입력으로 가질 수 있지만 출력으로 단일 데이터 집합만 생성합니다. Apache SparkSQL 쿼리를 입력하는 텍스트 필드가 있습니다. 단순히 SQL 쿼리를 돕기 위해 입력으로 사용되는 각 데이터 집합에 별칭을 할당할 수 있습니다. SQL 구문에 대한 자세한 내용은 [Spark SQL 설명서](https://spark.apache.org/docs/latest/sql-ref.html)를 참조하세요.

**참고**  
VPC에 위치한 데이터 원본으로 Spark SQL 변환을 사용하는 경우 데이터 원본이 포함된 VPC에 AWS Glue VPC 엔드포인트를 추가합니다. 개발 엔드포인트 구성에 대한 자세한 내용은 *AWS Glue Developer Guide*의 [Adding a Development Endpoint](https://docs.aws.amazon.com/glue/latest/dg/add-dev-endpoint.html), [Setting Up Your Environment for Development Endpoints](https://docs.aws.amazon.com/glue/latest/dg/start-development-endpoint.html), and [Accessing Your Development Endpoint](https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint-elastic-ip.html)를 참조하세요.

**작업 다이어그램에서 SQL 변환 노드를 사용하려면**

1. (선택 사항) 필요한 경우 작업 다이어그램에 변환 노드를 추가합니다. 노드 유형으로 **SQL Query**를 선택합니다.
**참고**  
 데이터 미리 보기 세션과 사용자 지정 SQL 또는 사용자 지정 코드 노드를 사용하는 경우 데이터 미리 보기 세션은 전체 데이터세트에 대해 SQL 또는 코드 블록을 있는 그대로 실행합니다.

1. [**노드 속성(Node properties)**] 탭에서 작업 다이어그램에 노드 이름을 입력합니다. 노드 상위 항목이 아직 선택되지 않았거나 SQL 변환에 대해 여러 입력을 원하는 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다. 필요에 따라 상위 노드를 추가합니다.

1. 노드 세부 정보 패널에서 [**변환(Transform)**] 탭을 선택합니다.

1. SQL 쿼리의 소스 데이터 집합은 각 노드의 [**이름(Name)**] 필드에 지정한 이름으로 식별됩니다. 이러한 이름을 사용하지 않으려는 경우나 이름이 SQL 쿼리에 적합하지 않은 경우 각 데이터 집합에 이름을 연결할 수 있습니다. 콘솔은 `MyDataSource`와 같은 기본 별칭을 제공합니다.

   예를 들어, SQL 변환 노드의 상위 노드 이름이 `Rename Org PK field`인 경우 `org_table`이라는 이름을 이 데이터 집합과 연결할 수 있습니다. 그런 다음 이 별칭을 노드 이름 대신 SQL 쿼리에서 사용할 수 있습니다.

1. 머리글 [**코드 블록(Code block)**] 아래의 텍스트 입력 필드에 SQL 쿼리를 붙여넣거나 입력합니다. 텍스트 필드에는 SQL 구문 강조 표시 및 키워드 제안 사항이 표시됩니다.

1. SQL 변환 노드를 선택한 상태에서 [**출력 스키마(Output schema)**] 탭을 선택한 다음 [**편집(Edit)**]을 선택합니다. SQL 쿼리의 출력 필드를 설명하는 열과 데이터 유형을 제공합니다.

   페이지의 [**출력 스키마(Output schema)**] 섹션에서 다음 작업을 사용하여 스키마를 지정합니다.
   + 열 이름을 바꾸려면 열의 [**키(Key)**] 텍스트 상자(*필드* 또는 *속성 키*라고도 함)에 커서를 놓고 새 이름을 입력합니다.
   + 열의 데이터 유형을 변경하려면 드롭다운 목록에서 열의 새 데이터 유형을 선택합니다.
   + 스키마에 새 최상위 열을 추가하려면 오버플로(![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/edit-schema-actions-button.png)) 버튼을 선택한 다음 [**루트 키 추가(Add root key)**]를 선택합니다. 새 열이 스키마 맨 위에 추가됩니다.
   + 스키마에서 열을 제거하려면 키 이름의 맨 오른쪽에 있는 삭제 아이콘(![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/delete-icon-black.png))을 선택합니다.

1. 출력 스키마 지정을 마치면 [**적용(Apply)**]을 선택하여 변경 사항을 저장하고 스키마 편집기를 종료합니다. 변경 사항을 저장하지 않으려면 [**취소(Cancel)**]를 선택하여 스키마 편집기를 편집합니다.

1. (선택 사항) 노드 속성과 변환 속성을 구성한 후 노드 세부 정보 패널에서 [**데이터 미리 보기(Data preview)**] 탭을 선택하여 수정된 데이터 집합을 미리 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. 이 기능 사용과 관련된 비용이 있으며 IAM 역할을 제공하는 즉시 결제가 시작됩니다.

# 집계를 사용하여 선택한 필드에서 요약 계산 수행
<a name="transforms-aggregate-fields"></a>

**집계(Aggregate) 변환을 사용하려면**

1.  작업 다이어그램에 집계(Aggregate) 노드를 추가합니다.

1.  **노드 속성(Node properties)** 탭에서 드롭다운 필드를 선택하여 그룹화할 필드를 선택합니다(선택 사항). 한 번에 둘 이상의 필드를 선택하거나 검색 창에 입력하여 필드 이름을 검색할 수 있습니다.

    필드를 선택하면 이름과 데이터 유형이 표시됩니다. 필드를 제거하려면 필드에서 'X'를 선택합니다.  
![\[스크린샷은 집계(Aggregate) 노드의 변환(Transform) 탭을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/Aggregate-transform-tab.png)

1.  **다른 열 집계(Aggregate another column)**를 선택합니다. 하나 이상의 필드를 선택해야 합니다.  
![\[스크린샷은 다른 열 집계(Aggregate another column)를 선택한 경우의 필드를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/Aggregate-fieldtoaggregate.png)

1.  **집계할 필드(Field to aggregate)** 드롭다운에서 필드를 선택합니다.

1.  선택한 필드에 적용할 집계 함수를 선택합니다.
   +  avg - 평균을 계산합니다.
   +  countDistinct - Null이 아닌 고유 값 수를 계산합니다.
   +  count - Null이 아닌 값 수를 계산합니다.
   +  first - 'group by' 기준을 충족하는 첫 번째 값을 반환합니다.
   +  last - 'group by' 기준을 충족하는 마지막 값을 반환합니다.
   +  kurtosis - 빈도 분포 곡선의 정점 첨도를 계산합니다.
   +  max - 'group by' 기준을 충족하는 최대값을 반환합니다.
   +  min - 'group by' 기준을 충족하는 최소값을 반환합니다.
   +  skewness - 정규 분포의 확률 분포 비대칭 측정값입니다.
   +  stddev\$1pop - 모집단 표준 편차를 계산하고 모집단 분산의 제곱근을 반환합니다.
   +  sum - 그룹에 있는 모든 값의 합계입니다.
   +  sumDistinct - 그룹에 있는 고유 값의 합계입니다.
   +  var\$1samp - 그룹의 표본 분산입니다(Null 무시).
   +  var\$1pop - 그룹의 모집단 분산입니다(Null 무시).

# 중첩된 구조체 평면화
<a name="transforms-flatten"></a>

데이터에 있는 중첩 구조체의 필드를 *평면화하여* 최상위 필드가 되도록 합니다. 새 필드의 이름은 필드 이름 앞에 해당 필드에 전달될 구조체 필드 이름을 넣고 점으로 구분하여 지정합니다.

예를 들어, 데이터에 이름이 'phone\$1number'인 Struct 유형의 필드가 있고, 다른 필드에는 'country\$1code'와 'number'라는 두 개의 필드가 있는 'home\$1phone'이라는 'Struct' 유형의 필드가 있는 경우를 예로 들어 보겠습니다. 일단 평면화되면 이 두 필드는 각각 'phone\$1numbers.home\$1phone.country\$1code' 및 'phone\$1numbers.home\$1phone.number'라는 이름의 최상위 필드가 됩니다.

**작업 다이어그램에 *Flatten* 변환 노드를 추가하려면**

1. 리소스 패널을 열고 **변환** 탭을 선택한 후 **평면화**를 선택하여 작업 다이어그램에 새 변환을 추가합니다. 검색 표시줄을 사용하여 'Flatten'을 입력하고 평면화 노드를 클릭할 수도 있습니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.  
![\[스크린샷에는 리소스 패널 및 'Flatten'이라는 단어로 채워진 검색 표시줄이 나와 있습니다. 검색 결과에는 평면화 변환이 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transform-flatten.png)

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. (선택 사항) **변환** 탭에서 최대 중첩 수준을 평면화하도록 제한할 수 있습니다. 예를 들어 이 값을 1로 설정하면 최상위 구조체만 평면화됩니다. 최대값을 2로 설정하면 최상위 레벨과 그 바로 아래에 있는 구조체가 평면화됩니다.

# UUID 열 추가
<a name="transforms-uuid"></a>

*UUID* (범용 고유 식별) 열을 추가하면 각 행에 고유한 36자 문자열이 할당됩니다.

**작업 다이어그램에 *UUID* 변환 노드를 추가하려면**

1. 리소스 패널을 열고 **UUID**를 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. (선택 사항) **변환** 탭에서 새 열의 이름을 사용자 지정할 수 있습니다. 기본적으로 이름은 'uuid'로 지정됩니다.

# 식별자 열 추가
<a name="transforms-identifier"></a>

데이터 세트의 각 행에 숫자 *식별자*를 할당합니다.

**작업 다이어그램에서 *식별자* 변환 노드를 추가하려면**

1. 리소스 패널을 열고 **식별자**를 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. (선택 사항) **변환** 탭에서 새 열의 이름을 사용자 지정할 수 있습니다. 기본적으로 이름은 'id'로 지정됩니다.

1. (선택 사항) 작업에서 데이터를 증분 방식으로 처리하고 저장하는 경우 작업 실행 간에 동일한 ID가 재사용되지 않도록 해야 합니다.

   **변환** 탭에서 **고유** 확인란 옵션을 선택합니다. 식별자에 작업 타임스탬프가 포함되므로 여러 번 실행할 때 고유하게 표시됩니다. 더 큰 숫자를 입력하도록 허용하려면 long을 입력하는 대신 열을 십진수로 입력합니다.

# 열을 타임스탬프 형식으로 변환
<a name="transforms-to-timestamp"></a>

변환 대상인 *타임스탬프로 변환*을 사용하여 숫자 또는 문자열 열의 데이터 유형을 타임스탬프로 변경하여 해당 데이터 유형과 함께 저장하거나 타임스탬프가 필요한 다른 변환에 적용할 수 있습니다.

**작업 다이어그램에 *타임스탬프로 변환* 변환 노드를 추가하려면**

1. 리소스 패널을 열고 **타임스탬프로 변환**을 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 변환할 열의 이름을 입력합니다.

1. **변환** 탭에서 유형을 선택하여 선택한 열의 구문을 분석하는 방법을 정의합니다.

   값이 숫자인 경우 초(Unix/Python 타임스탬프), 밀리초 또는 마이크로초로 표현할 수 있습니다. 해당 옵션을 선택하세요.

   값이 형식이 지정된 문자열인 경우 'iso' 유형을 선택합니다. 문자열은 ISO 형식의 변형 중 하나를 준수해야 합니다(예: '2022-11-02T 14:40:59 .915Z').

   이 시점에서 유형을 모르거나 행마다 다른 유형을 사용하는 경우 'autodetect'를 선택하면 시스템이 성능 저하를 줄이면서 최선의 추정을 할 수 있습니다.

1. (선택 사항) **변환** 탭에서 선택한 열을 변환하는 대신 새 열을 만들고 새 열의 이름을 입력하여 원본을 유지할 수 있습니다.

# 타임스탬프 열을 형식이 지정된 문자열로 변환
<a name="transforms-format-timestamp"></a>

타임스탬프 열을 패턴에 따라 문자열로 형식을 지정합니다. *타임스탬프 형식 지정*을 사용하여 날짜 및 시간을 원하는 형식의 문자열로 가져올 수 있습니다. [Spark 날짜 구문](https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html)과 대부분의 [Python 날짜 코드](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes)를 사용하여 형식을 정의할 수 있습니다.

예를 들어, 날짜 문자열을 '2023-01-01 00:00'과 같은 형식으로 지정하려면 Spark 구문을 사용하여 'YYYYY-MM-DD HH:mm' 같은 형식으로 정의하거나 이에 상응하는 Python 날짜 코드를 '%Y-%m-%d %H: %M' 같은 형식으로 정의하면 됩니다.

**작업 다이어그램에서 *타임스탬프 형식 지정* 변환 노드를 추가하려면**

1. 리소스 패널을 열고 **타임스탬프 형식 지정**을 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 변환할 열의 이름을 입력합니다.

1. **변환** 탭에서 [Spark 날짜 구문](https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html) 또는 [Python 날짜 코드](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes)를 사용하여 표현된 사용하려는 **타임스탬프 형식** 패턴을 입력합니다.

1. (선택 사항) **변환** 탭에서 선택한 열을 변환하는 대신 새 열을 만들고 새 열의 이름을 입력하여 원본을 유지할 수 있습니다.

# 조건부 라우터 변환 생성
<a name="transforms-conditional-router"></a>

 조건부 라우터 변환을 사용하면 수신 데이터에 여러 조건을 적용할 수 있습니다. 수신 데이터의 각 행은 그룹 필터 조건을 기준으로 평가되고 해당 그룹으로 처리됩니다. 행이 둘 이상의 그룹 필터 조건을 충족하는 경우 변환은 행을 여러 그룹에 전달합니다. 조건을 충족하지 않는 행은 삭제되거나 기본 출력 그룹으로 라우팅될 수 있습니다.

 이 변환은 필터 변환과 유사하지만 여러 조건에서 동일한 입력 데이터를 테스트하려는 사용자에게 유용합니다.

**조건부 라우터 변환을 추가하려면:**

1.  조건부 라우터 변환을 수행할 노드를 선택합니다. 소스 노드일 수도 있고 다른 변환일 수도 있습니다.

1.  **작업**을 선택한 다음 검색 창을 사용하여 '조건부 라우터'를 찾아 선택합니다. **조건부 라우터** 변환이 두 개의 출력 노드와 함께 추가됩니다. 한 출력 노드인 '기본 그룹'에는 다른 출력 노드에 정의된 조건을 전혀 충족하지 않는 레코드가 포함되어 있습니다. 기본 그룹은 편집할 수 없습니다.  
![\[스크린샷은 소스 노드에 연결된 조건부 라우터 변환 노드를 보여줍니다. 출력 노드는 조건부 라우터 노드에서 분기된 상태로 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transform-conditional-router-node.png)

    **그룹 추가**를 선택하여 출력 그룹을 더 추가할 수 있습니다. 각 출력 그룹에 대해 그룹 이름을 지정하고 필터 조건과 논리 연산자를 추가할 수 있습니다.  
![\[스크린샷은 출력 그룹, 논리 연산자 및 조건부 필터의 이름을 지정하는 옵션이 있는 조건부 라우터 변환 탭을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transform-conditional-router-tab.png)

1.  그룹의 새 이름을 입력하여 출력 그룹 이름을 바꿉니다. AWS Glue Studio는 자동으로 사용자에 대한 그룹 이름을 지정합니다(예: 'output\$1group\$11').

1.  논리 연산자(**AND**, **OR**)를 선택하고 **키**, **연산** 및 **값**을 지정하여 **필터 조건**을 추가합니다. 논리 연산자를 사용하면 둘 이상의 필터 조건을 구현하고 지정한 각 필터 조건에 대해 논리 연산자를 수행할 수 있습니다.

    키를 지정할 때 스키마에서 사용 가능한 키를 선택할 수 있습니다. 그런 다음 선택한 키 유형에 따라 사용할 수 있는 연산을 선택할 수 있습니다. 예를 들어 키 유형이 '문자열'인 경우 선택할 수 있는 연산은 '일치'입니다.  
![\[스크린샷은 키, 연산 및 값에 대한 필터 조건 필드가 있는 조건부 라우터 변환 탭을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transform-conditional-router-filter-condition.png)

1.  **값** 필드에 값을 입력합니다. **조건 추가**를 선택하여 추가 필터 조건을 추가할 수 있습니다. 필터 조건을 제거하려면 휴지통 아이콘을 선택합니다.

# 열 연결 변환을 사용하여 열 추가
<a name="transforms-concatenate-columns"></a>

 연결 변환을 사용하면 선택적 스페이서가 있는 다른 열의 값을 사용하여 새 문자열 열을 구축할 수 있습니다. 예를 들어 '-'를 스페이서로 사용해 'year', 'month', 'day'가 순서대로 연결된 항목으로 연결된 열 'date'를 정의하면 다음과 같은 결과가 나옵니다.


| day | 개월 | 년 | date | 
| --- | --- | --- | --- | 
| 01 | 01 | 2020 | 2020-01-01 | 
| 02 | 01 | 2020 | 2020-01-02 | 
| 03 | 01 | 2020 | 2020-01-03 | 
| 04 | 01 | 2020 | 2020-01-04 | 

**연결 변환을 추가하려면:**

1. 리소스 패널을 엽니다. 그런 다음 **열 연결**을 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [노드 상위 항목(Node parents)] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 연결된 문자열 및 연결할 열을 보관할 열의 이름을 입력합니다. 드롭다운에서 열을 선택하는 순서대로 사용됩니다.  
![\[스크린샷에는 연결 변환의 변환 탭이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transforms-concatenate-transform-tab.png)

1. **스페이서 - 선택 사항** - 연결된 필드 사이에 배치할 문자열을 입력합니다. 기본적으로 스페이서는 없습니다.

1. **Null 값 - 선택 사항** - 열 값이 null일 때 사용할 문자열을 입력합니다. 기본적으로 열의 값이 'NULL' 또는 'NA'인 경우에는 빈 문자열이 사용됩니다.

# 문자열 분할 변환을 사용하여 문자열 열 구분
<a name="transforms-split-string"></a>

 문자열 분할 변환을 사용하면 정규식을 사용하여 문자열을 토큰 배열로 분할해 분할 방식을 정의할 수 있습니다. 그런 다음 각 토큰의 의미를 미리 알고 있다고 가정하고 열을 배열 유형으로 유지하거나 **배열에서 열로** 변환을 이 다음에 적용하여 배열 값을 상위 수준의 필드로 추출할 수 있습니다. 또한 토큰 순서가 무관한 경우(예: 카테고리 세트) **분해** 변환을 사용하여 각 값에 대해 별도의 행을 생성할 수 있습니다.

 예를 들어 쉼표를 패턴으로 사용하여 'categories' 열을 분할해 'categorories\$1arr' 열을 추가할 수 있습니다.


| product\$1id | categories | categories\$1arr | 
| --- | --- | --- | 
| 1 | sports,winter | [sports, winter] | 
| 2 | garden,tools | [garden, tools] | 
| 3 | videogames | [videogames] | 
| 4 | game,boardgame,social | [game, boardgame, social] | 

**문자열 분할 변환을 추가하려면:**

1. 리소스 패널을 열고 문자열 분할을 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) 노드 속성 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [노드 상위 항목(Node parents)] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 분할할 열을 선택하고 문자열을 분할하는 데 사용할 패턴을 입력합니다. 일반 표현식처럼 특별한 의미가 있어서 이스케이프 처리해야 하는 경우가 아니라면 대부분의 경우 문자만 입력하면 됩니다. 문자 앞에 백슬래시를 추가하여 이스케이프 처리해야 하는 문자는 `\.[]{}()<>*+-=!?^$|`입니다. 예를 들어 점('.')으로 구분하려면 `\.`를 입력해야 합니다. 하지만 쉼표는 특별한 의미가 없으므로 `,` 그대로 지정할 수 있습니다.  
![\[스크린샷에는 문자열 분할 변환의 변환 탭이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transforms-split-string-transform-tab.png)

1. (선택 사항) 원래 문자열 열을 유지하려는 경우 새 배열 열의 이름을 입력할 수 있습니다. 이렇게 하면 원래 문자열 열과 토큰화된 새 배열 열을 모두 유지할 수 있습니다.

# 배열을 열로 변환을 사용하여 배열 요소를 상위 수준 열로 추출
<a name="transforms-array-to-columns"></a>

 배열을 열로 변환을 사용하면 배열 유형의 열에 있는 일부 또는 모든 요소를 새 열로 추출할 수 있습니다. 배열에 추출하기에 충분한 값이 있는 경우 변환은 새 열을 최대한 많이 채우며, 선택적으로 지정된 위치의 요소를 가져올 수도 있습니다.

 예를 들어 ip v4 서브넷에서 '문자열 분할' 변환을 적용한 결과에 해당하는 배열 열 'subnet'이 있는 경우 첫 번째 위치와 네 번째 위치를 새 열 'first\$1octect' 및 'forth\$1octect'로 추출할 수 있습니다. 이 예제에서 변환 출력은 다음과 같습니다(마지막 두 행의 배열이 예상보다 짧음).


| 서브넷 | first\$1octect | fourth\$1octect | 
| --- | --- | --- | 
| [54, 240, 197, 238] | 54 | 238 | 
| [192, 168, 0, 1] | 192 | 1 | 
| [192, 168] | 192 |  | 
| [] |  |  | 

**배열을 열로 변환을 추가하려면:**

1. 리소스 패널을 열고 **배열을 열로**를 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [노드 상위 항목(Node parents)] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 추출할 배열 열을 선택하고 추출된 토큰의 새 열 목록을 입력합니다.  
![\[스크린샷에는 배열을 열로 변환의 변환 탭이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transforms-array-to-columns-transform-tab.png)

1. (선택 사항) 열에 할당하기 위해 배열 토큰을 사용하지 않으려면 가져올 인덱스를 지정할 수 있습니다. 이 인덱스는 지정된 동일한 순서대로 열 목록에 할당됩니다. 예를 들어 출력 열이 'column1, column2, column3'이고 인덱스가 4, 1, 3'인 경우 배열의 네 번째 요소는 column1로, 첫 번째 요소는 column2로, 세 번째 요소는 column3으로 이동합니다(배열이 인덱스 수보다 적으면 NULL 값이 설정됨).

# 현재 타임스탬프 추가 변환 사용
<a name="transforms-add-current-timestamp"></a>

 **현재 타임스탬프 추가** 변환을 사용하면 데이터가 처리된 시간으로 행을 표시할 수 있습니다. 이는 감사 목적이나 데이터 파이프라인에서 지연 시간을 추적하는 데 유용합니다. 이 새 열을 타임스탬프 데이터 형식이나 형식이 지정된 문자열로 추가할 수 있습니다.

**현재 타임스탬프 추가 변환을 추가하려면:**

1. 리소스 패널을 열고 **현재 타임스탬프 추가**를 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [노드 상위 항목(Node parents)] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.  
![\[스크린샷에는 현재 타임스탬프 추가 변환의 변환 탭이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transforms-add-current-timestamp-transform-tab.png)

1. (선택 사항) **변환** 탭에서 새 열의 사용자 지정 이름을 입력하고 형식이 지정된 날짜 문자열로 열을 구성하려면 형식을 입력합니다.

# 행을 열로 피벗 변환 사용
<a name="transforms-pivot-rows-to-columns"></a>

 **행을 열로 피벗** 변환을 사용하면 선택한 열에서 고유 값을 교체하여 숫자 열을 집계할 수 있으며, 이 열은 새 열이 됩니다(여러 개의 열을 선택한 경우 값이 연결되어 새 열의 이름으로 지정됨). 이렇게 하면 행이 통합되지만 각 고유 값에 대한 부분 집계를 통해 열이 더 많아집니다. 예를 들어 다음과 같이 month 및 country별 매출 데이터 세트가 있습니다(쉽게 설명하기 위해 정렬됨).


| 년 | 개월 | country | amount | 
| --- | --- | --- | --- | 
| 2020 | Jan | uk | 32 | 
| 2020 | Jan | de | 42 | 
| 2020 | Jan | us | 64 | 
| 2020 | Feb | uk | 67 | 
| 2020 | Feb | de | 4 | 
| 2020 | Feb | de | 7 | 
| 2020 | Feb | us | 6 | 
| 2020 | Feb | us | 12 | 
| 2020 | Jan | us | 90 | 

 **금액** **및 **국가**를 집계 열로 사용하여 피벗하면 원래 국가** 열에서 새 열이 생성됩니다. 아래 표에는 **국가** 열 대신 **de**, **uk** 및 **us**에 대한 새 열이 있습니다.


| 년 | 개월 | de | uk | us | 
| --- | --- | --- | --- | --- | 
| 2020 | Jan | 42 | 32 | 64 | 
| 2020 | Jan | 11 | 67 | 18 | 
| 2021 | Jan |  |  | 90 | 

 대신 month와 country를 모두 피벗하려는 경우 해당 열 값의 모든 조합에 대한 열이 생성됩니다.


| 년 | Jan\$1de | Jan\$1uk | Jan\$1us | Feb\$1de | Feb\$1uk | Feb\$1us | 
| --- | --- | --- | --- | --- | --- | --- | 
| 2020 | 42 | 32 | 64 | 11 | 67 | 18 | 
| 2021 |  |  | 90 |  |  |  | 

**행을 열로 피벗 변환을 추가하려면:**

1. 리소스 패널을 열고 **행을 열로 피벗**을 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [노드 상위 항목(Node parents)] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 새 열의 값을 생성하기 위해 집계될 숫자 열, 적용할 집계 함수, 고유한 값을 새 열로 변환할 열을 선택합니다.  
![\[스크린샷에는 행을 열로 피벗 변환의 변환 탭이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transforms-pivot-rows-to-columns-transform-tab.png)

# 열을 행으로 피벗 취소 변환 사용
<a name="transforms-unpivot-columns-to-rows"></a>

 **피벗 취소** 변환을 사용하면 열을 새 열의 값으로 변환하여 각 고유 값에 대한 행을 생성할 수 있습니다. 피벗과 반대이지만 원래 열로 결합을 분할하거나 집계된 동일한 값의 행을 구분할 수 없다는 점에서 차이가 있습니다(나중에 분할 변환을 사용하여 분할 가능). 예를 들어 다음과 같은 테이블이 있습니다.


| 년 | 개월 | de | uk | us | 
| --- | --- | --- | --- | --- | 
| 2020 | Jan | 42 | 32 | 64 | 
| 2020 | Feb | 11 | 67 | 18 | 
| 2021 | Jan |  |  | 90 | 

 'amount' 값을 사용해 'de', 'uk', 'us' 열을 'country' 열로 피벗 취소하고 다음과 같은 결과를 얻을 수 있습니다(설명을 위해 여기에서는 정렬됨).


| 년 | 개월 | country | amount | 
| --- | --- | --- | --- | 
| 2020 | Jan | uk | 32 | 
| 2020 | Jan | de | 42 | 
| 2020 | Jan | us | 64 | 
| 2020 | Feb | uk | 67 | 
| 2020 | Feb | de | 11 | 
| 2020 | Feb | us | 18 | 
| 2021 | Jan | us | 90 | 

 값이 NULL인 열(2021년 1월의 'de' 및 'uk')은 기본적으로 생성되지 않습니다. 이 옵션을 활성화하여 다음을 얻을 수 있습니다.


| 년 | 개월 | country | amount | 
| --- | --- | --- | --- | 
| 2020 | Jan | uk | 32 | 
| 2020 | Jan | de | 42 | 
| 2020 | Jan | us | 64 | 
| 2020 | Feb | uk | 67 | 
| 2020 | Feb | de | 11 | 
| 2020 | Feb | us | 18 | 
| 2021 | Jan | us | 90 | 
| 2021 | Jan | de |  | 
| 2021 | Jan | uk |  | 

**열을 행으로 피벗 취소 변환을 추가하려면:**

1. 리소스 패널을 열고 **열을 행으로 피벗 취소**를 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [노드 상위 항목(Node parents)] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 피벗 취소할 열의 이름과 값을 보관하기 위해 생성할 새 열을 입력합니다.  
![\[스크린샷에는 열을 행으로 피벗 취소 변환의 변환 탭이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transforms-unpivot-columns-to-rows-transform-tab.png)

# 처리 균형 자동 조절 변환을 사용하여 런타임 최적화
<a name="transforms-autobalance-processing"></a>

 **처리 균형 자동 조절** 변환은 더 나은 성능을 위해 작업자 사이에서 데이터를 재배포합니다. 이는 데이터가 불균형하거나 소스에서 가져온 데이터로 인해 충분한 병렬 처리가 불가능한 경우에 유용합니다. 소스가 gzip으로 압축되었거나 JDBC인 경우에 이러한 상황이 흔히 나타납니다. 데이터 재배포에도 어느 정도의 성능 비용이 발생하므로, 데이터의 균형이 이미 조절된 상태인 경우 최적화해도 보상 효과를 얻지 못할 수도 있습니다. 이 변환은 Apache Spark 재파티셔닝을 사용하여 클러스터 용량에 최적화된 여러 파티션 사이에서 데이터를 임의로 재할당합니다. 고급 사용자의 경우 여러 파티션을 수동으로 입력할 수 있습니다. 또한 지정된 열을 기준으로 데이터를 재구성하여 파티셔닝된 테이블의 쓰기를 최적화하는 데 사용할 수 있습니다. 그러면 출력 파일의 통합 기능이 더욱 강화됩니다.

****

1. 리소스 패널을 열고 **처리 균형 자동 조절**을 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [노드 상위 항목(Node parents)] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. (선택 사항) **변환** 탭에서 파티션 수를 입력할 수 있습니다. 일반적으로 이 값은 시스템에서 결정하도록 하는 것이 좋지만, 이 값을 제어해야 하는 경우 승수를 조정하거나 특정 값을 입력할 수 있습니다. 열을 기준으로 파티셔닝된 데이터를 저장하려는 경우 리파티션 열과 동일한 열을 선택할 수 있습니다. 이렇게 하면 각 파티션에서 파일 수를 최소화하고 파티션당 파일 수가 많아지지 않도록 방지할 수 있습니다. 파일 수가 많아지면 해당 데이터를 쿼리하는 도구의 성능이 저하될 수 있습니다.  
![\[스크린샷에는 처리 균형 자동 조절 변환의 변환 탭이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transforms-autobalance-processing-transform-tab.png)

# 파생 열 변환을 사용하여 다른 열 결합
<a name="transforms-derived-column"></a>

 **파생 열** 변환을 사용하면 상수 및 리터럴뿐만 아니라 데이터의 다른 열을 사용할 수 있는 수학 공식 또는 SQL 표현식을 기반으로 새 열을 정의할 수 있습니다. 예를 들어 'success' 및 'count' 열에서 'percentage' 열을 파생하려면 SQL 표현식 'success \$1 100 / count \$1\$1 '%''를 입력하면 됩니다.

 결과 예제: 


| success | count | percentage | 
| --- | --- | --- | 
| 14 | 100 | 14% | 
| 6 | 20 | 3% | 
| 3 | 40 | 7.5% | 

**파생 열 변환을 추가하려면:**

1. 리소스 패널을 열고 **파생 열**을 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [노드 상위 항목(Node parents)] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 열 이름 및 해당 콘텐츠에 대한 표현식을 입력합니다.  
![\[스크린샷에는 파생 열 변환의 변환 탭이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transforms-dervied-column-transform-tab.png)

# 조회 변환을 사용하여 카탈로그 테이블에서 일치하는 데이터 추가
<a name="transforms-lookup"></a>

 **조회** 변환을 사용하면 키가 데이터에 정의된 조회 열과 일치하는 경우 정의된 카탈로그 테이블의 열을 추가할 수 있습니다. 이는 조건 일치 열을 사용하여 데이터와 조회 테이블 사이에서 왼쪽 외부 조인을 수행하는 방법과 같습니다.

**조회 변환을 추가하려면:**

1. 리소스 패널을 열고 **조회**를 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [노드 상위 항목(Node parents)] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 조회를 수행하는 데 사용할 완전히 정규화된 카탈로그 테이블 이름을 입력합니다. 예를 들어 데이터베이스가 'mydb'이고 테이블이 'mytable'인 경우 'mydb.mytable'을 입력합니다. 그런 다음 조회 키가 구성된 경우 조회 테이블에서 일치 항목을 찾을 기준을 입력합니다. 쉼표로 구분된 키 열 목록을 입력합니다. 키 열 중 하나 이상의 이름에서 같은 이름이 없는 경우 일치 매핑을 정의해야 합니다.

   예를 들어 데이터 열이 'user\$1id' 및 'region'이고 사용자 테이블에서 해당 열의 이름이 'id' 및 'region'인 경우 **일치시킬 열** 필드에 'user\$1id=id, region'을 입력합니다. region=region을 입력할 수도 있지만 동일하므로 이 작업은 필요하지 않습니다.

1. 마지막으로, 조회 테이블에서 일치하는 행에서 가져올 열을 입력하여 데이터에 통합합니다. 일치하는 항목이 없으면 해당 열은 NULL로 설정됩니다.
**참고**  
**조회** 변환 아래에서 효율성을 높이기 위해 왼쪽 조인을 사용합니다. 조회 테이블에 복합 키가 있는 경우 하나만 일치하도록 일치하는 열을 모든 키 열과 매칭하도록 설정합니다. 그렇지 않으면 여러 조회 행이 매칭되어 각 일치 항목에 대해 추가 행이 추가됩니다.  
![\[스크린샷에는 조회 변환의 변환 탭이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transforms-lookup-transform-tab.png)

# 배열 또는 맵을 행으로 분해 변환 사용
<a name="transforms-explode-array"></a>

 **분해** 변환을 사용하면 중첩된 구조에서 조작하기 쉬운 개별 행으로 값을 추출할 수 있습니다. 배열의 경우 이 변환은 행의 다른 열에 대한 값을 복제하여 배열의 각 값에 대해 행을 생성합니다. 맵의 경우 이 변환은 열 및 행의 다른 열을 키와 값으로 사용해 각 항목에 대한 행을 생성합니다.

 예를 들어 다음 데이터 세트에는 값이 여러 개인 'category' 배열 열이 있습니다.


| product\$1id | category | 
| --- | --- | 
| 1 | [sports, winter] | 
| 2 | [garden, tools] | 
| 3 | [videogames] | 
| 4 | [game, boardgame, social] | 
| 5 | [] | 

 'category' 열을 같은 이름의 열로 분해하면 해당 열이 재정의됩니다. 다음 결과를 얻기 위해 NULL을 포함하도록 선택할 수 있습니다(설명을 위해 정렬됨).


| product\$1id | category | 
| --- | --- | 
| 1 | sports | 
| 1 | winter | 
| 2 | garden | 
| 2 | tool | 
| 3 | videogames | 
| 4 | 게임 | 
| 4 | boardgame | 
| 4 | social | 
| 5 |  | 

**배열 또는 맵을 행으로 분해 변환을 추가하려면:**

1. 리소스 패널을 열고 **분해 또는 맵을 행으로 분해**를 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. (선택 사항) **노드 속성** 탭에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [노드 상위 항목(Node parents)] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 분해할 열을 선택합니다(배열 또는 맵 유형이어야 함). 그런 다음 배열 항목에 대한 열 이름 또는 맵을 분해하는 경우 키와 값에 대한 열 이름을 입력합니다.

1. (선택 사항) **변환** 탭에서 분해할 열이 NULL이거나 구조가 비어 있는 경우 기본적으로 분해된 데이터 세트에서 해당 열은 생략됩니다. 행을 유지하고 싶으면(새 열을 NULL로 표시) 'NULL 포함'을 선택합니다.  
![\[스크린샷에는 배열 또는 맵을 행으로 분해 변환의 변환 탭이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/transforms-explode-array-transform-tab.png)

# 레코드 일치 변환을 사용하여 기존 데이터 분류 변환을 간접적으로 호출
<a name="transforms-record-matching"></a>

이 변환은 기존 레코드 일치 기계 학습 데이터 분류 변환을 간접적으로 호출합니다.

변환은 레이블을 기반으로 훈련된 모델을 기준으로 현재 데이터를 평가합니다. 알고리즘 훈련에 따라 동등한 것으로 간주되는 항목 그룹에 각 행을 할당하기 위해 'match\$1id' 열이 추가됩니다. 자세한 내용은 [Lake Formation FindMatches를 사용하는 레코드 일치](https://docs.aws.amazon.com/glue/latest/dg/machine-learning.html)를 참조하세요.

**참고**  
시각적 작업에서 사용하는 AWS Glue의 버전은 레코드 일치 변환을 생성하기 위해 AWS Glue에서 사용하는 버전과 일치해야 합니다.

![\[스크린샷에는 변환의 데이터 미리보기가 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/recording-matching-transform-1.png)


**작업 다이어그램에 레코드 일치 변환 노드를 추가하려면**

1. 리소스 패널을 열고 **정규식 일치**를 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. 노드 속성 패널에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 **기계 학습 변환** 페이지로부터 가져온 ID를 입력합니다.  
![\[스크린샷에는 기계 학습 변환 페이지의 ID가 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/recording-matching-transform-2.png)

1. (선택 사항) **변환** 탭에서 신뢰도 점수를 추가하는 옵션을 확인할 수 있습니다. 추가 컴퓨팅 용량을 소모하여 모델은 각 일치에 대한 신뢰도 점수를 추가 열로 추정합니다.

# null 행 제거
<a name="transforms-remove-null-rows"></a>

이 변환은 데이터 세트에서 모든 열이 null인 행을 제거합니다. 또한 빈 필드를 포함하도록 이 기준을 확장하여 하나 이상의 열이 비어 있지 않은 행을 유지할 수 있습니다.

**작업 다이어그램에 null 행 제거 변환 노드를 추가하려면**

1. 리소스 패널을 열고 **null 행 제거**를 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. 노드 속성 패널에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. (선택 사항) 행이 null이 아닐 뿐만 아니라 비어 있지 않도록 하려면 **변환** 탭에서 **확장** 옵션을 선택합니다. 이렇게 하면 이 변환의 목적을 위해 빈 문자열, 배열 또는 맵이 null로 간주됩니다.

# JSON 데이터를 포함하는 문자열 열 구문 분석
<a name="transforms-parse-json-column"></a>

이 변환은 JSON 데이터를 포함하는 문자열 열을 구문 분석하고 JSON이 객체인지 또는 배열인지에 따라 각각 해당 문자열 열을 구문 또는 배열 열로 변환합니다. 선택적으로 구문 분석된 열과 원래 열을 모두 유지할 수 있습니다.

선택적 샘플링을 통해 JSON 스키마를 제공하거나 추론할 수 있습니다(JSON 객체의 경우).

**작업 다이어그램에 JSON 열 구문 분석 변환 노드를 추가하려면**

1. 리소스 패널을 열고 **JSON 열 구문 분석**을 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. 노드 속성 패널에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 JSON 문자열이 포함된 열을 선택합니다.

1. (선택 사항) **변환** 탭에서 SQL 구문을 사용하여 JSON 데이터가 따르는 스키마를 입력합니다(예: 객체의 경우 'field1 STRING, field2 INT', 배열의 경우 'ARRAY<STRING>').

   배열의 경우 스키마가 필요하지만 객체의 경우 스키마가 지정되지 않았다면 데이터를 사용하여 추론됩니다. 스키마 추론에 따른 영향(특히 대규모 데이터 세트의 경우)을 줄이려면 **스키마를 추론하는 데 사용할 샘플 비율**을 입력하여 전체 데이터를 두 번 읽지 않도록 합니다. 값이 1보다 작으면 해당 비율의 무작위 샘플이 스키마를 추론하는 데 사용됩니다. 데이터를 신뢰할 수 있고 객체가 행 사이에서 일관된 경우 0.1과 같은 작은 비율을 사용하면 성능을 개선할 수 있습니다.

1. (선택 사항) 원래 문자열 열과 구문 분석된 열을 모두 유지하려는 경우 **변환** 탭에 새 열 이름을 입력할 수 있습니다.

# JSON 경로 추출
<a name="transforms-extract-json-path"></a>

이 변환은 JSON 문자열 열에서 새 열을 추출합니다. 이 변환은 몇 개의 데이터 요소만 필요하고 전체 JSON 콘텐츠를 테이블 스키마로 가져오지 않으려는 경우에 유용합니다.

**작업 다이어그램에 JSON 경로 추출 변환 노드를 추가하려면**

1. 리소스 패널을 열고 **JSON 경로 추출**을 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. 노드 속성 패널에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 JSON 문자열이 포함된 열을 선택합니다. 쉼표로 구분된 하나 이상의 JSON 경로 식을 입력합니다. 각 표현식은 JSON 배열 또는 객체에서 값을 추출하는 방법을 참조합니다. 예를 들어 JSON 열에 속성이 'prop\$11' 및 'prop2'인 객체가 포함된 경우 이름을 'prop\$11, prop\$12'로 지정하여 모두 추출할 수 있습니다.

   예를 들어 JSON 필드에 JSON `{"a. a": 1}`에서 속성을 추출하기 위한 특수 문자가 있는 경우 `$['a. a']` 경로를 사용할 수 있습니다. 단, 쉼표는 경로를 구분하는 기호로 예약되었으므로, 예외입니다. 그런 다음 각 경로에 대해 해당 열 이름을 쉼표로 구분하여 입력합니다.

1. (선택 사항) 추출 후에 **변환** 탭에서 JSON 열을 삭제하도록 선택할 수 있습니다. 필요한 부분을 추출한 후 나머지 JSON 데이터가 필요하지 않은 경우에 유용합니다.

# 정규식을 사용하여 문자열 조각 추출
<a name="transforms-regex-extractor"></a>

이 변환은 정규식을 사용하여 문자열 조각을 추출하고 문자열 조각에서 새 열을 생성하거나 정규식 그룹을 사용하는 경우 여러 열을 생성할 수 있습니다.

**작업 다이어그램에 정규식 추출기 변환 노드를 추가하려면**

1. 리소스 패널을 열고 **정규식 추출기**를 선택하여 작업 다이어그램에 새 변환을 추가합니다. 노드를 추가할 때 선택한 노드가 상위 노드가 됩니다.

1. 노드 속성 패널에서 작업 다이어그램에 노드 이름을 입력할 수 있습니다. 노드 상위 항목이 아직 선택되지 않은 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

1. **변환** 탭에서 정규식과 정규식을 적용해야 하는 열을 입력합니다. 그런 다음 일치하는 문자열을 저장할 새 열의 이름을 입력합니다. 소스 열이 null인 경우에만 새 열이 null이 되고, 정규식이 일치하지 않으면 열이 비어 있게 됩니다.

   정규식이 그룹을 사용하는 경우 쉼표로 구분된 해당 열 이름이 있지만 열 이름을 비워 두면 그룹을 건너뛸 수 있습니다.

   예를 들어 ISO의 긴 날짜 형식과 ISO의 짧은 날짜 형식을 모두 사용하는 문자열이 포함된 'purchase\$1date' 열이 있는 경우 가능하면 연도, 월, 일, 시간을 추출하려고 합니다. 시간 그룹은 선택 사항이지만, 시간 그룹을 사용할 수 없는 행에서는 정규식이 일치하지 않으므로 추출된 모든 그룹이 빈 문자열이 됩니다. 이 경우 그룹에서 시간을 선택 사항으로 지정하지 않고 내부 항목을 사용하려고 하므로 이름을 비우고 추출되지 않도록 합니다(이 그룹에는 T 문자가 포함됨).  
![\[스크린샷에는 정규식 추출기의 정규식 구성이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/regex-extractor-1.png)

   데이터 미리 보기의 결과:  
![\[스크린샷에는 정규식 추출기의 데이터 미리 보기 구성이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/regex-extractor-2.png)

# 사용자 정의 변환 생성
<a name="transforms-custom"></a>

데이터에 대해 더 복잡한 변환을 수행해야 하거나 데이터 속성 키를 데이터 집합에 추가하려는 경우 작업 다이어그램에 [**사용자 정의 코드(Custom code)**] 변환을 추가할 수 있습니다. 사용자 정의 코드 노드를 사용하면 변환을 수행하는 스크립트를 입력할 수 있습니다.

사용자 정의 코드를 사용하는 경우 스키마 편집기를 사용하여 사용자 정의 코드를 통해 출력에 대한 변경 사항을 표시해야 합니다. 스키마를 편집할 때 다음 작업을 수행할 수 있습니다.
+ 데이터 속성 키 추가 또는 제거
+ 데이터 속성 키의 데이터 유형 변경
+ 데이터 속성 키의 이름 변경
+ 중첩 속성 키 재구성

출력을 대상 위치로 보내기 전에 사용자 정의 변환 노드의 결과에서 단일 `DynamicFrame`을 선택하려면 *SelectFromCollection* 변환을 사용해야 합니다.

다음 태스크를 사용하여 작업 다이어그램에 사용자 정의 변환 노드를 추가합니다.

## 작업 다이어그램에 사용자 정의 코드 변환 노드 추가
<a name="transforms-custom-addnode"></a>

**작업 다이어그램에 사용자 정의 변환 노드를 추가하려면**

1. (선택 사항) 리소스 패널을 열고 **사용자 지정 변환**을 선택하여 작업 다이어그램에 사용자 지정 변환을 추가합니다.

1. [**노드 속성(Node properties)**] 탭에서 작업 다이어그램에 노드 이름을 입력합니다. 노드 상위 항목이 아직 선택되지 않았거나 사용자 정의 변환에 대해 여러 입력을 원하는 경우 [**노드 상위 항목(Node parents)**] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

## 사용자 정의 변환 노드에 대한 코드 입력
<a name="transforms-custom-addcode"></a>

입력 필드에 코드를 입력하거나 복사할 수 있습니다. 작업에서는 이 코드를 사용하여 데이터 변환을 수행합니다. Python 또는 Scala에서 코드 조각을 제공할 수 있습니다. 코드는 입력으로 하나 이상의 `DynamicFrames`를 취해야 하며 `DynamicFrames` 컬렉션을 반환합니다.

**사용자 정의 변환 노드에 대한 스크립트를 입력하려면**

1. 작업 다이어그램에서 사용자 정의 변환 노드를 선택한 상태에서 [**변환(Transform)**] 탭을 선택합니다.

1. 머리글 [**코드 블록(Code block)**] 아래의 텍스트 입력 필드에 변환 코드를 붙여넣거나 입력합니다. 사용하는 코드는 [**작업 세부 정보(Job details)**] 탭에서 작업에 대해 지정된 언어와 일치해야 합니다.

   코드에서 입력 노드를 참조할 때 AWS Glue Studio는 작업 다이어그램 노드에서 반환된 `DynamicFrames`의 이름을 생성 순서에 따라 순차적으로 지정합니다. 코드에 다음 이름 지정 방법 중 하나를 선택합니다.
   + 클래식 코드 생성 - 함수 이름을 사용하여 작업 다이어그램에서 노드를 참조합니다.
     + 데이터 원본 노드: `DataSource0`, `DataSource1`, `DataSource2` 등.
     + 변환 노드: `Transform0`, `Transform1`, `Transform2` 등.
   + 새 코드 생성 - 노드의 **노드 속성(Node properties)** 탭에서 지정된 이름에 '`_node1`', '`_node2`' 등을 추가하여 사용합니다. 예: `S3bucket_node1`, `ApplyMapping_node2`, `S3bucket_node2`, `MyCustomNodeName_node1`.

   새 코드 생성기에 대한 자세한 내용은 [스크립트 코드 생성](job-editor-features.md#code-gen) 섹션을 참조하세요.

다음 예는 코드 상자에 입력할 코드의 포맷을 보여줍니다.

------
#### [ Python ]

다음 예제에서는 처음 수신한 `DynamicFrame`을 가져와 `DataFrame`으로 변환하여 기본 필터 방식을 적용한 다음(1,000개 이상의 투표가 있는 레코드만 유지) 반환하기 전에 다시 `DynamicFrame`으로 변환합니다.

```
def FilterHighVoteCounts (glueContext, dfc) -> DynamicFrameCollection:
    df = dfc.select(list(dfc.keys())[0]).toDF()
    df_filtered = df.filter(df["vote_count"] > 1000)
    dyf_filtered = DynamicFrame.fromDF(df_filtered, glueContext, "filter_votes")
    return(DynamicFrameCollection({"CustomTransform0": dyf_filtered}, glueContext))
```

------
#### [ Scala ]

다음 예제에서는 처음 수신한 `DynamicFrame`을 가져와 `DataFrame`으로 변환하여 기본 필터 방식을 적용한 다음(1,000개 이상의 투표가 있는 레코드만 유지) 반환하기 전에 다시 `DynamicFrame`으로 변환합니다.

```
object FilterHighVoteCounts {
  def execute(glueContext : GlueContext, input : Seq[DynamicFrame]) : Seq[DynamicFrame] = {
    val frame = input(0).toDF()
    val filtered = DynamicFrame(frame.filter(frame("vote_count") > 1000), glueContext)
    Seq(filtered)
  }
}
```

------

## 사용자 정의 변환 노드에서 스키마 편집
<a name="transforms-custom-editschema"></a>

사용자 지정 변환 노드를 사용하는 경우 AWS Glue Studio는 변환을 통해 생성되는 출력 스키마를 자동으로 유추할 수 없습니다. 스키마 편집기를 사용하여 사용자 정의 변환 코드에 의해 구현된 스키마 변경 사항을 설명합니다.

사용자 정의 코드 노드에는 사용자 정의 코드에 대한 입력으로 `DynamicFrame`을 제공하는 상위 노드가 여러 개 있을 수 있습니다. 사용자 정의 코드 노드는 `DynamicFrames`의 컬렉션을 반환합니다. 입력으로 사용되는 각 `DynamicFrame`에는 연결된 스키마가 있습니다. 사용자 정의 코드 노드에서 반환된 각 `DynamicFrame`을 설명하는 스키마를 추가해야 합니다.

**참고**  
 사용자 지정 변환에서 사용자 고유의 스키마를 설정하면 AWS Glue Studio에서는 이전 노드의 스키마를 상속하지 않습니다. 스키마를 업데이트하려면 사용자 지정(Custom transform) 변환 노드를 선택한 다음 데이터 미리 보기(Data preview) 탭을 선택합니다. 미리 보기가 생성되면 '미리 보기 스키마 사용(Use Preview Schema)'을 선택합니다. 그러면 스키마가 미리 보기 데이터를 사용하는 스키마로 대체됩니다.

**사용자 정의 변환 노드에 대한 출력 스키마를 편집하려면**

1. 작업 다이어그램에서 사용자 정의 변환 노드를 선택한 상태에서 노드 세부 정보 패널에서 [**출력 스키마(Output schema)**] 탭을 선택합니다.

1. [**편집(Edit)**]을 선택하여 스키마를 변경합니다.

   배열 또는 객체와 같은 중첩 데이터 속성 키가 있는 경우 각 스키마 패널의 오른쪽 상단에 있는 [**행 확장(Expand-Rows)**] 아이콘(![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/expand-rows-icon.png))을 선택하여 하위 데이터 속성 키 목록을 확장할 수 있습니다. 이 아이콘을 선택하면 하위 속성 키 목록을 축소하도록 선택할 수 있는 [**행 축소(Collapse-Rows)**] 아이콘(![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/collapse-rows-icon.png))으로 변경됩니다.

1. 페이지 오른쪽 섹션에서 다음 작업을 사용하여 스키마를 수정합니다.
   + 속성 키의 이름을 바꾸려면 속성 키의 [**키(Key)**] 텍스트 상자에 커서를 놓고 새 이름을 입력합니다.
   + 속성 키의 데이터 유형을 변경하려면 목록을 사용하여 속성 키의 새 데이터 유형을 선택합니다.
   + 스키마에 새 최상위 속성 키를 추가하려면 [**취소(Cancel)**] 버튼 왼쪽에 있는 [**오버플로(Overflow)**](![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/edit-schema-actions-button.png)) 아이콘을 선택한 다음 [**루트 키 추가(Add root key)**]를 선택합니다.
   + 스키마에 하위 속성 키를 추가하려면 상위 키와 연결된 [**키 추가(Add-Key)**] 아이콘 ![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/filter-add-icon.png)을 선택합니다. 하위 키의 이름을 입력하고 데이터 유형을 선택합니다.
   + 스키마에서 속성 키를 제거하려면 키 이름의 맨 오른쪽에 있는 [**제거(Remove)**] 아이콘(![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/delete-icon-black.png))을 선택합니다.

1. 사용자 정의 변환 코드가 여러 `DynamicFrames`를 사용하는 경우 출력 스키마를 더 추가할 수 있습니다.
   + 비어 있는 새 스키마를 추가하려면 [**오버플로(Overflow)**](![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/edit-schema-actions-button.png)) 아이콘을 선택한 다음 [**출력 스키마 추가(Add output schema)**]를 선택합니다.
   + 기존 스키마를 새 출력 스키마로 복사하려면 복사하려는 스키마가 스키마 선택기에 표시되는지 확인합니다. [**오버플로(Overflow)**](![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/edit-schema-actions-button.png)) 아이콘을 선택한 다음 [**복제(Duplicate)**]를 선택합니다.

   출력 스키마를 제거하려면 복사하려는 스키마가 스키마 선택기에 표시되는지 확인합니다. [**오버플로(Overflow)**](![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/edit-schema-actions-button.png)) 아이콘을 선택한 다음 [**삭제(Delete)**]를 선택합니다.

1. 새 스키마에 새 루트 키를 추가하거나 복제된 키를 편집합니다.

1. 출력 스키마를 수정할 때 [**적용(Apply)**] 버튼을 선택하여 변경 사항을 저장하고 스키마 편집기를 종료합니다.

   변경 사항을 저장하지 않으려면 [**취소(Cancel)**] 버튼을 선택합니다.

## 사용자 정의 변환 출력 구성
<a name="transforms-custom-output"></a>

사용자 정의 코드 변환은 결과 집합에 `DynamicFrame`이 하나만 있더라도 `DynamicFrames`의 컬렉션을 반환합니다.

**사용자 정의 변환 노드에서 출력을 처리하려면**

1. 사용자 정의 변환 노드가 상위 노드로 있는 *SelectFromCollection* 변환 노드를 추가합니다. 이 변환을 업데이트하여 사용하려는 데이터 집합을 나타냅니다. 자세한 정보는 [SelectFromCollection을 사용하여 유지할 데이터 집합 선택](transforms-configure-select-collection.md)을 참조하세요.

1. 사용자 정의 변환 노드에서 생성된 추가 `DynamicFrames`를 사용하려면 작업 다이어그램에 *SelectFromCollection* 변환을 더 추가합니다.

   항공 데이터 집합을 여러 데이터 집합으로 분할하기 위해 사용자 정의 변환 노드를 추가하지만 비행 날짜 또는 항공편 번호와 같은 각 출력 스키마에서 일부 식별 속성 키를 복제하는 시나리오를 고려하세요. 사용자 정의 변환 노드를 상위 항목로 사용하여 각 출력 스키마에 대해 *SelectFromCollection* 변환 노드를 추가합니다.

1. (선택 사항) 그런 다음 각 *SelectFromCollection* 변환 노드를 작업의 다른 노드에 대한 입력으로 사용하거나 데이터 대상 노드의 부모로 사용할 수 있습니다.

# 사용자 지정 시각적 변환으로 데이터 변환
<a name="custom-visual-transform"></a>

 사용자 지정 시각적 변환을 사용하면 변환을 생성하여 AWS Glue Studio 작업에 사용할 수 있습니다. 사용자 지정 시각적 변환을 사용하면 코딩에 익숙하지 않은 ETL 개발자도 AWS Glue Studio 인터페이스를 사용하여 점점 늘어나는 변환 라이브러리를 검색하고 사용할 수 있습니다.

 사용자 지정 시각적 변환을 생성한 다음 Amazon S3에 업로드하여 AWS Glue Studio의 시각적 편집기를 통해 이러한 작업을 수행하는 데 사용할 수 있습니다.

**Topics**
+ [사용자 지정 시각적 변환 시작하기](custom-visual-transform-getting-started.md)
+ [1단계. JSON 구성 파일 생성](custom-visual-transform-json-config-file.md)
+ [2단계. 변환 로직 구현](custom-visual-transform-implementation.md)
+ [3단계. AWS Glue Studio에서 사용자 지정 시각적 변환을 검증하고 문제를 해결합니다.](custom-visual-transform-validation.md)
+ [4단계. 필요에 따라 사용자 지정 시각적 변환 업데이트](custom-visual-transform-updating-transforms.md)
+ [5단계. AWS Glue Studio에서 사용자 지정 시각적 변환 사용](custom-visual-transform-create-gs.md)
+ [사용 예제:](custom-visual-transform-example-json.md)
+ [사용자 지정 시각적 스크립트의 예](custom-visual-transform-example-scripts.md)
+ [비디오](#custom-visual-transform-video)

# 사용자 지정 시각적 변환 시작하기
<a name="custom-visual-transform-getting-started"></a>

 사용자 지정 시각적 변환을 생성하려면 다음 단계를 따라야 합니다.
+  1단계. JSON 구성 파일 생성 
+  2단계. 변환 로직 구현 
+  3단계. 사용자 지정 시각적 변환 검증 
+  4단계. 필요에 따라 사용자 지정 시각적 변환 업데이트 
+  5단계. AWS Glue Studio에서 사용자 지정 시각적 변환 사용 

 Amazon S3 버킷을 설정하여 시작하고 **1단계로 진행합니다. JSON 구성 파일을 생성합니다.**

## 사전 조건
<a name="custom-visual-transform-prerequisites"></a>

 고객이 제공한 변환은 고객 AWS 계정 내에 있습니다. 해당 계정은 변환을 소유하므로 변환 내용을 보거나(검색 및 사용) 편집하거나 삭제할 수 있는 모든 권한을 가집니다.

 AWS Glue Studio에서 사용자 지정 변환을 사용하려면 다음 두 파일을 생성하여 해당 AWS 계정의 Amazon S3 자산 버킷에 업로드해야 합니다.
+  **Python 파일** - 변환 함수를 포함합니다.
+  **JSON 파일** - 변환을 설명합니다. 이 파일은 변환을 정의하는 데 필요한 구성 파일이라고도 합니다.

 파일을 함께 연결하려면 두 파일에 동일한 이름을 사용하세요. 예제: 
+  myTransform.json 
+  myTransform.py 

 선택적으로 아이콘이 포함된 **SVG 파일**을 제공하여 사용자 지정 시각적 변환에 사용자 지정 아이콘을 제공할 수 있습니다. 파일을 함께 페어링하려면 아이콘에서 동일한 이름을 사용합니다.
+  myTransform.svg 

 AWS Glue Studio에서는 각 파일 이름을 사용하여 자동으로 일치시킵니다. 기존 모듈의 파일 이름은 같을 수 없습니다.

## 변환 파일 이름에 대한 권장 규칙
<a name="custom-visual-transform-recommended-transform-file-name"></a>

 AWS Glue Studio에서는 파일을 작업 스크립트에 모듈(예: `import myTransform`)로 가져옵니다. 따라서 파일 이름은 Python 변수 이름(식별자)에 설정된 것과 동일한 이름 지정 규칙을 따라야 합니다. 특히 문자 또는 밑줄로 시작하고 그 뒤에는 문자, 숫자 및/또는 밑줄로만 구성되어야 합니다.

**참고**  
 예기치 못한 런타임 문제를 방지하려면 변환 파일 이름이 기존에 로드된 Python 모듈(예: `sys, array, copy` 등)과 충돌하지 않는지 확인하세요.

## Amazon S3 버킷 설정
<a name="custom-visual-transform-setting-up-s3"></a>

 생성된 변환은 Amazon S3에 저장되며 사용자 AWS 계정에서 소유합니다. 모든 작업 스크립트가 현재 저장되어 있는 Amazon S3 자산 폴더(예: `s3://aws-glue-assets-<accountid>-<region>/transforms`)에 파일(json 및 py)을 업로드하면 새로운 사용자 지정 시각적 변환이 자동으로 생성됩니다. 사용자 지정 아이콘을 사용하는 경우 아이콘도 업로드합니다. 기본적으로 AWS Glue Studio에서는 동일한 S3 버킷의 /transforms 폴더에서 모든 .json 파일을 읽습니다.

# 1단계. JSON 구성 파일 생성
<a name="custom-visual-transform-json-config-file"></a>

 JSON 구성 파일은 사용자 지정 시각적 변환을 정의하고 설명하는 데 필요합니다. 구성 파일의 스키마는 다음과 같습니다.

## JSON 파일 구조
<a name="custom-visual-transform-json-file-structure"></a>

 **필드** 
+  `name: string` - (필수) 변환을 식별하는 데 사용되는 변환 시스템 이름입니다. Python 변수 이름(식별자)에 설정된 것과 동일한 이름 지정 규칙을 따릅니다. 특히 문자 또는 밑줄로 시작하고 그 뒤에는 문자, 숫자 및/또는 밑줄로만 구성되어야 합니다.
+  `displayName: string` - (선택 사항) AWS Glue Studio 시각적 작업 편집기에 표시되는 변환의 이름입니다. `displayName`을 지정하지 않은 경우 `name`이 AWS Glue Studio에서 변환의 이름으로 사용됩니다.
+  `description: string` - (선택 사항) 변환 설명이 AWS Glue Studio에 표시되고 검색할 수 있습니다.
+  `functionName: string` - (필수) Python 함수 이름은 Python 스크립트에서 호출할 함수를 식별하는 데 사용됩니다.
+  `path: string` - (선택 사항) Python 소스 파일의 전체 Amazon S3 경로입니다. 지정하지 않은 경우 AWS Glue에서는 파일 이름 일치를 사용하여 .json 파일과 .py 파일을 함께 연결합니다. 예를 들어 `myTransform.json` JSON 파일은 동일한 Amazon S3 위치에 있는 Python 파일 `myTransform.py`와 연결됩니다.
+  `parameters: Array of TransformParameter object` - (선택 사항) AWS Glue Studio 시각적 편집기에서 파라미터를 구성할 때 표시할 파라미터 목록입니다.

<a name="transformparameter-fields"></a> **TransformParameter fields** 
+  `name: string` - (필수) Python 함수에 작업 스크립트에서 명명된 인수로 전달될 파라미터 이름입니다. Python 변수 이름(식별자)에 설정된 것과 동일한 이름 지정 규칙을 따릅니다. 특히 문자 또는 밑줄로 시작하고 그 뒤에는 문자, 숫자 및/또는 밑줄로만 구성되어야 합니다.
+  `displayName: string` - (선택 사항) AWS Glue Studio 시각적 작업 편집기에 표시되는 변환의 이름입니다. `displayName`을 지정하지 않은 경우 `name`이 AWS Glue Studio에서 변환의 이름으로 사용됩니다.
+  `type: string` - (필수) 일반적인 Python 데이터 유형을 허용하는 파라미터 유형입니다. 유효한 값: 'str' \$1 'int' \$1 'float' \$1 'list' \$1 'bool'.
+  `isOptional: boolean` - (선택 사항) 파라미터가 선택 사항인지 여부를 결정합니다. 기본적으로 모든 파라미터는 필수입니다.
+  `description: string` - (선택 사항) 사용자가 변환 파라미터를 구성하는 데 도움이 되는 설명이 AWS Glue Studio에 표시됩니다.
+  `validationType: string` - (선택 사항) 이 파라미터의 유효성을 검사하는 방법을 정의합니다. 현재는 정규 표현식만 지원합니다. 기본적으로 검증 유형은 `RegularExpression`으로 설정됩니다.
+  `validationRule: string` - (선택 사항) `validationType`을 `RegularExpression`으로 설정한 경우에 제출하기 전에 양식 입력을 검증하는 데 사용되는 정규 표현식입니다. 정규 표현식 구문은 [RegExp Ecmascript 사양](https://tc39.es/ecma262/multipage/text-processing.html#sec-regexp-regular-expression-objects)과 호환되어야 합니다.
+  `validationMessage: string` - (선택 사항) 검증에 실패한 경우에 표시할 메시지입니다.
+  `listOptions: An array of TransformParameterListOption object`, `string` 또는 문자열 값 'column' - (선택 사항) 선택 또는 다중 선택 UI 제어에 표시할 옵션입니다. 쉼표로 구분된 값 목록 또는 강력한 형식의 `TransformParameterListOption` JSON 객체 유형을 허용합니다. 또한 문자열 값 'column'을 지정하여 상위 노드 스키마의 열 목록을 동적으로 채울 수 있습니다.
+  `listType: string` - (선택 사항) type = 'list'에 대한 옵션 유형을 정의합니다. 유효한 값: 'str' \$1 'int' \$1 'float' \$1 'list' \$1 'bool'. 일반적인 Python 데이터 유형을 허용하는 파라미터 유형입니다.

 **TransformParameterListOption 필드** 
+  `value: string | int | float | bool` - (필수) 옵션 값입니다.
+  `label: string` - (선택 사항) 선택 드롭다운에 표시되는 옵션 레이블입니다.

## AWS Glue Studio의 파라미터 변환
<a name="custom-visual-transform-parameters"></a>

 .json 파일에 `isOptional`로 표시되지 않는 한 기본적으로 파라미터가 필요합니다. AWS Glue Studio에서는 파라미터가 **Transform**(변환) 탭에 표시됩니다. 이 예에서는 이메일 주소, 전화번호, 나이, 성별, 출신 국가와 같은 사용자 정의 파라미터를 보여줍니다.

![\[스크린샷은 선택한 사용자 지정 시각적 변환과 사용자 정의 파라미터가 있는 Transform(변환) 탭을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/dynamic-transform-parameters.png)


 `validationMessage`에서 `validationRule` 파라미터를 지정하고 검증 메시지를 지정하여 json 파일에서 정규 표현식을 통해 AWS Glue Studio에서 일부 검증을 적용할 수 있습니다.

```
      "validationRule": "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
      "validationMessage": "Please enter a valid US number"
```

**참고**  
 검증은 브라우저에서 수행되므로 정규 표현식 구문은 [RegExp Ecmascript 사양](https://tc39.es/ecma262/multipage/text-processing.html#sec-regexp-regular-expression-objects)과 호환되어야 합니다. Python 구문은 이러한 정규 표현식에 지원되지 않습니다.

 검증을 추가하면 사용자가 잘못된 사용자 입력으로 작업을 저장하는 것을 방지할 수 있습니다. AWS Glue Studio에서는 예제에 표시된 대로 검증 메시지를 표시합니다.

![\[스크린샷은 검증 오류 메시지와 함께 사용자 지정 시각적 변환 파라미터를 보여줍니다. 유효한 이메일 주소를 입력하세요.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/dynamic-transform-validation-message.png)


 파라미터는 파라미터 구성에 따라 AWS Glue Studio에 표시됩니다.
+  `type`이 `str`, `int` 또는 `float`일 때 텍스트 입력 필드가 표시됩니다. 예를 들어 스크린샷은 'Email Address' 및 'Your age' 파라미터의 입력 필드를 보여줍니다.  
![\[스크린샷은 텍스트 입력 필드가 있는 사용자 지정 시각적 변환 파라미터를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/dynamic-transform-email-address.png)  
![\[스크린샷은 텍스트 입력 필드가 있는 사용자 지정 시각적 변환 파라미터를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/dynamic-transform-your-age.png)
+  `type`이 `bool`이면 확인란이 표시됩니다.  
![\[스크린샷은 텍스트 입력 필드가 있는 사용자 지정 시각적 변환 파라미터를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/dynamic-transform-bool.png)
+  `type`이 `str`이고 `listOptions`가 제공되면 단일 선택 목록이 표시됩니다.  
![\[스크린샷은 단일 선택 목록 드롭다운이 있는 사용자 지정 시각적 변환 파라미터를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/dynamic-transform-single-list.png)
+  `type`이 `list` 및 `listOptions`이고 `listType`이 제공되면 다중 선택 목록이 표시됩니다.  
![\[스크린샷은 목록 드롭다운이 있는 사용자 지정 시각적 변환 파라미터를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/dynamic-transform-list-options.png)

### 열 선택기를 파라미터로 표시
<a name="custom-visual-transform-parameters-column-selector"></a>

 구성 시 사용자가 스키마에서 열을 선택해야 하는 경우 열 선택기를 표시할 수 있습니다. 이 경우 사용자가 열 이름을 입력하지 않아도 됩니다. `listOptions` 필드를 'column'으로 설정하면 AWS Glue Studio에서는 상위 노드 출력 스키마를 기반으로 열 선택기를 표시합니다. AWS Glue Studio에서는 단일 또는 다중 열 선택기를 표시할 수 있습니다.

 다음 예제에서는 스키마를 사용합니다.

![\[스크린샷은 출력 스키마 샘플을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/custom-visual-transform-example-schema.png)


**단일 열을 표시하도록 사용자 지정 시각적 변환 파라미터를 정의하려면:**

1.  JSON 파일에서 `parameters` 객체의 `listOptions` 값을 'column'으로 설정합니다. 이렇게 하면 사용자가 AWS Glue Studio의 선택 목록에서 열을 선택할 수 있습니다.  
![\[스크린샷은 AWS Glue Studio에서 listOptions 파라미터가 'column'으로 설정된 JSON 샘플 파일과 그 결과로 나타나는 사용자 인터페이스를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/custom-visual-transform-example-listoptions-column.png)

1.  파라미터를 다음과 같이 정의하여 여러 열을 선택할 수도 있습니다.
   +  `listOptions: "column"` 
   +  `type: "list"`   
![\[스크린샷은 AWS Glue Studio에서 listOptions 파라미터가 'column'으로, 유형이 'list'로 설정된 JSON 샘플 파일과 그 결과로 나타나는 사용자 인터페이스를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/custom-visual-transform-example-listoptions-column-type-list.png)

# 2단계. 변환 로직 구현
<a name="custom-visual-transform-implementation"></a>

**참고**  
 사용자 지정 시각적 변환은 Python 스크립트만 지원합니다. Scala는 지원되지 않습니다.

 .json 구성 파일에 정의된 함수를 구현하는 코드를 추가하려면 Python 파일을 .json 파일과 동일한 위치에 이름은 동일하지만 “.py” 확장자로 저장하는 것이 좋습니다. AWS Glue Studio에서는 .json 파일과 .py 파일을 자동으로 연결하므로 구성 파일에 Python 파일의 경로를 지정할 필요가 없습니다.

 Python 파일에서 명명된 파라미터를 구성하여 선언된 함수를 추가하고 `DynamicFrame`에서 사용하기 위해 함수를 등록합니다. 다음은 Python 파일의 예제입니다.

```
from awsglue import DynamicFrame

# self refers to the DynamicFrame to transform, 
# the parameter names must match the ones defined in the config
# if it's optional, need to provide a default value
def myTransform(self, email, phone, age=None, gender="", 
                      country="", promotion=False):
   resulting_dynf = # do some transformation on self 
   return resulting_dynf
   
DynamicFrame.myTransform = myTransform
```

 Python 코드를 가장 빠르게 개발하고 테스트하려면 AWS Glue 노트북을 사용하는 것이 좋습니다. [AWS Glue Studio에서 노트북 시작하기](https://docs.aws.amazon.com/glue/latest/ug/notebook-getting-started.html)를 참조하세요.

 변환 로직을 구현하는 방법을 설명하기 위해 아래 예제의 사용자 지정 시각적 변환은 들어오는 데이터를 필터링하여 특정 미국 주와 관련된 데이터만 유지하는 변환입니다. .json 파일에는 `functionName`에 대한 파라미터(`custom_filter_state`)와 두 개의 인수(유형이 “str”인 “state” 및 “colName”)가 포함되어 있습니다.

 예제 구성 .json 파일은 다음과 같습니다.

```
{
"name": "custom_filter_state",
"displayName": "Filter State",
"description": "A simple example to filter the data to keep only the state indicated.",
"functionName": "custom_filter_state",
"parameters": [
   {
    "name": "colName",
    "displayName": "Column name",
    "type": "str",
    "description": "Name of the column in the data that holds the state postal code"
   },
   {
    "name": "state",
    "displayName": "State postal code",
    "type": "str",
    "description": "The postal code of the state whole rows to keep"
   }   
  ]
}
```

**Python에서 컴패니언 스크립트를 구현하려면**

1.  AWS Glue 노트북을 시작하고 시작할 세션에 제공된 초기 셀을 실행합니다. 초기 셀을 실행하면 필요한 기본 구성 요소가 생성됩니다.

1.  예제에 설명된 대로 필터링을 수행하는 함수를 생성하고 `DynamicFrame`에 등록합니다. 아래 코드를 복사하여 AWS Glue 노트북의 셀에 붙여 넣습니다.

   ```
   from awsglue import DynamicFrame
   
   def custom_filter_state(self, colName, state):
       return self.filter(lambda row: row[colName] == state)
   
   DynamicFrame.custom_filter_state = custom_filter_state
   ```

1.  샘플 데이터를 생성하거나 로드하여 동일한 셀 또는 새 셀에서 코드를 테스트합니다. 새 셀에 샘플 데이터를 추가하는 경우 셀을 실행하는 것을 잊지 마세요. 예제: 

   ```
   # A few of rows of sample data to test
   data_sample = [
       {"state": "CA", "count": 4},
       {"state": "NY", "count": 2},
       {"state": "WA", "count": 3}    
   ]
   df1 = glueContext.sparkSession.sparkContext.parallelize(data_sample).toDF()
   dynf1 = DynamicFrame.fromDF(df1, glueContext, None)
   ```

1.  다른 인수를 사용하여 “custom\$1filter\$1state”를 검증하려면 테스트하세요.  
![\[스크린샷은 dynamicFrame.show 함수에 전달된 인수가 있는 AWS Glue 노트북의 셀을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/dynamic-transform-notebook-test-python.png)

1.  여러 테스트를 실행한 후 확장명이 .py인 코드를 저장하고 .json 파일 이름을 미러링하는 이름으로 .py 파일의 이름을 지정합니다. .py 파일과 .json 파일은 동일한 변환 폴더에 있어야 합니다.

    다음 코드를 복사하여 파일에 붙여넣고 .py 파일 확장명으로 이름을 바꿉니다.

   ```
   from awsglue import DynamicFrame
   
   def custom_filter_state(self, colName, state):
       return self.filter(lambda row: row[colName] == state)
   
   DynamicFrame.custom_filter_state = custom_filter_state
   ```

1.  AWS Glue Studio에서 시각적 작업을 열고 사용 가능한 **Transforms**(변환) 목록에서 선택하여 작업에 변환을 추가합니다.

    Python 스크립트 코드에서 이 변환을 다시 사용하려면 “참조된 파일 경로” 아래의 작업에 있는 .py 파일에 Amazon S3 경로를 추가하고 스크립트에서 Python 파일 이름(확장자 제외)을 파일 상단에 추가하여 가져옵니다. 예를 들면 다음과 같습니다. `import` <name of the file (without the extension)> 

# 3단계. AWS Glue Studio에서 사용자 지정 시각적 변환을 검증하고 문제를 해결합니다.
<a name="custom-visual-transform-validation"></a>

 AWS Glue Studio에서는 사용자 지정 시각적 변환이 AWS Glue Studio에 로드되기 전에 JSON 구성 파일을 검증합니다. 검증에는 다음이 포함됩니다.
+  필수 필드의 존재 여부 
+  JSON 형식 검증 
+  올바르지 않거나 유효하지 않은 파라미터 
+  .py 파일과 .json 파일이 동일한 Amazon S3 경로에 모두 존재하는지 여부 
+  .py와 .json의 파일 이름 일치 

 검증이 성공하면 변환이 시각적 편집기의 사용 가능한 **Actions**(작업) 목록에 나열됩니다. 사용자 지정 아이콘이 제공된 경우 **작업** 옆에 표시되어야 합니다.

 검증에 실패할 경우 AWS Glue Studio에서는 사용자 지정 시각적 변환을 로드하지 않습니다.

# 4단계. 필요에 따라 사용자 지정 시각적 변환 업데이트
<a name="custom-visual-transform-updating-transforms"></a>

 변환이 해당 json 정의를 따르는 한 변환 스크립트를 생성하고 사용한 이후에 업데이트할 수 있습니다.
+  DynamicFrame에 할당할 때 사용되는 이름은 json `functionName`과 일치해야 합니다.
+  함수 인수는 [1단계. JSON 구성 파일 생성](custom-visual-transform-json-config-file.md)에 설명된 대로 json 파일에 정의되어야 합니다.
+  작업이 Python 파일에 직접 의존하므로 Python 파일의 Amazon S3 경로는 변경할 수 없습니다.

**참고**  
 업데이트가 필요한 경우 스크립트와 .json 파일이 지속적으로 업데이트되고 모든 시각적 작업이 새 변환과 함께 올바르게 다시 저장되었는지 확인하세요. 업데이트 후 시각적 작업을 저장하지 않으면 업데이트가 적용 및 검증되지 않습니다. Python 스크립트 파일의 이름이 바뀌거나 .json 파일 옆에 배치되지 않은 경우 .json 파일에 전체 경로를 지정해야 합니다.

**사용자 지정 아이콘**

워크플로의 일부에서 **작업**의 기본 아이콘이 시각적으로 구분되지 않는다고 판단되면 [사용자 지정 시각적 변환 시작하기](custom-visual-transform-getting-started.md)에 설명된 대로 사용자 지정 아이콘을 제공할 수 있습니다. Amazon S3에 호스팅된 해당 SVG를 업데이트하여 아이콘을 업데이트할 수 있습니다.

최상의 결과를 얻으려면 Cloudscape Design System의 지침에 따라 32x32px로 표시되도록 이미지를 설계합니다. Cloudscape 지침에 대한 자세한 내용은 [Cloudscape 설명서](https://cloudscape.design/foundation/visual-foundation/iconography/#custom-icons)를 참조하세요.

# 5단계. AWS Glue Studio에서 사용자 지정 시각적 변환 사용
<a name="custom-visual-transform-create-gs"></a>

 AWS Glue Studio에서 사용자 지정 시각적 변환을 사용하려면 구성 및 소스 파일을 업로드한 다음 **Action**(작업) 메뉴에서 변환을 선택합니다. 값 또는 입력이 필요한 파라미터는 **Transform**(변환) 탭에서 사용할 수 있습니다.

1.  두 파일(Python 소스 파일 및 JSON 구성 파일)을 작업 스크립트가 저장되는 Amazon S3 자산 폴더에 업로드합니다. 기본적으로 AWS Glue에서는 동일한 Amazon S3 버킷의 **/transforms** 폴더에서 모든 .json 파일을 가져옵니다.

1.  **Action**(작업) 메뉴에서 사용자 지정 시각적 변환을 선택합니다. .json 구성 파일에 지정된 변환 `displayName` 또는 이름으로 이름이 지정됩니다.

1.  구성 파일에 구성된 모든 파라미터의 값을 입력합니다.  
![\[스크린샷은 사용자가 Transform(변환) 탭에서 완료할 파라미터와 사용자 지정 시각적 변환을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/dynamic-transform-parameters.png)

# 사용 예제:
<a name="custom-visual-transform-example-json"></a>

 다음은 .json 구성 파일에 있는 모든 가능한 파라미터의 예입니다.

```
{
  "name": "MyTransform",
  "displayName": "My Transform",
  "description": "This transform description will be displayed in UI",
  "functionName": "myTransform",
  "parameters": [
      {
      "name": "email",
      "displayName": "Email Address",
      "type": "str",
      "description": "Enter your work email address below",
      "validationType": "RegularExpression",
      "validationRule": "^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$",
      "validationMessage": "Please enter a valid email address"
    },
    {
      "name": "phone",
      "displayName": "Phone Number",
      "type": "str",
      "description": "Enter your mobile phone number below",
      "validationRule": "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
      "validationMessage": "Please enter a valid US number"
    },
    {
      "name": "age",
      "displayName": "Your age",
      "type": "int",
      "isOptional": true
    },
    {
      "name": "gender",
      "displayName": "Your gender",
      "type": "str",
      "listOptions": [
            {"label": "Male", "value": "male"},
            {"label": "Female", "value": "female"},
            {"label": "Other", "value": "other"}
        ],
      "isOptional": true
    },
    {
      "name": "country",
      "displayName": "Your origin country ?",
      "type": "list",
      "listOptions": "Afghanistan,Albania,Algeria,American Samoa,Andorra,Angola,Anguilla,Antarctica,Antigua and Barbuda,Argentina,Armenia,Aruba,Australia,Austria,Azerbaijan,Bahamas,Bahrain,Bangladesh,Barbados,Belarus,Belgium,Belize,Benin,Bermuda,Bhutan,Bolivia,Bosnia and Herzegovina,Botswana,Bouvet Island,Brazil,British Indian Ocean Territory,Brunei Darussalam,Bulgaria,Burkina Faso,Burundi,Cambodia,Cameroon,Canada,Cape Verde,Cayman Islands,Central African Republic,Chad,Chile,China,Christmas Island,Cocos (Keeling Islands),Colombia,Comoros,Congo,Cook Islands,Costa Rica,Cote D'Ivoire (Ivory Coast),Croatia (Hrvatska,Cuba,Cyprus,Czech Republic,Denmark,Djibouti,Dominica,Dominican Republic,East Timor,Ecuador,Egypt,El Salvador,Equatorial Guinea,Eritrea,Estonia,Ethiopia,Falkland Islands (Malvinas),Faroe Islands,Fiji,Finland,France,France,Metropolitan,French Guiana,French Polynesia,French Southern Territories,Gabon,Gambia,Georgia,Germany,Ghana,Gibraltar,Greece,Greenland,Grenada,Guadeloupe,Guam,Guatemala,Guinea,Guinea-Bissau,Guyana,Haiti,Heard and McDonald Islands,Honduras,Hong Kong,Hungary,Iceland,India,Indonesia,Iran,Iraq,Ireland,Israel,Italy,Jamaica,Japan,Jordan,Kazakhstan,Kenya,Kiribati,Korea (North),Korea (South),Kuwait,Kyrgyzstan,Laos,Latvia,Lebanon,Lesotho,Liberia,Libya,Liechtenstein,Lithuania,Luxembourg,Macau,Macedonia,Madagascar,Malawi,Malaysia,Maldives,Mali,Malta,Marshall Islands,Martinique,Mauritania,Mauritius,Mayotte,Mexico,Micronesia,Moldova,Monaco,Mongolia,Montserrat,Morocco,Mozambique,Myanmar,Namibia,Nauru,Nepal,Netherlands,Netherlands Antilles,New Caledonia,New Zealand,Nicaragua,Niger,Nigeria,Niue,Norfolk Island,Northern Mariana Islands,Norway,Oman,Pakistan,Palau,Panama,Papua New Guinea,Paraguay,Peru,Philippines,Pitcairn,Poland,Portugal,Puerto Rico,Qatar,Reunion,Romania,Russian Federation,Rwanda,Saint Kitts and Nevis,Saint Lucia,Saint Vincent and The Grenadines,Samoa,San Marino,Sao Tome and Principe,Saudi Arabia,Senegal,Seychelles,Sierra Leone,Singapore,Slovak Republic,Slovenia,Solomon Islands,Somalia,South Africa,S. Georgia and S. Sandwich Isls.,Spain,Sri Lanka,St. Helena,St. Pierre and Miquelon,Sudan,Suriname,Svalbard and Jan Mayen Islands,Swaziland,Sweden,Switzerland,Syria,Tajikistan,Tanzania,Thailand,Togo,Tokelau,Tonga,Trinidad and Tobago,Tunisia,Turkey,Turkmenistan,Turks and Caicos Islands,Tuvalu,Uganda,Ukraine,United Arab Emirates,United Kingdom (Britain / UK),United States of America (USA),US Minor Outlying Islands,Uruguay,Uzbekistan,Vanuatu,Vatican City State (Holy See),Venezuela,Viet Nam,Virgin Islands (British),Virgin Islands (US),Wallis and Futuna Islands,Western Sahara,Yemen,Yugoslavia,Zaire,Zambia,Zimbabwe",
      "description": "What country were you born in?",
      "listType": "str",
      "isOptional": true
    },
    {
      "name": "promotion",
      "displayName": "Do you want to receive promotional newsletter from us?",
      "type": "bool",
      "isOptional": true
    }
  ]
}
```

# 사용자 지정 시각적 스크립트의 예
<a name="custom-visual-transform-example-scripts"></a>

 다음 예에서는 동일한 변환을 수행합니다. 하지만 두 번째 예제(SparkSQL)가 가장 깔끔하고 가장 효율적이며, 그 다음은 Pandas UDF이며, 첫 번째 예제의 하위 수준 매핑이 마지막입니다. 다음 예제는 두 열을 합산하는 간단한 변환의 전체 예입니다.

```
from awsglue import DynamicFrame
 
# You can have other auxiliary variables, functions or classes on this file, it won't affect the runtime
def record_sum(rec, col1, col2, resultCol):
    rec[resultCol] = rec[col1] + rec[col2]
    return rec
 
 
# The number and name of arguments must match the definition on json config file
# (expect self which is the current DynamicFrame to transform
# If an argument is optional, you need to define a default value here
#  (resultCol in this example is an optional argument)
def custom_add_columns(self, col1, col2, resultCol="result"):
    # The mapping will alter the columns order, which could be important
    fields = [field.name for field in self.schema()]
    if resultCol not in fields:
        # If it's a new column put it at the end
        fields.append(resultCol)
    return self.map(lambda record: record_sum(record, col1, col2, resultCol)).select_fields(paths=fields)
 
 
# The name we assign on DynamicFrame must match the configured "functionName"
DynamicFrame.custom_add_columns = custom_add_columns
```

 다음 예제는 SparkSQL API를 활용하는 동일한 변환입니다.

```
from awsglue import DynamicFrame
 
# The number and name of arguments must match the definition on json config file
# (expect self which is the current DynamicFrame to transform
# If an argument is optional, you need to define a default value here
#  (resultCol in this example is an optional argument)
def custom_add_columns(self, col1, col2, resultCol="result"):
    df = self.toDF()
    return DynamicFrame.fromDF(
        df.withColumn(resultCol, df[col1] + df[col2]) # This is the conversion logic
        , self.glue_ctx, self.name) 
 
 
# The name we assign on DynamicFrame must match the configured "functionName"
DynamicFrame.custom_add_columns = custom_add_columns
```

 다음 예제에서는 동일한 변환을 사용하지만 pandas UDF를 사용하므로 일반 UDF를 사용하는 것보다 더 효율적입니다. pandas UDF 작성에 대한 자세한 내용은 [Apache Spark SQL 설명서](https://spark.apache.org/docs/3.1.1/api/python/reference/api/pyspark.sql.functions.pandas_udf.html)를 참조하세요.

```
from awsglue import DynamicFrame
import pandas as pd
from pyspark.sql.functions import pandas_udf
 
# The number and name of arguments must match the definition on json config file
# (expect self which is the current DynamicFrame to transform
# If an argument is optional, you need to define a default value here
#  (resultCol in this example is an optional argument)
def custom_add_columns(self, col1, col2, resultCol="result"):
    @pandas_udf("integer")  # We need to declare the type of the result column
    def add_columns(value1: pd.Series, value2: pd.Series) → pd.Series:
        return value1 + value2
 
    df = self.toDF()
    return DynamicFrame.fromDF(
        df.withColumn(resultCol, add_columns(col1, col2)) # This is the conversion logic
        , self.glue_ctx, self.name) 
 
# The name we assign on DynamicFrame must match the configured "functionName"
DynamicFrame.custom_add_columns = custom_add_columns
```

## 비디오
<a name="custom-visual-transform-video"></a>

다음 동영상은 시각적 사용자 지정 변환을 소개하고 사용 방법을 보여줍니다.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/xFpAhANcVcg/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/xFpAhANcVcg)


# AWS Glue Studio에서 데이터 레이크 프레임워크 사용
<a name="gs-data-lake-formats"></a>

## 개요
<a name="gs-data-lake-formats-overview"></a>

 오픈 소스 데이터 레이크 프레임워크는 Amazon S3에 빌드된 데이터 레이크에 저장된 파일의 증분 데이터 처리를 간소화합니다. AWS Glue 3.0 이상에서는 다음과 같은 오픈 소스 데이터 레이크 스토리지 프레임워크를 지원합니다.
+  Apache Hudi 
+  Linux Foundation Delta Lake 
+  Apache Iceberg 

 AWS Glue 4.0을 기준으로 AWS Glue에서는 Amazon S3에 저장된 데이터를 트랜잭션 형태로 일관성 있게 읽고 쓸 수 있도록 이러한 프레임워크에 대한 기본 지원을 제공합니다. AWS Glue 작업에 이러한 프레임워크를 사용하기 위해 별도의 커넥터를 설치하거나 추가 구성 단계를 완료할 필요가 없습니다.

 데이터 레이크 프레임워크는 Spark 스크립트 편집기 작업을 통해 AWS Glue Studio 내에서 소스 또는 대상으로 사용될 수 있습니다. Apache Hudi, Apache Iceberg, Delta Lake를 사용하는 방법에 대한 자세한 내용은 [AWS Glue ETL 작업에 데이터 레이크 프레임워크 사용](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-datalake-native-frameworks.html)을 참조하세요.

## AWS Glue 스트리밍 소스에서 오픈 테이블 형식 생성
<a name="gs-data-lake-formats-streaming"></a>

AWS Glue 스트리밍 ETL 작업은 스트리밍 소스의 데이터를 지속적으로 소비하고, 전송 중인 데이터를 정리 및 변환하여 몇 초 만에 분석에 사용할 수 있도록 합니다.

AWS 요구 사항을 지원하는 다양한 서비스를 제공합니다. Database Migration Service와 같은 AWS 데이터베이스 복제 서비스는 일반적으로 데이터 레이크의 스토리지 계층을 호스팅하는 Amazon S3로 원본 시스템의 데이터를 복제할 수 있습니다. 온라인 소스 애플리케이션을 지원하는 관계형 데이터베이스 관리 시스템(RDBMS)에서 업데이트를 적용하는 것은 간단하지만 데이터 레이크에 이 CDC 프로세스를 적용하기는 어렵습니다. 오픈 소스 데이터 관리 프레임워크는 증분 데이터 처리 및 데이터 파이프라인 개발을 간소화하는 데 유용한 옵션입니다.

자세한 내용은 다음을 참조하세요.
+ [AWS Glue 스트리밍을 사용하여 Apache Hudi 기반의 실시간에 가까운 트랜잭션 데이터 레이크를 만들 수 있습니다](https://aws.amazon.com/blogs/big-data/create-an-apache-hudi-based-near-real-time-transactional-data-lake-using-aws-dms-amazon-kinesis-aws-glue-streaming-etl-and-data-visualization-using-amazon-quicksight/)
+ [Build a real-time GDPR-aligned Apache Iceberg data lake](https://aws.amazon.com/blogs/big-data/build-a-real-time-gdpr-aligned-apache-iceberg-data-lake/)

# AWS Glue Studio에서 Hudi 프레임워크 사용
<a name="gs-data-lake-formats-hudi"></a>

 작업을 생성하거나 편집할 때 AWS Glue Studio는 사용 중인 AWS Glue의 버전에 따라 해당하는 Hudi 라이브러리를 자동으로 추가합니다. 자세한 내용은 [AWS Glue에서 Hudi 프레임워크 사용](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-hudi.html)을 참조하세요.

## 데이터 카탈로그 데이터 소스에서 Apache Hudi 프레임워크 사용
<a name="gs-data-lake-formats-hudi-source-catalog"></a>

**작업에 Hudi 데이터 소스 형식을 추가하려면**

1.  소스 메뉴에서 AWS Glue Studio 데이터 카탈로그를 선택합니다.

1.  **데이터 소스 속성** 탭에서 데이터베이스와 테이블을 선택합니다.

1.  AWS Glue Studio는 형식 유형을 Apache Hudi와 Amazon S3 URL로 표시합니다.  
![\[스크린샷은 데이터 카탈로그 소스 노드의 데이터 소스 속성 탭을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data_lake_formats_data_catalog_hudi.png)

## Amazon S3 데이터 소스에서 Hudi 프레임워크 사용
<a name="gs-data-lake-formats-hudi-source-s3.title"></a>

1.  소스 메뉴에서 Amazon S3를 선택합니다.

1.  Amazon S3 소스 유형으로 데이터 카탈로그 테이블을 선택한 경우 데이터베이스와 테이블을 선택합니다.

1.  AWS Glue Studio는 형식을 Apache Hudi와 Amazon S3 URL로 표시합니다.

1.  **Amazon S3 소스 유형**으로 Amazon S3 위치를 선택한 경우 **Amazon S3 찾아보기**를 클릭하여 Amazon S3 URL을 선택합니다.

1.  **데이터 형식**에서 Apache Hudi를 선택합니다.
**참고**  
 AWS Glue Studio가 선택한 Amazon S3 폴더 또는 파일에서 스키마를 유추할 수 없는 경우 **추가 옵션**을 선택하여 새 폴더 또는 파일을 선택합니다.  
 **추가 옵션**의 **스키마 추론** 아래에서 다음 옵션을 선택합니다.  
 AWS Glue Studio에서 통해 샘플 파일을 자동으로 선택하도록 하겠습니다. AWS Glue Studio는 스키마를 추론할 수 있도록 Amazon S3 위치에서 샘플 파일을 선택합니다. **자동 샘플링된 파일** 필드에서 자동으로 선택된 파일을 볼 수 있습니다.
 Amazon S3에서 샘플 파일을 선택합니다. **Amazon S3 찾아보기**를 클릭하여 사용할 Amazon S3 파일을 선택합니다.

1.  **스키마 추론**을 클릭합니다. 그런 다음 **출력 스키마** 탭을 클릭하여 출력 스키마를 볼 수 있습니다.

1.  키-값 페어를 입력하려면 **추가 옵션**을 선택합니다.  
![\[이 스크린샷은 Amazon S3 데이터 소스 노드의 데이터 소스 속성 탭에 있는 추가 옵션 섹션을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data_lake_formats_additional_options.png)

## 데이터 대상에서 Apache Hudi 프레임워크 사용
<a name="gs-data-lake-formats-hudi-target"></a>

### 데이터 카탈로그 데이터 대상에서 Apache Hudi 프레임워크 사용
<a name="gs-data-lake-formats-hudi-target-catalog"></a>

1.  **대상** 메뉴에서 AWS Glue Studio 데이터 카탈로그를 선택합니다.

1.  **데이터 소스 속성** 탭에서 데이터베이스와 테이블을 선택합니다.

1.  AWS Glue Studio는 형식 유형을 Apache Hudi와 Amazon S3 URL로 표시합니다.

#### Amazon S3 데이터 대상에서 Apache Hudi 프레임워크 사용
<a name="gs-data-lake-formats-hudi-target-s3"></a>

 값을 입력하거나 사용 가능한 옵션 중에서 선택하여 Apache Hudi 형식을 구성합니다. Apache Hudi에 대한 자세한 내용은 [Apache Hudi 설명서](https://hudi.apache.org/docs/overview)를 참조하세요.

![\[이 스크린샷은 Amazon S3 데이터 소스 노드의 데이터 소스 속성 탭에 있는 추가 옵션 섹션을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/hudi_s3_target_properties.png)

+  **Hudi 테이블 이름** - HUDI 테이블의 이름입니다.
+  **Hudi 스토리지 유형** - 다음 두 가지 옵션 중에서 선택합니다.
  +  **쓸 때 복사** - 읽기 성능을 최적화하기 위해 권장됩니다. Hudi 스토리지의 기본 유형입니다. 업데이트할 때마다 쓰기 중에 새 버전의 파일이 생성됩니다.
  +  **읽을 때 병합** - 쓰기 지연 시간을 최소화하기 위해 권장됩니다. 업데이트는 행 기반 delta 파일에 기록되며 새 버전의 열 형식 파일을 작성할 때 필요에 따라 압축됩니다.
+  **Hudi 쓰기 작업** - 다음 옵션 중에서 선택합니다.
  +  **Upsert** - 인덱스를 조회하여 입력 레코드를 먼저 삽입 또는 업데이트로 태깅하는 기본 작업입니다. 기존 데이터를 업데이트하는 경우에 권장됩니다.
  +  **삽입** - 레코드를 삽입하지만 기존 레코드를 확인하지 않으므로 중복이 발생할 수 있습니다.
  +  **대량 삽입** - 레코드를 삽입하며 대량의 데이터에 권장됩니다.
+  **Hudi 레코드 키 필드** - 검색 창을 사용하여 기본 레코드 키를 검색하고 선택합니다. Hudi의 레코드는 한 쌍의 레코드 키와 해당 레코드가 속한 파티션 경로인 프라이머리 키로 식별됩니다.
+  **Hudi 사전 결합 필드** - 실제 쓰기 전에 사전 결합에 사용되는 필드입니다. 두 레코드에 동일한 키 값이 있는 경우 AWS Glue Studio는 사전 결합 필드에 대해 가장 큰 값을 가진 레코드를 선택합니다. 증분 값(예: updated\$1at)이 속한 필드를 설정합니다.
+  **압축 유형** - 압축 유형 옵션(비압축, GZIP, LZO 또는 Snappy) 중 하나를 선택합니다.
+  **Amazon S3 대상 위치** - **S3 찾아보기**를 클릭하여 Amazon S3 대상 위치를 선택합니다.
+  **데이터 카탈로그 업데이트 옵션** - 다음 옵션 중에 선택합니다.
  +  [데이터 카탈로그 업데이트 안 함(Do not update the Data Catalog)]: (기본값) 스키마가 변경되거나 새 파티션이 추가된 경우에도 작업에서 데이터 카탈로그를 업데이트하지 않으려면 이 옵션을 선택합니다.
  +  데이터 카탈로그에 테이블 생성, 후속 실행 시 스키마 업데이트 및 새 파티션 추가: 이 옵션을 선택하면 작업이 처음 실행될 때 데이터 카탈로그에 테이블이 생성됩니다. 후속 작업 실행 시 스키마가 변경되거나 새 파티션이 추가되면 작업이 데이터 카탈로그 테이블을 업데이트합니다.

     또한 데이터 카탈로그에서 데이터베이스를 선택하고 테이블 이름을 입력해야 합니다.
  +  [데이터 카탈로그에 테이블 생성, 기존 스키마 유지 및 새 파티션 추가(Create a table in the Data Catalog and on subsequent runs, keep existing schema and add new partitions)]: 이 옵션을 선택하면 작업이 처음 실행될 때 데이터 카탈로그에 테이블이 생성됩니다. 후속 작업 실행 시 작업은 새 파티션을 추가하기 위해서만 데이터 카탈로그 테이블을 업데이트합니다.

     또한 데이터 카탈로그에서 데이터베이스를 선택하고 테이블 이름을 입력해야 합니다.
+  [파티션 키(Partition keys)]: 출력에서 파티션 키로 사용할 열을 선택합니다. 파티션 키를 더 추가하려면 [파티션 키 추가(Add a partition key)]를 선택합니다.
+  **추가 옵션** - 필요에 따라 키-값 페어를 입력합니다.

## AWS Glue Studio를 통해 코드 생성
<a name="gs-data-lake-formats-hudi-generating-code"></a>

 작업이 저장될 때 Hudi 소스 또는 대상이 감지되면 다음 작업 파라미터가 작업에 추가됩니다.
+  `--datalake-formats` - 시각적 작업에서 감지된 데이터 레이크 형식의 개별 목록('형식'을 선택하여 직접적으로 또는 데이터 레이크가 지원하는 카탈로그 테이블을 선택하여 간접적으로) 
+  `--conf ` - `--datalake-formats`의 값을 기반으로 생성됩니다. 예를 들어, `--datalake-formats`의 값이 'hudi'인 경우 AWS Glue에 이 파라미터에 대한 `spark.serializer=org.apache.spark.serializer.KryoSerializer —conf spark.sql.hive.convertMetastoreParquet=false` 값이 생성됩니다.

## AWS Glue 제공 라이브러리 재정의
<a name="gs-data-lake-formats-hudi-overriding-libraries"></a>

 AWS Glue에서 지원하지 않는 Hudi 버전을 사용하려는 경우 자체 Hudi 라이브러리 JAR 파일을 지정하면 됩니다. 자체 JAR 파일을 사용하려면: 
+  `--extra-jars` 작업 파라미터를 사용합니다. 예를 들어 `'--extra-jars': 's3pathtojarfile.jar'`입니다. 자세한 내용을 알아보려면 [AWS Glue 작업 파라미터](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html)를 참조하세요.
+  `--datalake-formats` 작업 파라미터의 값으로 `hudi`를 포함하지 마세요. 빈 문자열을 값으로 입력하면 AWS Glue에서 데이터 레이크 라이브러리를 자동으로 제공하지 않습니다. 자세한 내용은 [AWS Glue에서 Hudi 프레임워크 사용](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-hudi.html)을 참조하세요.

# AWS Glue Studio에서 Delta Lake 프레임워크 사용
<a name="gs-data-lake-formats-delta"></a>

## 데이터 소스에서 Delta Lake 프레임워크 사용
<a name="gs-data-lake-formats-delta-source"></a>

### Amazon S3 데이터 소스에서 Delta Lake 프레임워크 사용
<a name="gs-data-lake-formats-delta-lake-s3-data-source"></a>

1.  소스 메뉴에서 Amazon S3를 선택합니다.

1.  Amazon S3 소스 유형으로 데이터 카탈로그 테이블을 선택한 경우 데이터베이스와 테이블을 선택합니다.

1.  AWS Glue Studio는 형식을 Delta Lake 및 Amazon S3 URL로 표시합니다.

1.  키-값 페어를 입력하려면 **추가 옵션**을 선택합니다. 예를 들어 키-값 페어는 **키**: timestampAsOf와 **값**: 2023-02-24 14:16:18일 수 있습니다.  
![\[이 스크린샷은 Amazon S3 데이터 소스 노드의 데이터 소스 속성 탭에 있는 추가 옵션 섹션을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data_lake_formats_additional_options.png)

1.  **Amazon S3 소스 유형**으로 Amazon S3 위치를 선택한 경우 **Amazon S3 찾아보기**를 클릭하여 Amazon S3 URL을 선택합니다.

1.  **데이터 형식**에서 델타 레이크를 선택합니다.
**참고**  
 AWS Glue Studio가 선택한 Amazon S3 폴더 또는 파일에서 스키마를 유추할 수 없는 경우 **추가 옵션**을 선택하여 새 폴더 또는 파일을 선택합니다.  
 **추가 옵션**의 **스키마 추론** 아래에서 다음 옵션을 선택합니다.  
 AWS Glue Studio에서 통해 샘플 파일을 자동으로 선택하도록 하겠습니다. AWS Glue Studio는 스키마를 추론할 수 있도록 Amazon S3 위치에서 샘플 파일을 선택합니다. **자동 샘플링된 파일** 필드에서 자동으로 선택된 파일을 볼 수 있습니다.
 Amazon S3에서 샘플 파일을 선택합니다. **Amazon S3 찾아보기**를 클릭하여 사용할 Amazon S3 파일을 선택합니다.

1.  **스키마 추론**을 클릭합니다. 그런 다음 **출력 스키마** 탭을 클릭하여 출력 스키마를 볼 수 있습니다.

### 데이터 카탈로그 데이터 소스에서 Delta Lake 프레임워크 사용
<a name="gs-data-lake-formats-delta-catalog"></a>

1.  **소스** 메뉴에서 AWS Glue Studio 데이터 카탈로그를 선택합니다.

1.  **데이터 소스 속성** 탭에서 데이터베이스와 테이블을 선택합니다.

1.  AWS Glue Studio는 형식 유형을 Delta Lake 및 Amazon S3 URL로 표시합니다.
**참고**  
 Delta Lake 소스가 AWS Glue 데이터 카탈로그 테이블로 등록되지 않은 경우 다음 두 가지 옵션을 사용할 수 있습니다.  
 Delta Lake 데이터 스토어에 대한 AWS Glue 크롤러를 생성합니다. 자세한 내용은 [Delta Lake 데이터 스토어에 대한 구성 옵션을 지정하는 방법](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-delta-lake)을 참조하세요.
 Amazon S3 데이터 소스를 사용하여 Delta Lake 데이터 소스를 선택합니다. [Amazon S3 데이터 소스에서 Delta Lake 프레임워크 사용](#gs-data-lake-formats-delta-lake-s3-data-source)을(를) 참조하세요.

## 데이터 대상에서 Delta Lake 형식 사용
<a name="gs-data-lake-formats-delta-target"></a>

### 데이터 카탈로그 데이터 대상에서 Delta Lake 형식 사용
<a name="gs-data-lake-formats-delta-target-catalog"></a>

1.  **대상** 메뉴에서 AWS Glue Studio 데이터 카탈로그를 선택합니다.

1.  **데이터 소스 속성** 탭에서 데이터베이스와 테이블을 선택합니다.

1.  AWS Glue Studio는 형식 유형을 Delta Lake 및 Amazon S3 URL로 표시합니다.

### Amazon S3 데이터 소스에서 Delta Lake 형식 사용
<a name="gs-data-lake-formats-delta-target-s3"></a>

 값을 입력하거나 사용 가능한 옵션 중에서 선택하여 Delta Lake 형식을 구성합니다.
+  **압축 유형** - 압축 유형 옵션(비압축 또는 Snappy) 중 하나를 선택합니다.
+  **Amazon S3 대상 위치** - **S3 찾아보기**를 클릭하여 Amazon S3 대상 위치를 선택합니다.
+  **데이터 카탈로그 업데이트 옵션** - Glue Studio 시각적 편집기에서 이 형식에 대한 데이터 카탈로그 업데이트는 지원되지 않습니다.
  +  [데이터 카탈로그 업데이트 안 함(Do not update the Data Catalog)]: (기본값) 스키마가 변경되거나 새 파티션이 추가된 경우에도 작업에서 데이터 카탈로그를 업데이트하지 않으려면 이 옵션을 선택합니다.
  +  AWS Glue 작업 실행 후 데이터 카탈로그를 업데이트하려면 AWS Glue 크롤러를 실행하거나 일정을 예약합니다. 자세한 내용은 [Delta Lake 데이터 스토어에 대한 구성 옵션을 지정하는 방법](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-delta-lake)을 참조하세요.
+  **파티션 키** - 출력에서 파티션 키로 사용할 열을 선택합니다. 파티션 키를 더 추가하려면 [**파티션 키 추가(Add a partition key)**]를 선택합니다.
+  선택 사항으로 **추가 옵션**을 선택하여 키-값 페어를 입력합니다. 예를 들어 키-값 페어는 **키**: timestampAsOf와 **값**: 2023-02-24 14:16:18일 수 있습니다.

# AWS Glue Studio에서 Apache Iceberg 프레임워크 사용
<a name="gs-data-lake-formats-iceberg"></a>

## 데이터 대상에서 Apache Iceberg 프레임워크 사용
<a name="gs-data-lake-formats-iceberg-target"></a>

### 데이터 카탈로그 데이터 대상에서 Apache Iceberg 프레임워크 사용
<a name="gs-data-lake-formats-iceberg-target-catalog"></a>

1.  **대상** 메뉴에서 AWS Glue Studio 데이터 카탈로그를 선택합니다.

1.  **데이터 소스 속성** 탭에서 데이터베이스와 테이블을 선택합니다.

1.  AWS Glue Studio는 형식 유형을 Apache Iceberg 및 Amazon S3 URL로 표시합니다.

### Amazon S3 데이터 대상에서 Apache Iceberg 프레임워크 사용
<a name="gs-data-lake-formats-iceberg-s3-data-targets"></a>

 값을 입력하거나 사용 가능한 옵션 중에서 선택하여 Apache Iceberg 형식을 구성합니다.
+  **형식** - 드롭다운 메뉴에서 **Apache Iceberg**를 선택합니다.
+  **Amazon S3 대상 위치** - **S3 찾아보기**를 클릭하여 Amazon S3 대상 위치를 선택합니다.
+  **데이터 카탈로그 업데이트 옵션** - 계속 진행하려면 **데이터 카탈로그에 테이블 생성, 후속 실행 시 기존 스키마 유지 및 새 파티션 추가**를 선택해야 합니다. AWS Glue를 사용하여 새 Iceberg 테이블을 작성하려면 Data Catalog를 Iceberg 테이블의 카탈로그로 구성해야 합니다. Data Catalog에 등록된 기존 Iceberg 테이블을 업데이트하려면 Data Catalog를 대상으로 선택합니다.
  +  **데이터베이스** - Data Catalog에서 데이터베이스를 선택합니다.
  +  **테이블 이름** – 사용자의 테이블 이름에 대한 값을 입력합니다. Apache Iceberg 테이블 이름은 모두 소문자여야 합니다. 공백은 허용되지 않으므로 필요한 경우 밑줄을 사용합니다. 예를 들어 'data\$1lake\$1format\$1tables'와 같습니다.

![\[스크린샷에는 Amazon S3 데이터 대상에서 Apache Iceberg 프레임워크를 사용할 때 데이터 대상 속성이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/apache-iceberg-data-target-properties.png)


## Amazon S3 데이터 소스에서 Apache Iceberg 프레임워크 사용
<a name="gs-data-lake-formats-iceberg-source"></a>

### 데이터 카탈로그 데이터 소스에서 Apache Iceberg 프레임워크 사용
<a name="gs-data-lake-formats-iceberg-source-data-catalog"></a>

1.  **소스** 메뉴에서 AWS Glue Studio 데이터 카탈로그를 선택합니다.

1.  **데이터 소스 속성** 탭에서 데이터베이스와 테이블을 선택합니다.

1.  AWS Glue Studio는 형식 유형을 Apache Iceberg 및 Amazon S3 URL로 표시합니다.

![\[스크린샷에는 데이터 카탈로그 데이터 소스에서 Apache Iceberg 프레임워크를 사용할 때 데이터 대상 속성이 나와 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/apache-iceberg-data-source-properties.png)


### Amazon S3 데이터 소스에서 Apache Iceberg 프레임워크 사용
<a name="gs-data-lake-formats-iceberg-source-s3"></a>

 Apache Iceberg는 AWS Glue Studio에서 Amazon S3 소스 노드의 데이터 옵션으로 사용할 수 없습니다.

# 시각적 ETL 작업을 사용하여 데이터 소스에 연결
<a name="connecting-to-data-chapter"></a>

 새 작업을 생성하는 동안 AWS Glue에서 시각적 ETL 작업을 편집할 때 연결을 사용하여 데이터에 연결할 수 있습니다. 커넥터를 사용하여 데이터를 읽는 소스 노드와 데이터 쓰기 위치를 지정하는 대상 노드를 추가하여 이 작업을 수행할 수 있습니다.

**Topics**
+ [데이터 소스 노드의 속성 수정하기](edit-jobs-source.md)
+ [데이터 원본에 데이터 카탈로그 테이블 사용](edit-jobs-source-catalog-tables.md)
+ [데이터 원본에 커넥터 사용](edit-jobs-source-connectors.md)
+ [데이터 원본에 Amazon S3의 파일 사용](edit-jobs-source-s3-files.md)
+ [스트리밍 데이터 원본 사용](edit-jobs-source-streaming.md)
+ [참조](edit-jobs-source-references.md)

# 데이터 소스 노드의 속성 수정하기
<a name="edit-jobs-source"></a>

데이터 원본 속성을 지정하려면 먼저 작업 다이어그램에서 데이터 원본 노드를 선택합니다. 그런 다음 노드 세부 정보 패널의 오른쪽에서 노드 속성을 구성합니다.

**데이터 원본 노드의 속성을 수정하려면**

1. 새 작업 또는 저장된 작업의 시각적 편집기로 이동합니다.

1. 작업 다이어그램에서 데이터 원본 노드를 선택합니다.

1. 노드 세부 정보 패널에서 [**노드 속성(Node properties)**] 탭을 선택하고 다음 정보를 입력합니다.
   + [**이름(Name)**]: (선택 사항) 작업 다이어그램의 노드와 연결할 이름을 입력합니다. 이 이름은 이 작업에 대한 모든 노드에서 고유해야 합니다.
   + [**노드 유형(Node type)**]: 노드 유형에 따라 노드에서 수행되는 작업이 결정됩니다. [**노드 유형(Node type)**]에 대한 옵션 목록에서 [**데이터 원본(Data source)**] 제목 아래에 나열된 값 중 하나를 선택합니다.

1. [**데이터 원본 속성(Data source properties)**] 정보를 구성합니다. 자세한 내용은 다음 단원을 참조하세요.
   + [데이터 원본에 데이터 카탈로그 테이블 사용](edit-jobs-source-catalog-tables.md)
   + [데이터 원본에 커넥터 사용](edit-jobs-source-connectors.md)
   + [데이터 원본에 Amazon S3의 파일 사용](edit-jobs-source-s3-files.md)
   + [스트리밍 데이터 원본 사용](edit-jobs-source-streaming.md)

1. (선택 사항) 노드 속성과 데이터 원본 속성을 구성한 후 노드 세부 정보 패널에서 [**출력 스키마(Output schema)**] 탭을 선택하여 데이터 원본에 대한 스키마를 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. [**작업 세부 정보(Job details)**] 탭에서 IAM 역할을 지정하지 않은 경우 여기에 IAM 역할을 입력하라는 메시지가 나타납니다.

1. (선택 사항) 노드 속성과 데이터 원본 속성을 구성한 후 노드 세부 정보 패널에서 [**데이터 미리 보기(Data preview)**] 탭을 선택하여 데이터 원본에서 데이터 집합을 미리 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. 이 기능 사용과 관련된 비용이 있으며 IAM 역할을 제공하는 즉시 결제가 시작됩니다.

# 데이터 원본에 데이터 카탈로그 테이블 사용
<a name="edit-jobs-source-catalog-tables"></a>

Amazon S3와 커넥터를 제외한 모든 데이터 원본의 경우 선택한 원본 유형의 테이블이 AWS Glue Data Catalog에 있어야 합니다. AWS Glue는 데이터 카탈로그 테이블을 생성하지 않습니다.

**데이터 카탈로그 테이블을 기반으로 데이터 원본 노드를 구성하려면**

1. 새 작업 또는 저장된 작업의 시각적 편집기로 이동합니다.

1. 작업 다이어그램에서 데이터 원본 노드를 선택합니다.

1. [**데이터 원본 속성(Data source properties)**] 탭을 선택한 후 다음 정보를 입력합니다.
   + [**S3 소스 유형(S3 source type)**]: (Amazon S3 데이터 원본만 해당) 기존 AWS Glue Data Catalog 테이블을 사용하려면 [**카탈로그 테이블 선택(Select a Catalog table)**] 옵션을 선택합니다.
   + [**데이터베이스(Database)**]: 데이터 카탈로그에서 이 작업에 사용할 원본 테이블이 포함된 데이터베이스를 선택합니다. 검색 필드를 사용하여 이름으로 데이터베이스를 검색할 수 있습니다.
   + [**테이블(Table)**]: 목록에서 원본 데이터와 연결된 테이블을 선택합니다. 이 테이블이 AWS Glue Data Catalog에 이미 존재해야 합니다. 검색 필드를 사용하여 이름으로 테이블을 검색할 수 있습니다.
   + **파티션 조건자**: (Amazon S3 데이터 원본만 해당) 분할 열만 포함하는 Spark SQL 기반 부울 표현식을 입력합니다. 예: `"(year=='2020' and month=='04')"`
   + [**임시 디렉터리(Temporary directory)**]: (Amazon Redshift 데이터 원본만 해당) ETL 작업에서 임시 중간 결과를 작성할 수 있는 Amazon S3 작업 디렉터리 위치에 대한 경로를 입력합니다.
   + [**클러스터와 연결된 역할(Role associated with the cluster)**]: (Amazon Redshift 데이터 원본만 해당) Amazon Redshift 클러스터에 대한 권한이 포함된 ETL 작업에 사용할 역할을 입력합니다. 자세한 내용은 [데이터 원본 및 데이터 대상 권한](getting-started-min-privs-job.md#getting-started-min-privs-data) 섹션을 참조하세요.

# 데이터 원본에 커넥터 사용
<a name="edit-jobs-source-connectors"></a>

[**노드 유형(Node type)**]에 대한 커넥터를 선택하는 경우 [사용자 정의 커넥터로 작업 작성](job-authoring-custom-connectors.md)의 지침에 따라 데이터 원본 속성 구성을 완료합니다.

# 데이터 원본에 Amazon S3의 파일 사용
<a name="edit-jobs-source-s3-files"></a>

Amazon S3를 데이터 원본으로 선택한 경우 다음 중 하나를 선택할 수 있습니다.
+ 데이터 카탈로그 데이터베이스 및 테이블.
+ Amazon S3의 버킷, 폴더 또는 파일.

Amazon S3 버킷을 데이터 원본으로 사용하는 경우 AWS Glue는 파일 중 하나에서 또는 샘플 파일로 지정한 파일을 사용하여 지정된 위치에 있는 데이터의 스키마를 탐지합니다. [**스키마 추론(Infer schema)**] 버튼을 사용할 때 스키마 감지가 발생합니다. Amazon S3 위치 또는 샘플 파일을 변경하는 경우 [**스키마 추론(Infer schema)**]을 다시 선택하여 새 정보로 스키마 감지를 수행해야 합니다.

**Amazon S3의 파일에서 직접 읽는 데이터 원본 노드를 구성하려면**

1. 새 작업 또는 저장된 작업의 시각적 편집기로 이동합니다.

1. Amazon S3 소스에 대한 작업 다이어그램에서 데이터 원본 노드를 선택합니다.

1. [**데이터 원본 속성(Data source properties)**] 탭을 선택한 후 다음 정보를 입력합니다.
   + [**S3 소스 유형(S3 source type)**]: (Amazon S3 데이터 원본만 해당) [**S3 위치(S3 location)**] 옵션을 선택합니다.
   + [**S3 URL**]: 작업에 대한 데이터가 포함된 Amazon S3 버킷, 폴더 또는 파일의 경로를 입력합니다. [**S3 찾아보기(Browse S3)**]를 선택하여 계정에서 사용할 수 있는 위치에서 경로를 선택할 수 있습니다.
   + **재귀(Recursive)**: AWS Glue가 S3 위치에 있는 하위 폴더의 파일에서 데이터를 읽도록 하려면 이 옵션을 선택합니다.

     하위 폴더에 분할된 데이터가 포함된 경우 AWS Glue는 폴더 이름에 지정된 파티션 정보를 데이터 카탈로그에 추가하지 않습니다. 예를 들어 Amazon S3의 다음 폴더를 고려합니다.

     ```
     S3://sales/year=2019/month=Jan/day=1
     S3://sales/year=2019/month=Jan/day=2
     ```

     **재귀(Recursive)**를 선택하고 `sales` 폴더를 S3 위치로 선택하면 AWS Glue는 모든 하위 폴더의 데이터를 읽지만 연도, 월 또는 일의 파티션을 생성하지 않습니다.
   + [**데이터 포맷(Data format)**]: 데이터가 저장되는 포맷을 선택합니다. JSON, CSV 또는 Parquet를 선택할 수 있습니다. 선택한 값은 소스 파일에서 데이터를 읽는 방법을 AWS Glue 작업에 알려줍니다.
**참고**  
올바른 데이터 포맷을 선택하지 않을 경우 AWS Glue는 스키마를 올바르게 추론할 수 있지만 작업에서 소스 파일의 데이터를 올바르게 구문 분석할 수 없습니다.

     선택한 포맷에 따라 추가 구성 옵션을 입력할 수 있습니다.
     + [**JSON**](JavaScript Object Notation)
       + [**JsonPath**]: 테이블 스키마 정의에 사용하는 객체를 가리키는 JSON 경로입니다. JSON 경로 표현식은 XPath 표현식이 XML 문서와 함께 사용되는 것과 같은 방식으로 항상 JSON 구조를 참조합니다. JSON 경로의 "루트 멤버 객체"는 객체 또는 배열인 경우에도 항상 `$`라고 합니다. JSON 경로 작성 시 점이나 대괄호를 사용할 수 없습니다.

         JSON 경로에 대한 자세한 내용은 GitHub 웹 사이트의 [JsonPath](https://github.com/json-path/JsonPath)를 참조하세요.
       + [**소스 파일의 레코드가 여러 줄에 걸쳐 있을 수 있음(Records in source files can span multiple lines)**]: 단일 레코드가 CSV 파일의 여러 줄에 걸쳐 있을 수 있는 경우 이 옵션을 선택합니다.
     + [**CSV**](쉼표로 분리된 값)
       + **구분 기호**: 행의 각 열 항목을 구분하는 문자(예: `;` 또는 `,`)를 입력합니다.
       + [**이스케이프 문자(Escape character)**]: 이스케이프 문자로 사용되는 문자를 입력합니다. 이 문자는 이스케이프 문자 바로 뒤에 오는 문자를 문자 그대로 사용해야 하며 구분 기호로 해석되어서는 안 됨을 나타냅니다.
       + [**인용 문자(Quote character)**]: 개별 문자열을 단일 값으로 그룹화하는 데 사용되는 문자를 입력합니다. 예를 들어 CSV 파일에 `"This is a single value"`와 같은 값이 있는 경우 [**큰따옴표(")(Double quote ("))**]를 선택합니다.
       + [**소스 파일의 레코드가 여러 줄에 걸쳐 있을 수 있음(Records in source files can span multiple lines)**]: 단일 레코드가 CSV 파일의 여러 줄에 걸쳐 있을 수 있는 경우 이 옵션을 선택합니다.
       + [**소스 파일의 첫 번째 줄에 열 머리글 포함(First line of source file contains column headers)**]: CSV 파일의 첫 번째 행에 데이터 대신 열 머리글이 포함된 경우 이 옵션을 선택합니다.
     + [**Parquet**](Apache Parquet 컬럼 방식 스토리지)

       Parquet 포맷으로 저장된 데이터에 대해 구성할 추가 설정이 없습니다.
     + **Apache Hudi**

       Apache Hudi 포맷으로 저장된 데이터에 대해 구성할 추가 설정이 없습니다.
     + **Delta Lake**

       Delta Lake 포맷으로 저장된 데이터에 대해 구성할 추가 설정이 없습니다.
     + **Excel**

       Excel 포맷으로 저장된 데이터에 대해 구성할 추가 설정이 없습니다.
   + [**분할 조건자(Partition predicate)**]: 데이터 원본에서 읽은 데이터를 분할하려면 분할 열만 포함하는 Spark SQL 기반의 부울 식을 입력합니다. 예: `"(year=='2020' and month=='04')"`
   + **고급 옵션(Advanced options)**: AWS Glue가 특정 파일을 기준으로 데이터 스키마를 탐지하도록 하려면 이 섹션을 확장합니다.
     + **스키마 추론(Schema inference)**: AWS Glue가 파일을 선택하도록 하는 대신 특정 파일을 사용하려면 **S3에서 샘플 파일 선택(Choose a sample file from S3)** 옵션을 선택합니다. Excel 소스에는 스키마 추론을 사용할 수 없습니다.
     + [**자동 샘플링된 파일(Auto-sampled file)**]: 스키마를 추론하는 데 사용할 Amazon S3의 파일 경로를 입력합니다.

     데이터 원본 노드를 편집하고 선택한 샘플 파일을 변경하는 경우 [**스키마 다시 로드(Reload schema)**]를 사용하여 새 샘플 파일로 스키마를 감지합니다.

1. [**스키마 추론(Infer schema)**] 버튼을 선택하여 Amazon S3의 소스 파일에서 스키마를 감지합니다. Amazon S3 위치 또는 샘플 파일을 변경하는 경우 [**스키마 추론(Infer schema)**]을 다시 선택하여 새 정보로 스키마를 추론해야 합니다.

# 스트리밍 데이터 원본 사용
<a name="edit-jobs-source-streaming"></a>

지속적으로 실행되고 Amazon Kinesis Data Streams, Apache Kafka 및 Amazon Managed Streaming for Apache Kafka(Amazon MSK)의 스트리밍 소스의 데이터 사용하는 스트리밍 추출, 변환, 로드 작업을 생성할 수 있습니다.

**스트리밍 데이터 원본의 속성을 구성하려면**

1. 새 작업 또는 저장된 작업의 시각적 그래프 편집기로 이동합니다.

1. Kafka 또는 Kinesis Data Streams에 대한 그래프에서 데이터 원본 노드를 선택합니다.

1. [**데이터 원본 속성(Data source properties)**] 탭을 선택한 후 다음 정보를 입력합니다.

------
#### [ Kinesis ]
   + **Kinesis 소스 유형(Kinesis source type)**: **스트림 세부 정보(Stream details)** 옵션을 선택하여 스트리밍 소스에 직접 액세스하거나 **데이터 카탈로그 테이블(Data Catalog table)**을 선택하여 테이블에 저장된 정보를 대신 사용합니다.

     **스트림 세부 정보(Stream details)**를 선택한 경우 다음 추가 정보를 지정합니다.
     + **데이터 스트림 위치**: 스트림이 현재 사용자와 연결되어 있는지 또는 다른 사용자와 연결되어 있는지 여부를 선택합니다.
     + **리전(Region)**: 스트림이 있는 AWS 리전을 선택합니다. 이 정보는 데이터 스트림에 액세스하기 위한 ARN을 구성하는 데 사용됩니다.
     + **스트림 ARN(Stream ARN)**: Kinesis 데이터 스트림의 Amazon 리소스 이름(ARN)을 입력합니다. 스트림이 현재 계정 내에 있는 경우 드롭다운 목록에서 스트림 이름을 선택할 수 있습니다. 검색 필드를 사용하여 이름이나 ARN으로 데이터 스트림을 검색할 수 있습니다.
     + **데이터 포맷(Data format)**: 목록에서 데이터 스트림에 사용할 포맷을 선택합니다.

       AWS Glue는 스트리밍 데이터에서 스키마를 자동으로 탐지합니다.

     **데이터 카탈로그 테이블(Data Catalog table)**을 선택한 경우 다음 추가 정보를 지정합니다.
     + **데이터베이스(Database)**: (선택 사항) AWS Glue 데이터 카탈로그에서 스트리밍 데이터 원본과 연결된 테이블이 포함된 데이터베이스를 선택합니다. 검색 필드를 사용하여 이름으로 데이터베이스를 검색할 수 있습니다.
     + [**테이블(Table)**]: (선택 사항) 목록에서 원본 데이터와 연결된 테이블을 선택합니다. 이 테이블이 AWS Glue 데이터 카탈로그에 이미 존재해야 합니다. 검색 필드를 사용하여 이름으로 테이블을 검색할 수 있습니다.
     + **스키마 탐지(Detect schema)**: AWS Glue가 데이터 카탈로그 테이블의 스키마 정보를 사용하는 대신 스트리밍 데이터에서 스키마를 탐지하도록 하려면 이 옵션을 선택합니다. **스트림 세부 정보(Stream details)** 옵션을 선택한 경우 이 옵션은 자동으로 사용됩니다.
   + **시작 위치(Starting position)**: 기본값으로 ETL 작업은 **가장 오래된 항목(Earliest)** 옵션을 사용하므로 스트림에서 사용 가능한 가장 오래된 레코드부터 데이터를 읽습니다. **최신 항목(Latest)**을 대신 선택할 수도 있습니다. 이 경우 ETL 작업은 스트림에서 가장 최근 레코드 직후부터 읽기를 시작해야 합니다.
   + [**기간 크기(Window size)**]: 기본적으로 ETL 작업은 100초 기간에 데이터를 처리하고 작성합니다. 이를 통해 데이터를 효율적으로 처리할 수 있으며 예상보다 늦게 도착하는 데이터에 대해 집계를 수행할 수 있습니다. 이 기간 크기를 수정하여 적시성 또는 집계 정확도를 높일 수 있습니다.

     AWS Glue 스트리밍 작업은 작업 북마크 대신 체크포인트를 사용하여 읽은 데이터를 추적합니다.
   + **연결 옵션(Connection options)**: 키-값 페어를 추가하여 추가 연결 옵션을 지정하려면 이 섹션을 확장합니다. 여기에서 지정할 수 있는 옵션에 대한 자세한 내용은 *AWS Glue 개발자 가이드*의 ["connectionType": "kinesis"](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-kinesis)를 참조하세요.

------
#### [ Kafka ]
   + **Apache Kafka 소스(Apache Kafka source)**: **스트림 세부 정보(Stream details)** 옵션을 선택하여 스트리밍 소스에 직접 액세스하거나 **데이터 카탈로그 테이블(Data Catalog table)**을 선택하여 테이블에 저장된 정보를 대신 사용합니다.

     **데이터 카탈로그 테이블(Data Catalog table)**을 선택한 경우 다음 추가 정보를 지정합니다.
     + **데이터베이스(Database)**: (선택 사항) AWS Glue 데이터 카탈로그에서 스트리밍 데이터 원본과 연결된 테이블이 포함된 데이터베이스를 선택합니다. 검색 필드를 사용하여 이름으로 데이터베이스를 검색할 수 있습니다.
     + [**테이블(Table)**]: (선택 사항) 목록에서 원본 데이터와 연결된 테이블을 선택합니다. 이 테이블이 AWS Glue 데이터 카탈로그에 이미 존재해야 합니다. 검색 필드를 사용하여 이름으로 테이블을 검색할 수 있습니다.
     + **스키마 탐지(Detect schema)**: AWS Glue가 데이터 카탈로그 테이블에 스키마 정보를 저장하는 대신 스트리밍 데이터에서 스키마를 탐지하도록 하려면 이 옵션을 선택합니다. **스트림 세부 정보(Stream details)** 옵션을 선택한 경우 이 옵션은 자동으로 사용됩니다.

     **스트림 세부 정보(Stream details)**를 선택한 경우 다음 추가 정보를 지정합니다.
     + **연결 이름(Connection name)**: Kafka 데이터 스트림에 대한 액세스 및 인증 정보가 포함된 AWS Glue 연결을 선택합니다. Kafka 스트리밍 데이터 원본과의 연결을 사용해야 합니다. 연결이 없는 경우 AWS Glue 콘솔을 사용하여 Kafka 데이터 스트림에 대한 연결을 생성할 수 있습니다.
     + **주제 이름(Topic name)**: 읽을 주제의 이름을 입력합니다.
     + **데이터 포맷(Data format)**: Kafka 이벤트 스트림에서 데이터를 읽을 때 사용할 포맷을 선택합니다.
   + **시작 위치(Starting position)**: 기본값으로 ETL 작업은 **가장 오래된 항목(Earliest)** 옵션을 사용하므로 스트림에서 사용 가능한 가장 오래된 레코드부터 데이터를 읽습니다. **최신 항목(Latest)**을 대신 선택할 수도 있습니다. 이 경우 ETL 작업은 스트림에서 가장 최근 레코드 직후부터 읽기를 시작해야 합니다.
   + [**기간 크기(Window size)**]: 기본적으로 ETL 작업은 100초 기간에 데이터를 처리하고 작성합니다. 이를 통해 데이터를 효율적으로 처리할 수 있으며 예상보다 늦게 도착하는 데이터에 대해 집계를 수행할 수 있습니다. 이 기간 크기를 수정하여 적시성 또는 집계 정확도를 높일 수 있습니다.

     AWS Glue 스트리밍 작업은 작업 북마크 대신 체크포인트를 사용하여 읽은 데이터를 추적합니다.
   + **연결 옵션(Connection options)**: 키-값 페어를 추가하여 추가 연결 옵션을 지정하려면 이 섹션을 확장합니다. 여기에서 지정할 수 있는 옵션에 대한 자세한 내용은 *AWS Glue 개발자 가이드*의 ["connectionType": "kafka"](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-kafka)를 참조하세요.

------

**참고**  
데이터 미리 보기는 현재 스트리밍 데이터 원본에 대해 지원되지 않습니다.

# 참조
<a name="edit-jobs-source-references"></a>

 **모범 사례** 
+  [Build an ETL service pipeline to load data incrementally from Amazon S3 to Amazon Redshift using AWS Glue](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue.html) 

 **ETL 프로그래밍** 
+  [AWS Glue에서 ETL에 대한 관련 연결 유형 및 옵션](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-connections.html) 
+  [JDBC connectionType 값](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-jdbc) 
+  [Amazon Redshift 간 데이터 이동을 위한 고급 옵션](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-redshift.html) 

# 데이터 대상 노드 구성
<a name="data-target-nodes"></a>

데이터 대상은 작업이 변환된 데이터를 쓰는 위치입니다.

## 데이터 대상 옵션 개요
<a name="edit-jobs-target-overview"></a>

다음이 데이터 대상(*데이터 싱크*라고도 함)일 수 있습니다.
+ [**S3**] - 작업이 선택한 Amazon S3 위치와 지정한 포맷의 파일에 데이터를 씁니다.

  데이터 대상에 대한 파티션 열을 구성하면 작업이 파티션 키를 기반으로 디렉터리에 Amazon S3에 대한 데이터 집합을 씁니다.
+ **AWS Glue Data Catalog** - 작업에서 데이터 카탈로그의 테이블과 연결된 정보를 사용하여 출력 데이터를 대상 위치에 씁니다.

  수동으로 또는 크롤러를 사용하여 테이블을 생성할 수 있습니다. AWS CloudFormation 템플릿을 사용하여 데이터 카탈로그에서 테이블을 생성할 수도 있습니다.
+ 커넥터 - 커넥터는 데이터 스토어와 AWS Glue 간의 통신을 용이하게 하는 코드입니다. 작업은 커넥터 및 연결된 연결을 사용하여 출력 데이터를 대상 위치에 씁니다. AWS Marketplace에서 제공되는 커넥터를 구독하거나 사용자 정의 커넥터를 생성할 수 있습니다. 자세한 내용은 [AWS Glue Studio에 커넥터 추가](creating-custom-connectors.md#creating-connectors) 섹션을 참조하세요.

작업이 Amazon S3 데이터 대상에 쓸 때 데이터 카탈로그를 업데이트하도록 선택할 수 있습니다. 스키마 또는 파티션이 변경될 때 크롤러가 데이터 카탈로그를 업데이트하도록 요구하는 대신 이 옵션을 사용하면 테이블을 쉽게 최신 상태로 유지할 수 있습니다. 이 옵션은 필요에 따라 데이터 카탈로그에 새 테이블을 추가하고 테이블 파티션을 업데이트하며 작업에서 직접 테이블의 스키마를 업데이트하여 분석에 데이터를 사용할 수 있도록 하는 프로세스를 단순화합니다.

## 데이터 대상 노드 편집
<a name="edit-jobs-target"></a>

데이터 대상은 작업이 변환된 데이터를 쓰는 위치입니다.

**작업 다이어그램에서 데이터 대상 노드를 추가하거나 구성하려면**

1. (선택 사항) 대상 노드를 추가해야 하는 경우 시각적 편집기 상단의 도구 모음에서 **Target**(대상)을 선택한 다음 **S3** 또는 **Glue Data Catalog**(Glue 데이터 카탈로그)를 선택합니다.
   + 대상으로 [**S3**]를 선택하면 작업은 지정한 Amazon S3 위치에 있는 하나 이상의 파일에 데이터 집합을 씁니다.
   + 대상으로 [**AWS Glue Data Catalog**]를 선택하면 작업은 데이터 카탈로그에서 선택한 테이블에 설명된 위치에 씁니다.

1. 작업 다이어그램에서 데이터 대상 노드를 선택합니다. 노드를 선택하면 페이지 오른쪽에 노드 세부 정보 패널이 나타납니다.

1. [**노드 속성(Node properties)**] 탭을 선택한 후 다음 정보를 입력합니다.
   + [**이름(Name)**]: 작업 다이어그램의 노드와 연결할 이름을 입력합니다.
   + [**노드 유형(Node type)**]: 값이 이미 선택되어 있어야 하지만 필요에 따라 변경할 수 있습니다.
   + [**상위 노드(Node parents)**]: 상위 노드는 대상 위치에 쓰려는 출력 데이터를 제공하는 작업 다이어그램의 노드입니다. 미리 채워진 작업 다이어그램의 경우 대상 노드에 이미 상위 노드가 선택되어 있어야 합니다. 표시되는 상위 노드가 없으면 목록에서 상위 노드를 선택합니다.

     대상 노드에는 단일 상위 노드가 있습니다.

1. [**데이터 대상 속성(Data target properties)**] 정보를 구성합니다. 자세한 내용은 다음 단원을 참조하세요.
   + [데이터 대상에 Amazon S3 사용](#edit-job-target-S3)
   + [데이터 대상에 데이터 카탈로그 테이블 사용](#edit-job-target-catalog)
   + [데이터 대상에 커넥터 사용](#edit-job-target-connector)

1. (선택 사항) 데이터 대상 노드 속성을 구성한 후 노드 세부 정보 패널에서 [**출력 스키마(Output schema)**] 탭을 선택하여 데이터에 대해 출력 스키마를 볼 수 있습니다. 작업의 노드에 대해 이 탭을 처음 선택하면 데이터 액세스를 위해 IAM 역할을 제공하라는 메시지가 나타납니다. [**작업 세부 정보(Job details)**] 탭에서 IAM 역할을 지정하지 않은 경우 여기에 IAM 역할을 입력하라는 메시지가 나타납니다.

### 데이터 대상에 Amazon S3 사용
<a name="edit-job-target-S3"></a>

Amazon S3와 커넥터를 제외한 모든 데이터 원본의 경우 선택한 원본 유형의 테이블이 AWS Glue Data Catalog에 있어야 합니다. AWS Glue Studio는 데이터 카탈로그 테이블을 생성하지 않습니다.

**Amazon S3에 쓰는 데이터 대상 노드를 구성하려면**

1. 새 작업 또는 저장된 작업의 시각적 편집기로 이동합니다.

1. 작업 다이어그램에서 데이터 원본 노드를 선택합니다.

1. [**데이터 원본 속성(Data source properties)**] 탭을 선택한 후 다음 정보를 입력합니다.
   + [**포맷(Format)**]: 목록에서 포맷을 선택합니다. 데이터 결과에 사용할 수 있는 포맷 유형은 다음과 같습니다.
     + [**JSON**]: JavaScript Object Notation.
     + [**CSV**]: 쉼표로 분리된 값.
     + [**Avro**]: Apache Avro JSON 바이너리입니다.
     + **Parquet**: 데이터 포맷으로 `DynamicFrames`에 최적화된 사용자 정의 Parquet 라이터 유형입니다. 데이터에 대해 미리 계산된 스키마를 요구하는 대신 스키마를 동적으로 계산하고 수정합니다.
     + [**ORC**]: Apache Optimized Row Columnar(ORC) 포맷입니다.
     + **Apache Hudi**: 증분 데이터 처리 및 데이터 파이프라인 개발을 간소화하는 오픈 소스 데이터 레이크 스토리지 프레임워크입니다.
     + **Apache Iceberg**: SQL 테이블처럼 작동하는 고성능 테이블 형식입니다.
     + **Delta Lake**: ACID 트랜잭션을 수행하고, 메타데이터 처리를 확장하고, 스트리밍 및 배치 데이터 처리를 통합하는 데 도움이 되는 오픈 소스 데이터 레이크 스토리지 프레임워크입니다.
     + **XML**: 확장형 마크업 언어(XML)입니다.
     + **Tableau Hyper**: Tableau의 메모리 내 데이터 엔진 기술입니다.

     이러한 포맷 옵션에 대한 자세한 내용은 *AWS Glue Developer Guide*의 [Format Options for ETL Inputs and Outputs in AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format.html)를 참조하세요.
   + **압축 유형**: `CSV`, `JSON`, `Parquet` 파일 유형을 사용하여 데이터를 선택적으로 압축하도록 선택할 수 있습니다. 기본값은 압축 안 함 또는 [**없음(None)**]입니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/data-target-nodes.html)
   + [**S3 대상 위치(S3 Target Location)**]: 데이터 출력을 위한 Amazon S3 버킷 및 위치입니다. [**S3 찾아보기(Browse S3)**] 버튼을 선택하여 액세스 권한이 있는 Amazon S3 버킷을 확인하고 그 중 하나를 대상으로 선택할 수 있습니다.
   + **데이터 카탈로그 업데이트 옵션**
     + [**데이터 카탈로그 업데이트 안 함(Do not update the Data Catalog)**]: (기본값) 스키마가 변경되거나 새 파티션이 추가된 경우에도 작업에서 데이터 카탈로그를 업데이트하지 않으려면 이 옵션을 선택합니다.
     + [**데이터 카탈로그에 테이블 생성, 후속 실행 시 스키마 업데이트 및 새 파티션 추가(Create a table in the Data Catalog and on subsequent runs, update the schema and add new partitions)**]: 이 옵션을 선택하면 작업이 처음 실행될 때 데이터 카탈로그에 테이블이 생성됩니다. 후속 작업 실행 시 스키마가 변경되거나 새 파티션이 추가되면 작업이 데이터 카탈로그 테이블을 업데이트합니다.

       또한 데이터 카탈로그에서 데이터베이스를 선택하고 테이블 이름을 입력해야 합니다.
     + [**데이터 카탈로그에 테이블 생성, 기존 스키마 유지 및 새 파티션 추가(Create a table in the Data Catalog and on subsequent runs, keep existing schema and add new partitions)**]: 이 옵션을 선택하면 작업이 처음 실행될 때 데이터 카탈로그에 테이블이 생성됩니다. 후속 작업 실행 시 작업은 새 파티션을 추가하기 위해서만 데이터 카탈로그 테이블을 업데이트합니다.

       또한 데이터 카탈로그에서 데이터베이스를 선택하고 테이블 이름을 입력해야 합니다.
   + **파일 파티셔닝**: 출력을 저장할 파티셔닝 유형을 선택합니다.
     + **파일 자동 생성(권장)**: 생성된 파일 수의 기본값입니다.
     + **다중 파일 출력**: 원하는 파일 출력 수를 지정합니다. 최적의 성능을 위해 자동 생성된 기본 파일 수 값을 사용합니다.
   + [**파티션 키(Partition keys)**]: 출력에서 파티션 키로 사용할 열을 선택합니다. 파티션 키를 더 추가하려면 [**파티션 키 추가(Add a partition key)**]를 선택합니다.

   파일 파티셔닝은 Tableau Hyper에 대상 형식으로 지원되지 않습니다.

### 데이터 대상에 데이터 카탈로그 테이블 사용
<a name="edit-job-target-catalog"></a>

Amazon S3과 커넥터를 제외한 모든 데이터 원본의 경우 선택한 대상 유형의 테이블이 AWS Glue Data Catalog에 있어야 합니다. AWS Glue Studio는 데이터 카탈로그 테이블을 생성하지 않습니다.

**데이터 카탈로그 테이블을 사용하는 대상에 대한 데이터 속성을 구성하려면**

1. 새 작업 또는 저장된 작업의 시각적 편집기로 이동합니다.

1. 작업 다이어그램에서 데이터 대상 노드를 선택합니다.

1. [**데이터 대상 속성(Data target properties)**] 탭을 선택한 후 다음 정보를 입력합니다.
   + [**데이터베이스(Database)**]: 목록에서 대상으로 사용할 테이블이 포함된 데이터베이스를 선택합니다. 이 데이터베이스가 데이터 카탈로그에 이미 존재해야 합니다.
   + [**테이블(Table)**]: 목록에서 출력 데이터의 스키마를 정의하는 테이블을 선택합니다. 이 테이블이 데이터 카탈로그에 이미 존재해야 합니다.

     데이터 카탈로그의 테이블은 열 이름, 데이터 유형 정의, 파티션 정보 및 대상 데이터 집합에 대한 기타 메타데이터로 구성됩니다. 작업은 데이터 카탈로그에서 이 테이블에 설명된 위치에 씁니다.

     데이터 카탈로그에 테이블 생성에 대한 자세한 내용은 *AWS Glue Developer Guide*의 [Defining Tables in the Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/tables-described.html)를 참조하세요.
   + **데이터 카탈로그 업데이트 옵션**
     + [**테이블 정의 변경 안 함(Do not change table definition)**]: (기본값) 스키마가 변경되거나 새 파티션이 추가된 경우에도 작업에서 데이터 카탈로그를 업데이트하지 않으려면 이 옵션을 선택합니다.
     + [**스키마 업데이트 및 새 파티션 추가(Update schema and add new partitions)**]: 이 옵션을 선택하면 스키마가 변경되거나 새 파티션이 추가될 때 작업이 데이터 카탈로그 테이블을 업데이트합니다.
     + [**기존 스키마 유지 및 새 파티션 추가(Keep existing schema and add new partitions)**]: 이 옵션을 선택하면 작업에서 새 파티션을 추가하기 위해서만 데이터 카탈로그 테이블을 업데이트합니다.
     + [**파티션 키(Partition keys)**]: 출력에서 파티션 키로 사용할 열을 선택합니다. 파티션 키를 더 추가하려면 [**파티션 키 추가(Add a partition key)**]를 선택합니다.

### 데이터 대상에 커넥터 사용
<a name="edit-job-target-connector"></a>

[**노드 유형(Node type)**]에 대한 커넥터를 선택하는 경우 [사용자 정의 커넥터로 작업 작성](job-authoring-custom-connectors.md)의 지침에 따라 데이터 대상 속성 구성을 완료합니다.

# 작업 스크립트 편집 또는 업로드
<a name="edit-nodes-script"></a>

AWS Glue Studio 시각적 편집기를 사용하여 작업 스크립트를 편집하거나 고유한 스크립트를 업로드합니다.

작업이 AWS Glue Studio로 생성된 경우에만 시각적 편집기를 사용하여 작업 노드를 편집할 수 있습니다. 작업이 AWS Glue 콘솔, API 명령 또는 명령줄 인터페이스(CLI)로 생성된 경우 AWS Glue Studio의 스크립트 편집기를 사용하여 작업 스크립트, 파라미터, 일정을 편집할 수 있습니다. 작업을 스크립트 전용 모드로 변환하여 AWS Glue Studio에서 생성된 작업의 스크립트를 편집할 수도 있습니다.

**작업 스크립트를 편집하거나 자체 스크립트를 업로드하려면**

1. 새 작업을 생성하는 경우 [**작업(Jobs)**] 페이지에서 [**Spark 스크립트 편집기(Spark script editor)**] 옵션을 선택하여 Spark 작업을 생성하거나 [**Python 셸 스크립트 편집기(Python Shell script editor)**]를 선택하여 Python 셸 작업을 생성합니다. 새 스크립트를 작성하거나 기존 스크립트를 업로드할 수 있습니다. [**Spark 스크립트 편집기(Spark script editor)**]를 선택하면 Scala 또는 Python 스크립트를 작성하거나 업로드할 수 있습니다. [**Python Shell 스크립트 편집기(Python Shell script editor)**]를 선택하면 Python 스크립트만 작성하거나 업로드할 수 있습니다.

   새 작업을 만드는 옵션을 선택한 후 나타나는 [**옵션(Options)**] 섹션에서 시작 스크립트로 시작하거나([**표준 문안 코드로 새 스크립트 생성(Create a new script with boilerplate code)**]) 작업 스크립트로 사용할 로컬 파일을 업로드할 수 있습니다.

   [**Spark 스크립트 편집기(Spark script editor)**]를 선택한 경우 Python 또는 Scala 스크립트 파일을 업로드할 수 있습니다. Scala 스크립트는 파일 확장명이 `.scala`여야 합니다. Python 스크립트는 Python 유형의 파일로 인식되어야 합니다. [**Python Shell 스크립트 편집기(Python Shell script editor)**]를 선택하면 Python 스크립트 파일만 업로드할 수 있습니다.

   선택을 마쳤으면 [**생성(Create)**]을 선택하여 작업을 생성하고 시각적 편집기를 엽니다.

1. 새 작업 또는 저장된 작업에 대한 시각적 작업 편집기로 이동한 다음 [**스크립트(Script)**] 탭을 선택합니다.

1. 스크립트 편집기 옵션 중 하나를 사용하여 새 작업을 생성하지 않았고 기존 작업에 대한 스크립트를 편집한 적이 없는 경우 [**스크립트(Script)**] 탭에 머리글 [**스크립트(잠김)(Script (Locked))**]가 표시됩니다. 이는 스크립트 편집기가 읽기 전용 모드임을 의미합니다. [**스크립트 편집(Edit script)**]을 선택하여 편집할 스크립트의 잠금을 해제합니다.

   스크립트를 편집 가능하게 만들기 위해 AWS Glue Studio는 작업을 시각적 작업에서 스크립트 전용 작업으로 변환합니다. 편집을 위해 스크립트를 잠금 해제하면 저장한 후 이 작업에 대해 더 이상 시각적 편집기를 사용할 수 없습니다.

   확인 창에서 [**확인(Confirm)**]을 선택하여 계속하거나 [**취소(Cancel)**]를 선택하여 작업을 시각적 편집에 사용할 수 있도록 유지합니다.

   [**확인(Confirm)**]를 선택하면 [**시각적(Visual)**] 탭이 더 이상 편집기에 표시되지 않습니다. AWS Glue Studio를 사용하여 스크립트 편집기로 스크립트를 수정하거나, 작업 세부 정보 또는 일정을 수정하거나, 작업 실행을 볼 수 있습니다.
**참고**  
작업을 저장할 때까지 스크립트 전용 작업으로의 변환은 영구적이지 않습니다. 콘솔 웹 페이지를 새로 고치거나 저장하기 전에 작업을 다고 시각적 편집기에서 다시 열면 시각적 편집기에서 개별 노드를 계속 편집할 수 있습니다.

1. 필요에 따라 스크립트를 편집합니다.

   스크립트 편집을 마치면 [**저장(Save)**]을 선택하여 작업을 저장하고 시각적 객체에서 스크립트 전용으로 작업을 영구적으로 변환합니다.

1. (선택 사항) AWS Glue Studio 콘솔의 **스크립트(Script)** 탭에서 **다운로드(Download)** 버튼을 선택하여 스크립트를 다운로드할 수 있습니다. 이 버튼을 선택하면 새 브라우저 창이 열리고 Amazon S3의 해당 위치에 있는 스크립트가 표시됩니다. 작업의 [**작업 세부 정보(Job details)**] 탭에 있는 [**스크립트 파일 이름(Script filename)**] 및 [**스크립트 경로(Script path)**] 파라미터는 Amazon S3에 있는 스크립트 파일의 이름과 위치를 결정합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/job-details-script-location-params-screenshot.png)

   작업을 저장할 때 AWS Glue는 이 필드에서 지정한 위치에 작업 스크립트를 저장합니다. Amazon S3 내의 이 위치에서 스크립트 파일을 수정할 경우 AWS Glue Studio는 다음에 작업을 편집할 때 수정된 스크립트를 로드합니다.

## AWS Glue Studio에서 Scala 스크립트 생성 및 편집
<a name="edit-job-scala-script"></a>

작업 생성을 위해 스크립트 편집기를 선택하면 기본적으로 작업 프로그래밍 언어가 `Python 3`로 설정됩니다. 스크립트를 업로드하는 대신 새 스크립트를 작성하도록 선택할 경우 AWS Glue Studio는 Python으로 작성된 표준 문안 텍스트로 새 스크립트를 시작합니다. 대신 Scala 스크립트를 작성하려면 먼저 Scala를 사용하도록 스크립트 편집기를 구성해야 합니다.

**참고**  
Scala를 작업의 프로그래밍 언어로 선택하고 시각적 편집기를 사용하여 작업을 설계하면 생성된 작업 스크립트가 Scala로 작성되고 추가 작업이 필요하지 않습니다.

**AWS Glue Studio에서 새 Scala 스크립트를 작성하려면**

1. [**Spark 스크립트 편집기(Spark script editor)**] 옵션을 선택하여 새 작업을 생성합니다.

1. [**옵션(Options)**]에서 [**표준 문안 코드로 새 스크립트 생성(Create a new script with boilerplate code)**]을 선택합니다.

1. [**작업 세부 정보(Job details)**] 탭을 선택하고 [**언어(Language)**]를 `Scala`(`Python 3` 대신)로 설정합니다.
**참고**  
작업을 생성하기 위해 [**Spark 스크립트 편집기(Spark script editor)**] 옵션을 선택하면 작업의 [**유형(Type)**] 속성이 `Spark`로 자동 설정됩니다.

1. [**스크립트(Script)**] 탭을 클릭합니다.

1. Python 표준 문안 텍스트를 제거합니다. 다음 Scala 표준 문안 텍스트로 바꿀 수 있습니다.

   ```
   import com.amazonaws.services.glue.{DynamicRecord, GlueContext}
   import org.apache.spark.SparkContext
   import com.amazonaws.services.glue.util.JsonOptions
   import com.amazonaws.services.glue.util.GlueArgParser
   import com.amazonaws.services.glue.util.Job
   
   object MyScript {
     def main(args: Array[String]): Unit = {
       val sc: SparkContext = new SparkContext()
       val glueContext: GlueContext = new GlueContext(sc)
   
       }
   }
   ```

1. 편집기에서 Scala 작업 스크립트를 작성합니다. 필요에 따라 `import` 문을 더 추가합니다.

## AWS Glue Studio에서 Python 셸 작업 생성 및 편집
<a name="edit-job-python-shell"></a>

작업을 생성하기 위해 Python 셸 스크립트 편집기를 선택하면 기존 Python 스크립트를 업로드하거나 새 스크립트를 작성할 수 있습니다. 새 스크립트를 작성하도록 선택하면 표준 문안 코드가 새 Python 작업 스크립트에 추가됩니다.

**새 Python 셸 작업을 생성하려면**  
[AWS Glue Studio에서 작업 시작](edit-nodes-chapter.md#create-jobs-start)의 지침을 참조하세요.

Python 셸 작업에 지원되는 작업 속성은 Spark 작업에 지원되는 속성과 동일하지 않습니다. 다음 목록은 [**작업 세부 정보(Job details)**] 탭에서 Python 셸 작업에 사용 가능한 작업 파라미터의 변경 사항을 설명합니다.
+ 작업의 [**유형(Type)**] 속성은 `Python Shell`로 자동 설정되며 변경할 수 없습니다.
+ [**언어(Language)**] 대신 작업에 대한 [**Python 버전(Python version)**] 속성이 있습니다. 현재 AWS Glue Studio에서 생성된 Python 셸 작업은 Python 3.6을 사용합니다.
+ [**Glue 버전(Glue version)**] 속성은 Python 셸 작업에 적용되지 않으므로 사용할 수 없습니다.
+ [**작업자 유형(Worker type)**] 및 [**작업자 수(Number of workers)**] 대신 [**데이터 처리 장치(Data processing units)**] 속성이 표시됩니다. 이 작업 속성은 작업을 실행할 때 Python 셸에서 사용하는 DPU(데이터 처리 장치) 수를 결정합니다.
+ [**작업 북마크(Job bookmark)**] 속성은 Python 셸 작업에 지원되지 않기 때문에 사용할 수 없습니다.
+ [**고급 속성(Advanced properties)**]에서 Python 셸 작업에는 다음 속성을 사용할 수 없습니다.
  + **작업 지표**
  + **연속 로깅**
  + [**Spark UI**] 및 ]**Spark UI 로그 경로(Spark UI logs path)**]
  + 머리글 [**라이브러리(Libraries)**] 아래의 [**종속 jar 경로(Dependent jars path)**]

# 작업 다이어그램에서 노드의 상위 노드 변경
<a name="edit-job-change-parents"></a>

노드의 상위 항목을 변경하여 작업 다이어그램 내에서 노드를 이동하거나 노드의 데이터 원본을 변경할 수 있습니다.

**상위 노드를 변경하려면**

1. 수정할 작업 다이어그램의 노드를 선택합니다.

1. 노드 세부 정보 패널의 [**노드 속성**] 탭에 있는 [**노드 상위 항목(Node parents)**] 아래에서 노드의 현재 상위 항목을 제거합니다.

1. 목록에서 새 상위 노드를 선택합니다.

1. 새로 선택한 상위 노드와 일치하도록 필요에 따라 노드의 다른 속성을 수정합니다.

실수로 노드를 수정한 경우 도구 모음의 [**실행 취소(Undo)**] 버튼을 사용하여 작업을 되돌릴 수 있습니다.

# 작업 다이어그램에서 노드 삭제
<a name="edit-job-delete-node"></a>

 Visual ETL 작업을 수행할 때 제거된 노드에 연결된 노드를 다시 추가하거나 재구성하지 않고도 캔버스에서 노드를 제거할 수 있습니다.

 아래 예제에서는 **ETL 작업 > Visual ETL**을 선택한 다음, **예제 작업**에서 **여러 소스를 조인하는 Visual ETL 작업**을 선택합니다. **예제 작업 생성**을 선택하여 작업을 생성하고 아래 단계를 따르세요.

![\[스크린샷은 여러 소스 샘플 작업을 조인하기 위한 Visual ETL 작업이 선택된 예제 작업 패널을 보여 줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/visual-etl-example-jobs-create.png)


**캔버스에서 노드를 제거하려면**

1.  AWS Glue 콘솔의 탐색 메뉴에서 **Visual ETL**을 선택하고 기존 작업을 선택합니다. 작업 캔버스는 아래 그림과 같이 예제 작업을 표시합니다.  
![\[스크린샷은 예제 작업에서 생성된 작업 다이어그램을 보여 줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/visual-job-example-job-nodes.png)

1.  제거할 노드를 선택합니다. 캔버스가 노드로 확대됩니다. 캔버스 오른쪽에 있는 도구 모음에서 **휴지통** 아이콘을 선택합니다. 이렇게 하면 노드가 제거되고 노드에 연결된 모든 노드가 워크플로에서 해당 위치로 이동됩니다. 이 예제에서는 첫 번째 **Join** 노드가 캔버스에서 삭제되었습니다.

    워크플로에서 노드를 삭제하면 AWS Glue에서 노드를 다시 정렬하여 워크플로가 유효하지 않은 방식으로 구성되지 않도록 합니다. 여전히 노드 구성을 수정해야 할 수도 있습니다.

    이 예제에서는 **Subscribers** 노드 아래의 **Join** 노드가 제거되었습니다. 따라서 **Plans** 소스 노드는 최상위 수준으로 이동되었으며 여전히 하위 **Join** 노드에 연결되어 있습니다. **Join**에는 선택한 테이블이 있는 두 개의 상위 소스 노드가 필요하므로 **Join** 노드에는 추가 구성이 필요합니다. 캔버스 오른쪽에 있는 **변환** 탭에는 **조인 조건**에서 누락된 요구 사항이 표시됩니다.  
![\[스크린샷은 상위 노드가 두 개의 소스 노드(계획 할당 및 구독자)인 작업 다이어그램을 보여 줍니다. 이들은 Join 노드에 연결되어 있습니다. Plans 소스 노드와 Join 노드는 Change Schema 노드에 연결됩니다. Catalog 노드는 Change Schema 노드에 연결됩니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/visual-job-delete-node-join-plans.png)

1.  두 번째 **Join** 노드와 **Select Fields** 노드를 삭제합니다. 노드가 삭제되면 워크플로는 아래 예제와 같이 표시됩니다.  
![\[스크린샷은 Join 노드와 Select Fields 노드가 제거되고 이에 연결된 노드인 Change Schema 노드가 작업 흐름에서 그 자리를 차지하도록 위로 이동한 작업 다이어그램을 보여 줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/visual-job-three-data-sources-rearranged.png)

1.  노드 연결을 수정하려면 노드 핸들을 클릭하고 연결을 새 노드로 끌어 놓습니다. 이렇게 하면 노드를 삭제하고 논리적 흐름에서 노드를 다시 정렬할 수 있습니다. 예제에서는 빨간색 화살표로 표시된 대로 Plans 노드의 핸들을 클릭하고 연결을 Join 노드로 끌어서 새 연결을 생성합니다.  
![\[스크린샷은 핸들이 빨간색 원으로 둘러싸여 있고 빨간색 화살표가 Plans 노드와 Join 노드를 연결하는 작업 다이어그램이 표시되며 노드를 함께 연결하기 위해 클릭하고 끌어다 놓는 동작을 보여 줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/visual-job-plans-node-handle-selected.png)

1.  작업을 취소해야 하는 경우 캔버스 오른쪽 도구 모음의 **휴지통** 아이콘 바로 아래에 있는 **실행 취소** 아이콘을 선택하세요.

# AWS Glue 데이터 카탈로그 노드에 소스 및 대상 파라미터 추가
<a name="edit-job-add-job-parameters"></a>

 AWS Glue Studio은(는) 시각적 작업을 파라미터화할 수 있습니다. 프로덕션 및 개발 환경에서는 카탈로그 테이블 이름이 다를 수 있으므로 작업이 실행될 때 실행할 데이터베이스 및 테이블의 런타임 파라미터를 정의하고 선택할 수 있습니다.

 작업 파라미터화를 사용하면 소스 및 대상을 파라미터화하고, AWS Glue 데이터 카탈로그 노드를 사용할 때 해당 파라미터를 작업에 저장할 수 있습니다. 소스 및 대상을 파라미터로 지정하면 특히 여러 환경에서 동일한 작업을 사용할 때 작업을 재사용할 수 있습니다. 소스 및 대상을 관리하는 데 드는 시간과 노력을 절약함으로써, 이는 배포 환경 전반에서 코드를 승격할 때 유용합니다. 또한 지정한 사용자 지정 파라미터는 AWS Glue 작업의 특정 실행에 대한 기본 인수를 재정의합니다.

 **소스 및 대상 파라미터 추가** 

 AWS Glue 데이터 카탈로그 노드를 소스 또는 대상으로 사용하는지 관계없이 **Job details**(작업 세부 정보) 탭의 **Advanced properties**(고급 속성) 섹션에서 런타임 파라미터를 정의할 수 있습니다.

1.  소스 노드 또는 대상 노드로 AWS Glue 데이터 카탈로그를 선택합니다.

1.  [**작업 세부 정보(Job details)**] 탭을 선택합니다.

1.  **Advanced properties**(고급 속성)을 선택합니다.

1.  작업 파라미터 섹션에서 키 값을 입력합니다. 예를 들어, `--db.source`은(는) 데이터베이스 원본에 대한 파라미터가 될 것입니다. 키 이름 뒤에 'dash dash'가 오면 아무 이름이나 입력할 수 있습니다.  
![\[스크린샷은 작업 세부 정보 탭의 작업 파라미터 섹션을 보여줍니다. 데이터베이스 및 테이블에 대해 런타임 중에 사용할 파라미터를 정의할 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/Data_Catalog_node_job_details_job_parameters.png)

1.  값을 입력합니다. 예를 들어, `databasename`은(는) 파라미터화되는 데이터베이스의 값이 될 것입니다.

1.  파라미터를 더 추가하고자 하는 경우 **Add new parameter**(새 파라미터 추가)를 선택합니다. 최대 50개의 파리미터를 추가할 수 있습니다. 키 값 쌍이 정의되면 AWS Glue 데이터 카탈로그 노드에서 파라미터를 사용할 수 있습니다.

 **런타임 파라미터 선택** 

**참고**  
 데이터베이스 및 테이블에 대한 런타임 파라미터를 선택하는 프로세스는 AWS Glue 데이터 카탈로그 노드가 소스 또는 대상인지와 상관없이 동일합니다.

1.  소스 노드 또는 대상 노드로 AWS Glue 데이터 카탈로그를 선택합니다.

1.  **Database**(데이터베이스)의 **Data source properties - Data Catalog**(데이터 소스 속성 - 데이터 카탈로그) 탭에서 **Use runtime parameters**(런타임 파라미터 사용)을 선택합니다.  
![\[스크린샷은 런타임 파라미터 드롭다운 메뉴를 보여줍니다. 데이터베이스 및 테이블에 대해 런타임 중에 사용할 정의된 파라미터를 선택할 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/Data_Catalog_node_select_runtime_parameters.png)

1.  드롭다운 메뉴에서 파라미터를 선택합니다. 예를 들어, 소스 데이터베이스에 대해 정의한 파라미터를 선택하면 **Apply**(적용)을 선택하면 데이터베이스가 자동으로 데이터베이스 드롭다운 메뉴에 채워집니다.

1.  테이블(Table) 섹션에서 이미 소스 테이블로 정의한 파라미터를 선택합니다. **Apply**(적용)을 선택하면 테이블이 사용할 테이블로 자동으로 채워집니다.

1.  작업을 저장하고 실행하면 AWS Glue Studio이(가) 작업 실행 중에 선택한 파라미터를 참조합니다.

# AWS Glue에서 Git 버전 제어 시스템 사용
<a name="edit-job-add-source-control-integration"></a>

**참고**  
 노트북은 현재 AWS Glue Studio에서 버전 관리가 지원되지 않습니다. 하지만 AWS Glue 작업 스크립트 및 시각적 ETL 작업에 대한 버전 제어는 지원됩니다.

 원격 리포지토리가 있고 리포지토리를 사용하여 AWS Glue 작업을 관리하려는 경우 AWS Glue Studio 또는 AWS CLI을(를) 사용하여 AWS Glue의 리포지토리 및 작업에 대한 변경 사항을 동기화할 수 있습니다. 이러한 방식으로 변경 내용을 동기화하면 작업을 AWS Glue Studio에서 리포지토리로 푸시하거나 리포지토리에서 AWS Glue Studio(으)로 가져옵니다.

 AWS Glue Studio의 Git 통합을 통해 다음 작업을 수행할 수 있습니다.
+  AWS CodeCommit, GitHub, GitLab 및 Bitbucket과 같은 Git 버전 관리 시스템과 통합 
+  시각적 작업을 사용하든 스크립트 작업을 사용하든 AWS Glue Studio에서 AWS Glue 작업을 편집하고 이를 리포지토리에 동기화 
+  작업의 소스 및 대상을 파라미터화 
+  리포지토리에서 작업을 가져와 AWS Glue Studio에서 편집합니다.
+  AWS Glue Studio의 다중 브랜치 워크플로를 활용하여 브랜치에서 가져오거나 브랜치로 푸시하여 작업 테스트 
+  교차 계정 작업 생성에 대해 리포지토리에서 파일 다운로드 및 AWS Glue Studio(으)로 작업 업로드 
+  선택한 자동화 도구 사용(예: Jenkins, AWS CodeDeploy, 등.) 

이 비디오에서는 AWS Glue를 Git와 통합하고 협업에 기반한 지속적인 코드 파이프라인을 구축하는 방법을 보여줍니다.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/XRlZq2kvE4U/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/XRlZq2kvE4U)


## IAM 권한
<a name="git-integration-permissions"></a>

 작업에 다음 IAM 권한 중 하나가 있는지 확인합니다. IAM 권한 설정 방법에 대한 자세한 내용을 알아보려면 [AWS Glue Studio에 대한 IAM 권한 설정](https://docs.aws.amazon.com/glue/latest/ug/setting-up.html?icmpid=docs_glue_studio_helppanel#getting-started-iam-permissions)을 참조하세요.
+ `AWSGlueServiceRole`
+ `AWSGlueConsoleFullAccess`

 Git 통합을 위해서는 최소한 다음과 같은 작업이 필요합니다.
+  `glue:UpdateJobFromSourceControl` - 버전 관리 시스템에 있는 작업으로 AWS Glue을(를) 업데이트할 수 있습니다.
+  `glue:UpdateSourceControlFromJob` - AWS Glue에 저장된 작업으로 버전 관리 시스템을 업데이트할 수 있습니다.
+  `s3:GetObject` - 버전 관리 시스템으로 푸시하는 동안 작업에 대한 스크립트를 검색할 수 있습니다.
+  `s3:PutObject` - 소스 제어 시스템에서 작업을 가져올 때 스크립트를 업데이트할 수 있습니다.

## 사전 조건
<a name="edit-job-push-source-repository-prerequisites"></a>

 작업을 소스 제어 리포지토리로 푸시하려면 다음 사항이 필요합니다.
+  관리자가 이미 생성한 리포지토리 
+  리포지토리 내 브랜치 
+  개인용 액세스 토큰(Bitbucket의 경우 리포지토리 액세스 토큰) 
+  리포지토리 소유자의 사용자 이름 
+  AWS Glue Studio의 리포지토리에 대해 읽기 및 쓰기가 허용되도록 리포지토리의 권한을 설정합니다 
  +  **GitLab** — 토큰 범위를 API, read\$1repository, write\$1repository로 설정 
  +  **Bitbucket** — 권한 설정 위치: 
    + **Workspace 멤버십** — 읽기, 쓰기
    + **프로젝트** — 쓰기, 관리자 읽기
    + **리포지토리** — 읽기, 쓰기, 관리, 삭제

**참고**  
 AWS CodeCommit 사용 시 개인 액세스 토큰 및 리포지토리 소유자는 필요하지 않습니다. [Git 및 AWS CodeCommit 시작하기](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started.html)를 참조하세요.

 **AWS Glue Studio에서 소스 제어 리포지토리의 작업 사용** 

 AWS Glue Studio에 없는 작업을 소스 제어 리포지토리에서 가져오고 AWS Glue Studio에서 작업을 사용하려고 하면 작업 유형에 따라 전제 조건이 달라집니다.

 **시각적 작업의 경우:** 
+  작업 이름과 일치하는 작업 정의의 폴더 및 JSON 파일이 필요합니다 

   예를 들어, 아래 작업 정의를 참조하세요. 리포지토리의 브랜치에는 폴더와 JSON 파일이 모두 작업 이름과 일치하는 경로 `my-visual-job/my-visual-job.json`이(가) 포함되어야 합니다 

  ```
  {
    "name" : "my-visual-job",
    "description" : "",
    "role" : "arn:aws:iam::aws_account_id:role/Rolename",
    "command" : {
      "name" : "glueetl",
      "scriptLocation" : "s3://foldername/scripts/my-visual-job.py",
      "pythonVersion" : "3"
    },
    "codeGenConfigurationNodes" : "{\"node-nodeID\":{\"S3CsvSource\":{\"AdditionalOptions\":{\"EnableSamplePath\":false,\"SamplePath\":\"s3://notebook-test-input/netflix_titles.csv\"},\"Escaper\":\"\",\"Exclusions\":[],\"Name\":\"Amazon S3\",\"OptimizePerformance\":false,\"OutputSchemas\":[{\"Columns\":[{\"Name\":\"show_id\",\"Type\":\"string\"},{\"Name\":\"type\",\"Type\":\"string\"},{\"Name\":\"title\",\"Type\":\"choice\"},{\"Name\":\"director\",\"Type\":\"string\"},{\"Name\":\"cast\",\"Type\":\"string\"},{\"Name\":\"country\",\"Type\":\"string\"},{\"Name\":\"date_added\",\"Type\":\"string\"},{\"Name\":\"release_year\",\"Type\":\"bigint\"},{\"Name\":\"rating\",\"Type\":\"string\"},{\"Name\":\"duration\",\"Type\":\"string\"},{\"Name\":\"listed_in\",\"Type\":\"string\"},{\"Name\":\"description\",\"Type\":\"string\"}]}],\"Paths\":[\"s3://dalamgir-notebook-test-input/netflix_titles.csv\"],\"QuoteChar\":\"quote\",\"Recurse\":true,\"Separator\":\"comma\",\"WithHeader\":true}}}"
  }
  ```

 **스크립트 작업의 경우: ** 
+  폴더, 작업 정의의 JSON 파일 및 스크립트가 필요합니다.
+  폴더 및 JSON 파일은 작업 이름과 일치해야 합니다. 스크립트 이름은 파일 확장자와 함께 작업 정의의 `scriptLocation`와(과) 일치해야 합니다 

   예를 들어, 아래 작업 정의에서 리포지토리의 브랜치에는 경로 `my-script-job/my-script-job.json` 및 `my-script-job/my-script-job.py`이(가) 포함되어야 합니다. 스크립트 이름은 스크립트의 확장자를 포함하여 `scriptLocation`의 이름과 일치해야 합니다.

  ```
  {
    "name" : "my-script-job",
    "description" : "",
    "role" : "arn:aws:iam::aws_account_id:role/Rolename",
    "command" : {
      "name" : "glueetl",
      "scriptLocation" : "s3://foldername/scripts/my-script-job.py",
      "pythonVersion" : "3"
    }
  }
  ```

## 제한 사항
<a name="edit-job-repository-limitations"></a>
+  AWS Glue는 현재 [GitLab-Groups](https://docs.gitlab.com/ee/user/group)에서 푸시/풀링을 지원하지 않습니다.

## 버전 관리 리포지토리를 AWS Glue와(과) 연결
<a name="edit-job-connecting-repositories"></a>

 AWS Glue Studio 작업 편집기의 **Version Control**(버전 관리) 탭에서 버전 관리 리포지토리 세부 정보를 입력하고 관리할 수 있습니다. Git 리포지토리와 통합하려면 AWS Glue Studio에 로그인할 때마다 리포지토리에 연결해야 합니다.

 Git 버전 관리 시스템 연결하기: 

1.  AWS Glue Studio에서 새 작업을 시작하고 **Version Control**(버전 관리) 탭을 선택합니다.  
![\[스크린샷은 버전 관리 탭이 선택된 작업을 보여 줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/editing-nodes-version-control-tab.png)

1.  **버전 관리 시스템**에서 다음 드롭다운 메뉴를 클릭하여 사용 가능한 옵션 중에서 Git Service를 선택합니다.
   +  AWS CodeCommit 
   +  GitHub 
   + GitLab
   + Bitbucket

1.  선택한 Git 버전 관리 시스템에 따라 완료해야 하는 필드가 달라집니다.

   

    **AWS CodeCommit**의 경우 

    작업에 사용할 리포지토리와 브랜치를 선택하여 리포지토리 구성을 완료합니다.
   +  **리포지토리** - AWS CodeCommit에 리포지토리를 설정한 경우 드롭다운 메뉴에서 리포지토리를 선택합니다. 리포지토리가 목록에 자동으로 채워집니다.
   +  **브랜치** - 드롭다운 메뉴에서 브랜치를 선택합니다.
   +  **폴더** - *선택 사항*- 작업을 저장할 폴더 이름을 입력합니다. 비워 두면 폴더가 자동으로 생성됩니다. 폴더 이름은 기본적으로 작업 이름입니다.

   

    **GitHub의 경우**: 

    다음 필드를 작성하여 GitHub 구성을 완료합니다.
   +  **Personal access token**(개인 액세스 토큰) - GitHub 리포지토리에서 제공하는 토큰입니다. 개인 액세스 토큰에 대한 자세한 내용을 알아보려면 [GitHub 문서](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)를 참조하세요.
   +  **리포지토리 소유자** - GitHub 리포지토리의 소유자입니다.

    GitHub에서 사용할 리포지토리와 브랜치를 선택하여 리포지토리 구성을 완료합니다.
   +  **리포지토리** - GitHub에 리포지토리를 설정한 경우 드롭다운 메뉴에서 리포지토리를 선택합니다. 리포지토리가 목록에 자동으로 채워집니다.
   +  **브랜치** - 드롭다운 메뉴에서 브랜치를 선택합니다.
   +  **폴더** - *선택 사항*- 작업을 저장할 폴더 이름을 입력합니다. 비워 두면 폴더가 자동으로 생성됩니다. 폴더 이름은 기본적으로 작업 이름입니다.

   

    **GitLab의 경우**: 
**참고**  
 AWS Glue는 현재 [GitLab-Groups](https://docs.gitlab.com/ee/user/group)에서 푸시/풀링을 지원하지 않습니다.
   +  **개인 액세스 토큰** - GitLab 리포지토리에서 제공하는 토큰입니다. 개인 액세스 토큰에 대한 자세한 내용은 [GitLab 개인 액세스 토큰](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)을 참조하세요 
   +  **리포지토리 소유자** - GitLab 리포지토리의 소유자입니다.

    GitLab에서 사용할 리포지토리와 브랜치를 선택하여 리포지토리 구성을 완료합니다.
   +  **리포지토리** - GitLab에 리포지토리를 설정한 경우 드롭다운 메뉴에서 리포지토리를 선택합니다. 리포지토리가 목록에 자동으로 채워집니다.
   +  **브랜치** - 드롭다운 메뉴에서 브랜치를 선택합니다.
   +  **폴더** - *선택 사항*- 작업을 저장할 폴더 이름을 입력합니다. 비워 두면 폴더가 자동으로 생성됩니다. 폴더 이름은 기본적으로 작업 이름입니다.

    **Bitbucket의 경우**: 
   +  **앱 암호** - Bitbucket은 리포지토리 액세스 토큰이 아닌 앱 암호를 사용합니다. 앱 암호에 대한 자세한 내용은 [앱 암호](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/)를 참조하세요.
   +  **리포지토리 소유자** - Bitbucket 리포지토리의 소유자입니다. Bitbucket에서 소유자는 리포지토리의 생성자입니다.

    Bitbucket에서 사용할 워크스페이스, 리포지토리, 브랜치 및 폴더를 선택하여 리포지토리 구성을 완료합니다.
   +  **작업 영역** — Bitbucket에 작업 영역을 설정한 경우 드롭다운 메뉴에서 작업 영역을 선택합니다. 작업 공간이 자동으로 채워집니다 
   +  **리포지토리**- Bitbucket에 리포지토리를 설정한 경우 드롭다운 메뉴에서 리포지토리를 선택합니다. 리포지토리가 자동으로 채워집니다 
   +  **브랜치** — 드롭다운 메뉴에서 브랜치를 선택합니다. 브랜치가 자동으로 채워집니다 
   +  **폴더** - *선택 사항*- 작업을 저장할 폴더 이름을 입력합니다. 비워 두면 작업 이름의 폴더가 자동으로 생성됩니다.

1.  AWS Glue Studio 작업의 페이지 상단에서 **Save**(저장)을 선택합니다.

## 소스 리포지토리에 AWS Glue 작업 푸시
<a name="edit-job-push-source-repository"></a>

 버전 관리 시스템의 세부 정보를 입력한 후에는 AWS Glue Studio에서 작업을 편집하고 작업을 소스 리포지토리로 푸시할 수 있습니다. 푸시 및 가져오기 같은 Git 개념에 익숙하지 않은 경우 [Git 및 AWS CodeCommit 시작하기](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started.html)에 대한 이 자습서를 참조하세요.

 작업을 리포지토리에 푸시하려면 버전 관리 시스템의 세부 정보를 입력하고 작업을 저장해야 합니다.

1.  AWS Glue Studio 작업에서 **Actions**(작업)을 선택합니다. 그러면 추가 메뉴 옵션이 열립니다.  
![\[스크린샷은 작업(Actions) 메뉴가 열려 있는 작업을 보여 줍니다. 리포지토리로 푸시(Push to repository) 옵션이 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/editing-nodes-actions-push-to-repository.png)

1.  **Push to repository**(리포지토리로 푸시)를 선택합니다.

    이 작업을 수행하면 작업이 저장됩니다. 리포지토리로 푸시하면 AWS Glue Studio이(가) 마지막으로 저장한 변경 내용을 푸시합니다. 리포지토리의 작업이 사용자 본인 또는 다른 사용자에 의해 수정되었으며 AWS Glue Studio의 작업과 동기화되지 않은 경우 AWS Glue Studio에서 작업을 푸시할 때 AWS Glue Studio에서 저장된 작업으로 리포지토리의 작업이 덮어써 집니다.

1.  **Confirm**(확인)을 선택하여 작업을 완료합니다. 이렇게 하면 리포지토리에서 새 커밋을 생성합니다. AWS CodeCommit을(를) 사용하는 경우 확인 메시지에 AWS CodeCommit에 대한 최신 커밋에 대한 링크가 표시됩니다.

## 소스 리포지토리에서 AWS Glue 작업 가져오기
<a name="edit-job-pull-source-repository"></a>

 **Version control**(버전 관리) 탭에 Git 리포지토리의 세부 정보를 입력한 후에는 리포지토리에서 작업을 가져와 AWS Glue Studio에서 편집할 수도 있습니다.

1.  AWS Glue Studio 작업에서 **Actions**(작업)을 선택합니다. 그러면 추가 메뉴 옵션이 열립니다.  
![\[스크린샷은 작업(Actions) 메뉴가 열려 있는 작업을 보여 줍니다. 리포지토리로 푸시(Push to repository) 옵션이 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/editing-nodes-actions-push-to-repository.png)

1.  **Pull from repository**(리포지토리에서 가져오기)를 선택합니다.

1.  **확인**을 선택합니다. 이렇게 하면 리포지토리에서 최신 커밋을 가져와 AWS Glue Studio에서 작업을 업데이트합니다.

1.  AWS Glue Studio에서 작업을 편집합니다. 변경할 경우 **Actions**(작업) 드롭다운 메뉴에서 **Push to repository**(리포지토리로 푸시)를 선택하여 작업을 리포지토리에 동기화할 수 있습니다.