

# AWS Glue 데이터 카탈로그 채우기
<a name="populate-catalog-methods"></a>

다음 방법을 사용하여 AWS Glue Data Catalog를 채울 수 있습니다.
+ AWS Glue 크롤러 - AWS Glue 크롤러를 통해 데이터베이스, 데이터 레이크 및 스트리밍 데이터와 같은 데이터 소스를 자동으로 검색하고 카탈로그화할 수 있습니다. 크롤러는 매우 다양한 데이터 소스의 메타데이터를 자동으로 검색하고 추론할 수 있으므로 데이터 카탈로그를 채울 때 가장 일반적이고 권장되는 방법입니다.
+  메타데이터 수동 추가 - AWS Glue 콘솔, Lake Formation 콘솔, AWS CLI 또는 AWS Glue API를 사용하여 데이터베이스, 테이블 및 연결 세부 정보를 수동으로 정의하고 데이터 카탈로그에 추가할 수 있습니다. 수동 입력은 크롤링할 수 없는 데이터 소스의 카탈로그를 작성하려는 경우에 유용합니다.
+ 다른 AWS 서비스와의 통합 - AWS Lake Formation 및 Amazon Athena와 같은 서비스의 메타데이터로 데이터 카탈로그를 채울 수 있습니다. 이러한 서비스는 데이터 카탈로그에서 데이터 소스를 검색하고 등록할 수 있습니다.
+  기존 메타데이터 리포지토리에서 채우기 - Apache Hive Metastore와 같은 기존 메타데이터 저장소가 있는 경우 AWS Glue를 사용하여 해당 메타데이터를 데이터 카탈로그로 가져올 수 있습니다. 자세한 내용은 GitHub의 [Hive 메타스토어와 AWS Glue Data Catalog 간의 마이그레이션](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/Hive_metastore_migration)을 참조하세요.

**Topics**
+ [크롤러를 사용하여 데이터 카탈로그 채우기](add-crawler.md)
+ [수동으로 메타데이터 정의](populate-dg-manual.md)
+ [Amazon S3 Tables와 통합](glue-federation-s3tables.md)
+ [다른 AWS 서비스와 통합](populate-dc-other-services.md)
+ [데이터 카탈로그 설정](console-data-catalog-settings.md)

# 크롤러를 사용하여 데이터 카탈로그 채우기
<a name="add-crawler"></a>

AWS Glue 크롤러를 사용하면 데이터베이스 및 테이블을 사용하여 AWS Glue Data Catalog를 채울 수 있습니다. 대부분의 AWS Glue 사용자가 사용하는 기본적인 방법입니다. 크롤러는 단일 실행으로 여러 데이터 스토어를 크롤할 수 있습니다. 완료 시 크롤러는 데이터 카탈로그에서 하나 이상의 테이블을 생성하거나 업데이트합니다. AWS Glue에서 정의한 추출, 변환, 로드 작업은 이러한 데이터 카탈로그 테이블을 원본 및 대상으로 사용합니다. ETL 작업은 원본 및 대상 데이터 카탈로그 테이블에 지정된 데이터 스토어에서 읽기와 쓰기를 수행합니다.

## 워크플로
<a name="crawler-workflow"></a>

다음 워크플로 다이어그램은 AWS Glue 크롤러가 데이터 스토어와 다른 요소와 상호 작용하여 Data Catalog를 채우는 방법을 보여줍니다.

![\[워크플로는 AWS Glue 크롤러가 Data Catalog를 채우는 방법을 5단계로 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/PopulateCatalog-overview.png)


다음은 크롤러가 AWS Glue Data Catalog을 채우는 방법에 대한 일반적인 워크플로입니다.

1. 크롤러는 선택한 사용자 지정 *분류자*를 실행하여 데이터의 형식 및 스키마를 추론합니다. 사용자 지정 분류자에 대한 코드를 제공하면 지정한 순서대로 실행됩니다.

   첫 번째 사용자 분류자가 데이터 구조를 성공적으로 인식하는 과정은 테이블의 스키마를 생성하는 데 사용됩니다. 하위 목록에 있는 사용자 분류자는 건너뜁니다.

1. 어떠한 사용자 지정 분류자도 데이터 스키마와 일치하지 않는다면 기본 설정 분류자는 데이터 스키마를 인식할 시도를 합니다. 기본 설정 분류자의 예는 JSON을 인식하는 분류자입니다.

1. 크롤러를 데이터 스토어로 연결합니다. 어떤 데이터 스토어는 크롤러 액세스 연결 속성을 요구합니다.

1. 추론된 스키마는 데이터 때문에 생성됩니다.

1. 크롤러는 메타데이터를 Data Catalog로 작성합니다. 테이블 정의는 데이터 스토어의 데이터에 대한 메타데이터를 포함합니다. 테이블은 Data Catalog에서 테이블 컨테이너인 데이터베이스에 작성됩니다. 테이블 속성은 테이블 스키마를 추론한 분류자에 의해 생성된 라벨인 분류자를 포함합니다.

**Topics**
+ [워크플로](#crawler-workflow)
+ [크롤러 작동 방식](#crawler-running)
+ [크롤러는 파티션 생성 시기를 어떻게 결정하나요?](#crawler-s3-folder-table-partition)
+ [크롤링에 지원되는 데이터 소스](crawler-data-stores.md)
+ [크롤러 사전 조건](crawler-prereqs.md)
+ [분류자 정의 및 관리](add-classifier.md)
+ [크롤러 구성](define-crawler.md)
+ [크롤러 일정 관리](schedule-crawler.md)
+ [크롤러 결과 및 세부 정보 보기](console-crawlers-details.md)
+ [크롤러 동작 사용자 지정](crawler-configuration.md)
+ [튜토리얼: AWS Glue 크롤러 추가](tutorial-add-crawler.md)

## 크롤러 작동 방식
<a name="crawler-running"></a>

크롤러가 실행되면 데이터 스토어에서 정보를 얻기 위한 다음 작업을 실행합니다.
+ **데이터를 분류하여 원시 데이터의 포맷, 스키마 및 관련 속성 결정** - 분류 결과는 사용자 정의 분류자를 생성하여 구성할 수 있습니다.
+ **데이터를 테이블 혹은 파티션으로 분류합니다. ** – 데이터는 크롤러 발견을 기반으로 분류합니다.
+ **메타데이터를 데이터 카탈로그에 작성합니다 ** – 크롤러가 어떻게 테이블과 파티션을 추가하고 업데이트, 삭제하는지 구성합니다.

크롤러를 정의할 때 스키마를 추론할 수 있도록 데이터 포맷을 평가하는 하나 이상의 분류자를 선택합니다. 크롤러가 실행되면 목록의 첫 번째 분류자가 성공적으로 데이터 스토어를 인식하고 테이블의 스키마를 생성합니다. 기본 제공 분류자를 사용하거나 사용자가 직접 정의할 수 있습니다. 크롤러를 정의하기 전에 별도의 작업에서 사용자 지정 분류자를 정의합니다. AWS Glue는 기본 제공 분류자를 제공하여 일반 파일에서 JSON, CSV 및 Apache Avro를 포함하는 포맷으로 스키마를 추론합니다. AWS Glue의 기본 제공 분류자의 현재 목록은 [기본 제공 분류자](add-classifier.md#classifier-built-in) 섹션을 참조하세요.

크롤러가 생성하는 메타데이터는 크롤러를 정의할 때 데이터베이스에 포함됩니다. 크롤러가 데이터베이스를 지정하지 않으면 테이블은 기본 데이터베이스로 배치합니다. 또한, 각 테이블은 처음으로 데이터 스토어를 성공적으로 인식하는 분류자로 채워진 분류 열이 있습니다.

크롤된 파일이 압축되면 크롤러는 반드시 다운로드하고 실행해야 합니다. 크롤러가 실행되면 크롤러는 파일 정보를 얻어 파일 포맷 및 압축 유형을 결정하고 파일 속성을 데이터 카탈로그에 작성합니다. Apache Parquet과 같은 일부 파일 형식은 파일이 작성한 대로 파일 일부를 압축할 수 있습니다. 이런 파일의 압축 데이터는 파일의 내부 구성 요소이고, AWS Glue는 데이터 카탈로그에 테이블을 쓸 때 `compressionType` 속성을 채우지 않습니다. 반대로 *전체 파일*이 gzip처럼 압축 알고리즘을 통해 압축된 후 `compressionType` 속성은 테이블이 데이터 카탈로그에 작성될 때 채워집니다.

크롤러는 생성하는 테이블 이름을 만듭니다. AWS Glue Data Catalog에 저장된 테이블 이름은 다음 규칙을 따릅니다.
+ 영숫자와 밑줄(`_`)만 허용됩니다.
+ 사용자 지정 접두사는 64자보다 길 수 없습니다.
+ 이름 최대 길이는 128자보다 길 수 없습니다. 크롤러는 이름이 제한 범위 내에 있도록 이름을 줄입니다.
+ 테이블 이름이 복제된다면 크롤러는 이름에 해시 문자열 접미사를 추가합니다.

크롤러가 일정에 따라 한 번을 초과하여 실행된다면 데이터 스토어에서 새로운 또는 변화된 파일 혹은 테이블을 찾습니다. 크롤러 출력값은 과거 실행에서 찾은 새로운 테이블과 파티션을 포함합니다.

## 크롤러는 파티션 생성 시기를 어떻게 결정하나요?
<a name="crawler-s3-folder-table-partition"></a>

AWS Glue 크롤러가 Amazon S3 데이터 저장소를 스캔하고 버킷에서 여러 폴더를 탐지하면 폴더 구조의 테이블 루트 및 테이블의 파티션에 해당하는 폴더를 확인합니다. Amazon S3 접두사 또는 폴더 이름을 기반의 테이블 이름. 크롤할 폴더 수준을 가리키는 [**추가 경로**]를 제공합니다. 폴더 수준의 다수 스키마가 유사한 경우, 크롤러는 개별 테이블 대신 테이블 파티션을 생성합니다. 크롤러가 개별 테이블에 영향을 주는 방법은 크롤러를 정의할 때 각 테이블의 루트 폴더를 데이터 스토어로 추가하는 것입니다.

예를 들어 다음과 같은 Amazon S3 폴더 구조를 고려합니다.

![\[여러 수준의 사각형은 Amazon S3의 폴더 계층 구조를 나타냅니다. 맨 위 사각형은 Sales라는 레이블이 지정됩니다. 그 아래 사각형은 year=2019라는 레이블이 지정됩니다. 그 아래의 두 사각형에는 month=Jan과 month=Feb라는 레이블이 지정됩니다. 이들 사각형 아래에는 각각 day=1 및 day=2라는 레이블이 붙은 2개의 사각형이 있습니다. 4개의 "day"(맨 아래) 직사각형 아래에는 모두 2개 또는 4개의 파일이 있습니다. 모든 사각형과 파일은 선으로 연결됩니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/crawlers-s3-folders.png)


4개의 최하위 수준 폴더에 대한 경로는 다음과 같습니다.

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

크롤러 대상이 `Sales`로 설정되고 `day=n` 폴더의 모든 파일이 동일한 포맷(예: JSON, 암호화되지 않음)이고 동일하거나 매우 유사한 스키마를 갖는다고 가정합니다. 크롤러는 파티션 키가 `year`, `month` 및 `day`인 4개의 파티션이 있는 단일 테이블을 생성합니다.

다음 예에서는 다음과 같은 Amazon S3 구조를 고려합니다.

```
s3://bucket01/folder1/table1/partition1/file.txt
s3://bucket01/folder1/table1/partition2/file.txt
s3://bucket01/folder1/table1/partition3/file.txt
s3://bucket01/folder1/table2/partition4/file.txt
s3://bucket01/folder1/table2/partition5/file.txt
```

`table1`과 `table2` 아래의 파일 스키마가 유사하고 [**포함 경로(Include path)**]가 `s3://bucket01/folder1/`인 크롤러에 데이터 스토어 1개가 정의된 경우, 크롤러는 파티션 키 열 2개로 테이블 하나를 생성합니다. 첫 번째 파티션 키 열에는 `table1`과 `table2`기 포함되고 두 번째 파티션 키 열에는 `table1` 파티션의 경우 `partition1`\$1`partition3`, `table2` 파티션의 경우 `partition4` 및 `partition5`가 포함됩니다. 두 데이터 스토어로 크롤러를 정의하여 두 개별 테이블을 생성합니다. 이 예제에서는 첫 번째 **Include path(추가 경로)**를 `s3://bucket01/folder1/table1/`로 두 번째는 `s3://bucket01/folder1/table2`로 정의합니다.

**참고**  
Amazon Athena에서 각 테이블은 모든 객체가 들어 있는 Amazon S3 접두사에 해당합니다. 객체들이 다른 스키마를 가지고 있으면 Athena는 동일한 접두사 내 다른 객체를 다른 테이블로 인식하지 못합니다. 크롤러가 동일한 Amazon S3 접두사의 여러 테이블을 생성하면 이와 같은 현상이 발생할 수 있습니다. 이는 어떤 결과 없이 Athena의 쿼리로 이끕니다. Athena가 테이블을 올바르게 인식하고 쿼리할 수 있도록 Amazon S3 폴더 구조에서 서로 다른 테이블 스키마마다 별도의 [**포함 경로(Include path)**]를 사용하여 크롤러를 생성합니다. 자세한 내용은 [AWS Glue와 함께 Athena를 사용할 때의 모범 사례](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html)와 이 [AWS 지식 센터 문서](https://aws.amazon.com/premiumsupport/knowledge-center/athena-empty-results/)를 참조하세요.

# 크롤링에 지원되는 데이터 소스
<a name="crawler-data-stores"></a>

크롤러는 다음과 같은 파일 기반 및 테이블 기반 데이터 스토어를 크롤할 수 있습니다.


| 크롤러가 사용하는 액세스 유형 | 데이터 스토어 | 
| --- | --- | 
| 네이티브 클라이언트 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/crawler-data-stores.html)  | 
| JDBC |  Amazon Redshift Snowflake Amazon Relational Database Service(Amazon RDS) 내 또는 Amazon RDS 외부: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/crawler-data-stores.html)  | 
| MongoDB 클라이언트 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/crawler-data-stores.html)  | 

**참고**  
현재 AWS Glue는 데이터 스트림에 대한 크롤러를 지원하지 않습니다.

JDBC, MongoDB, MongoDB Atlas 및 Amazon DocumentDB(MongoDB 호환) 데이터 스토어의 경우 크롤러가 데이터 스토어에 연결하는 데 사용할 수 있는 AWS Glue *연결*을 지정해야 합니다. Amazon S3의 경우 선택적으로 네트워크 유형의 연결을 지정할 수 있습니다. 연결은 자격 증명, URL, Amazon Virtual Private Cloud 정보 등의 연결 정보를 저장하는 데이터 카탈로그 객체입니다. 자세한 내용은 [데이터에 연결](glue-connections.md) 섹션을 참조하세요.

크롤러에서 지원하는 드라이버 버전은 다음과 같습니다.


| Product | 크롤러 지원 드라이버 | 
| --- | --- | 
| PostgreSQL | 42.2.1 | 
| Amazon Aurora | 네이티브 크롤러 드라이버와 동일 | 
| MariaDB | 8.0.13 | 
| Microsoft SQL Server | 6.1.0 | 
| MySQL | 8.0.13 | 
| Oracle | 11.2.2 | 
| Amazon Redshift | 4.1 | 
| Snowflake | 3.13.20 | 
| MongoDB | 4.7.2 | 
| MongoDB Atlas | 4.7.2 | 

다음은 다양한 데이터 스토어에 대한 참고 사항입니다.

**Amazon S3**  
사용자 계정 또는 다른 계정에서 경로를 크롤링하도록 선택할 수 있습니다. 폴더의 모든 Amazon S3 파일이 동일한 스키마를 보유하고 있으면 크롤러는 테이블 하나를 생성합니다. 또한 Amazon S3 객체가 분할된 경우 메타데이터 테이블이 하나만 생성되고 해당 테이블에 대한 데이터 카탈로그에 파티션 정보가 추가됩니다.

**Amazon S3 및 Amazon DynamoDB**  
크롤러는 AWS Identity and Access Management(IAM) 역할을 사용하여 데이터 스토어에 대한 액세스 권한을 보유합니다. *크롤러에 전달하는 역할은 크롤된 Amazon S3 경로 및 Amazon DynamoDB 테이블에 대한 액세스 권한을 보유해야 합니다*.

**Amazon DynamoDB**  
AWS Glue 콘솔을 사용하여 크롤러를 정의하는 경우 DynamoDB 테이블을 지정할 수 있습니다. AWS Glue API를 사용하는 경우 테이블 목록을 지정할 수 있습니다. 크롤러 실행 시간을 줄이기 위해 데이터의 작은 샘플만 크롤링하도록 선택할 수 있습니다.

**Delta Lake**  
각 Delta Lake 데이터 스토어에 대해 해당하는 Delta 테이블을 생성하는 방식을 지정합니다.  
+ **기본 테이블 생성**: Delta 트랜잭션 로그의 쿼리를 직접 지원하는 쿼리 엔진과 통합할 수 있습니다. 자세한 내용은 [Delta Lake 테이블 쿼리하기](https://docs.aws.amazon.com/athena/latest/ug/delta-lake-tables.html)를 참조하세요.
+ **Symlink 테이블 생성**: 지정된 구성 파라미터를 기반으로 파티션 키로 분할된 매니페스트 파일을 포함하는 `_symlink_manifest` 폴더를 생성합니다.

**Iceberg**  
각 Iceberg 데이터 스토어에 대해 Iceberg 테이블의 메타데이터가 포함된 Amazon S3 경로를 지정합니다. 크롤러가 Iceberg 테이블 메타데이터를 검색하면 이를 데이터 카탈로그에 등록합니다. 크롤러가 테이블을 최신 상태로 유지하도록 예약을 설정할 수 있습니다.  
데이터 스토어에 대해 다음 파라미터를 정의할 수 있습니다.  
+ **제외**: 특정 폴더를 건너뛸 수 있습니다.
+ **최대 이동 깊이**: 크롤러가 Amazon S3 버킷에서 크롤링할 수 있는 깊이 제한을 설정합니다. 최대 이동 깊이의 기본값은 10이고 설정할 수 있는 최대 이동 깊이는 20입니다.

**Hudi**  
각 Hudi 데이터 스토어에 대해 Hudi 테이블의 메타데이터가 포함된 Amazon S3 경로를 지정합니다. 크롤러가 Hudi 테이블 메타데이터를 검색하면 이를 데이터 카탈로그에 등록합니다. 크롤러가 테이블을 최신 상태로 유지하도록 예약을 설정할 수 있습니다.  
데이터 스토어에 대해 다음 파라미터를 정의할 수 있습니다.  
+ **제외**: 특정 폴더를 건너뛸 수 있습니다.
+ **최대 이동 깊이**: 크롤러가 Amazon S3 버킷에서 크롤링할 수 있는 깊이 제한을 설정합니다. 최대 이동 깊이의 기본값은 10이고 설정할 수 있는 최대 이동 깊이는 20입니다.
논리적 유형으로 `millis`를 사용하는 타임스탬프 열은 Hudi 0.13.1 및 타임스탬프 유형과의 비호환성으로 인해 `bigint`로 해석됩니다. 향후 Hudi 릴리스에서 이 문제의 해결 방법이 제공될 수 있습니다.
Hudi 테이블은 다음과 같이 분류되며 각각 특정한 의미를 함축합니다.  
+ 쓸 때 복사(CoW): 데이터가 열 기반 형식(Parquet)으로 저장되며, 업데이트마다 쓰기 중에 새 버전의 파일을 만듭니다.
+ 읽을 때 병합(MoR): 데이터가 열 기반 형식(Parquet)과 행 기반(Avro) 형식을 조합하여 저장됩니다. 업데이트는 행 기반 delta 파일에 기록되며 새 버전의 열 형식 파일을 작성할 때 필요에 따라 압축됩니다.
CoW 데이터 세트를 사용하면 레코드에 대한 업데이트가 있을 때마다 레코드가 포함된 파일이 업데이트된 값으로 다시 작성됩니다. MoR 데이터 세트를 사용하면 Hudi는 업데이트가 있을 때마다 변경된 레코드에 대한 행만 씁니다. MoR은 읽기 수행이 적고 쓰기 또는 변경이 많은 워크로드에 더 적합합니다. CoW는 자주 변경되지 않는 데이터에서 읽기 수행이 많은 워크로드에 더 적합합니다.  
Hudi는 데이터 액세스를 위해 세 가지 쿼리 유형을 제공합니다.  
+ 스냅샷 쿼리: 지정된 커밋 또는 압축 작업 시 테이블의 최신 스냅샷을 보는 쿼리입니다. MoR 테이블의 경우 스냅샷 쿼리는 쿼리 시의 최신 파일 슬라이스의 기본 파일과 델타 파일을 병합하여 테이블의 최신 상태를 나타냅니다.
+ 증분의 쿼리: 이 쿼리는 지정된 커밋 및 압축 이후 테이블에 기록된 새 데이터만 볼 수 있습니다. 이는 변경 스트림을 효과적으로 제공하여 증분 데이터 파이프라인을 사용할 수 있도록 합니다.
+ 읽기 최적화 쿼리: MoR 테이블의 경우 쿼리가 압축된 최신 데이터를 표시합니다. CoW 테이블의 경우 이 쿼리는 커밋된 최신 데이터를 보여줍니다.
쓸 때 복사(CoW) 테이블의 경우 크롤러는 ReadOptimized serde `org.apache.hudi.hadoop.HoodieParquetInputFormat`을 사용하는 단일 테이블을 데이터 카탈로그에서 생성합니다.  
읽을 때 병합(MoR) 테이블의 경우 크롤러는 동일한 테이블 위치에 대한 두 개의 테이블을 데이터 카탈로그에서 생성합니다.  
+ ReadOptimized serde `org.apache.hudi.hadoop.HoodieParquetInputFormat`을 사용하는 `_ro` 접미사가 있는 테이블.
+ 스냅샷 쿼리를 허용하는 RealTime Serde를 사용하는 `_rt` 접미사가 포함된 테이블(`org.apache.hudi.hadoop.realtime.HoodieParquetRealtimeInputFormat`).

**MongoDB 및 Amazon DocumentDB(MongoDB와 호환)**  
MongoDB 버전 3.2 이상이 지원됩니다. 크롤러 실행 시간을 줄이기 위해 데이터의 작은 샘플만 크롤링하도록 선택할 수 있습니다.

**관계형 데이터베이스**  
인증에는 데이터베이스 사용자 이름과 암호가 사용됩니다. 데이터베이스 엔진의 유형에 따라 데이터베이스, 스키마 및 테이블처럼 어떤 객체를 크롤할 것인지 선택합니다.

**Snowflake**  
Snowflake JDBC 크롤러는 테이블, 외부 테이블, 뷰 및 구체화된 뷰의 크롤링을 지원합니다. 구체화된 뷰 정의는 채워지지 않습니다.  
Snowflake 외부 테이블의 경우 크롤러는 Amazon S3 위치를 가리키는 경우에만 크롤링합니다. 크롤러는 테이블 스키마 이외에 Amazon S3 위치, 파일 형식 및 출력을 Data Catalog 테이블의 테이블 파라미터로 크롤링합니다. 파티션을 나눈 외부 테이블의 파티션 정보는 채워지지 않습니다.  
ETL은 현재 Snowflake 크롤러를 사용하여 생성한 데이터 카탈로그 테이블에서 지원되지 않습니다.

# 크롤러 사전 조건
<a name="crawler-prereqs"></a>

크롤러는 정의할 때 지정한 AWS Identity and Access Management(IAM) 역할의 권한을 수임합니다. IAM 역할은 데이터 스토어에서 데이터를 추출하여 데이터 카탈로그에 작성할 수 있는 권한이 있어야 합니다. AWS Glue 콘솔은 AWS Glue 보안 주체 서비스를 위한 신뢰할 수 잇는 정책과 연관된 IAM 역할만 목록에 기록합니다. 콘솔에서 IAM 역할을 IAM 정책을 통해 생성하여 크롤러에 의해 액세스된 Amazon S3 데이터 스토어로 액세스할 수 있습니다. AWS Glue에 역할을 부여하는 것에 대한 자세한 내용은 [AWS Glue에 대한 자격 증명 기반 정책](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies) 단원을 참조하십시오.

**참고**  
Delta Lake 데이터 스토어를 크롤링할 때는 Amazon S3 위치에 대한 읽기/쓰기 권한을 가지고 있어야 합니다.

크롤러의 경우 역할을 생성하고 다음 정책을 연결할 수 있습니다.
+ 데이터 카탈로그에 필요한 권한을 부여하는 `AWSGlueServiceRole` AWS 관리형 정책
+ 데이터 원본에 대한 권한을 부여하는 인라인 정책입니다.
+ 역할에 대한 `iam:PassRole` 권한을 부여하는 인라인 정책입니다.

더 빠른 접근 방식은 AWS Glue 콘솔 크롤러 마법사가 역할을 생성하도록 하는 것입니다. 생성하는 역할은 특히 크롤러를 위한 것이며 `AWSGlueServiceRole` AWS 관리형 정책과 지정된 데이터 원본에 대한 필수 인라인 정책을 포함합니다.

크롤러에 대한 기존 역할을 지정하는 경우 `AWSGlueServiceRole` 정책 또는 이에 상응하는 것(또는 이 정책의 범위가 축소된 버전)과 필수 인라인 정책이 포함되어 있는지 확인합니다. 예를 들어 Amazon S3 데이터 스토어의 경우 인라인 정책은 최소한 다음과 같습니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::bucket/object*"
      ]
    }
  ]
}
```

------

Amazon DynamoDB 데이터 스토어의 경우 정책은 최소한 다음과 같습니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DescribeTable",
        "dynamodb:Scan"
      ],
      "Resource": [
        "arn:aws:dynamodb:us-east-1:111122223333:table/table-name*"
      ]
    }
  ]
}
```

------

크롤러가 AWS Key Management Service(AWS KMS) 암호화 Amazon S3 데이터를 읽는 경우 IAM 역할이 AWS KMS 키에 대한 권한을 복호화해야 합니다. 자세한 내용은 [2단계: AWS Glue에 대한 IAM 역할 생성](create-an-iam-role.md) 섹션을 참조하세요.

# 분류자 정의 및 관리
<a name="add-classifier"></a>

분류자는 데이터 스토어의 데이터를 읽습니다. 데이터 포맷을 인식하면 스키마를 생성합니다. 분류자는 확실성 숫자를 반환하여 포맷 인식이 어땠는지 보여줍니다.

AWS Glue에서 기본 분류자 세트를 제공하지만 사용자 지정 분류자를 생성할 수도 있습니다. AWS Glue는 크롤러 정의에 지정된 순서로 사용자 정의 분류자를 먼저 호출합니다. 사용자 분류자에서 반환된 결과에 따라 AWS Glue는 기본 설정 분류자도 시작할 수 있습니다. 분류자가 진행 중에 `certainty=1.0`을 반환하면 정확한 스키마를 생성할 수 있다는 100% 확실성을 나타냅니다. 이후 AWS Glue가 해당 분류자의 출력을 사용합니다.

어떠한 분류자도 `certainty=1.0`을 반환하지 않으면, AWS Glue는 높은 확실성이 있는 분류자 출력을 사용합니다. 어떠한 분류자도 `0.0`을 초과한 확실성을 반환하지 않으면, AWS Glue는 `UNKNOWN`의 기본 분류 문자열을 반환합니다.

## 언제 분류자를 사용하나요?
<a name="classifier-when-used"></a>

데이터 스토어를 크롤하여 AWS Glue Data Catalog에 메타데이터 테이블을 정의할 때 분류자를 사용합니다. 분류자의 순서가 있는 세트를 통해 크롤러를 설치할 수 있습니다. 크롤러가 분류자를 시작할 때 분류자는 데이터가 인식되었는지 결정합니다. 분류자가 데이터를 인식하지 못하거나 100% 확실성이 없다면 크롤러는 목록에서 다음 분류자를 시작하여 데이터를 인식하는지 결정합니다.

 AWS Glue 콘솔을 사용한 분류자 생성에 대한 자세한 내용은 [AWS Glue 콘솔을 사용하여 분류자 생성](console-classifiers.md)을 참조하십시오.

## 사용자 지정 분류자
<a name="classifier-defining"></a>

분류자의 출력은 파일 분류 혹은 포맷(예를 들어 `json`) 및 파일 스키마를 보여주는 문자열을 포함합니다. 사용자 지정 분류자의 경우, 분류자 유형을 기반으로 스키마를 생성하는 로직을 정의합니다. 분류자 유형은 grok 패턴, XML 태그 및 JSON에 따른 스키마 정의를 포함합니다.

분류자 정의를 변경하면 분류자를 사용하여 이전에 크롤링된 어떤 데이터도 재분류가 되지 않습니다. 크롤러는 이전에 크롤링된 데이터를 계속 추적합니다. 새로운 데이터는 업데이트된 스키마 결과를 낳을 수 있는 업데이트된 분류자로 분류됩니다. 데이터 스키마가 연관되면 크롤러를 실행할 때 분류자를 계정에 업데이트하여 스키마를 변경합니다. 부정확한 분류자를 바로 잡기 위해 데이터를 재분류하려면 업데이트된 분류자로 새로운 데이터를 생성합니다.

AWS Glue의 사용자 지정 분류자를 생성하는 방법에 대한 자세한 내용은 [다양한 데이터 형식에 대한 사용자 지정 분류자 작성](custom-classifier.md) 섹션을 참조하십시오.

**참고**  
데이터 포맷이 기본 설정 분류자 중 하나로 인식되면 사용자 지정 분류자를 생성할 필요가 없습니다.

## 기본 제공 분류자
<a name="classifier-built-in"></a>

 AWS Glue는 JSON, CSV, 웹 로그 및 다수 데이터베이스 시스템을 포함한 다양한 포맷의 기본 설정 분류자를 제공합니다.

AWS Glue가 100% 확실성의 입력 데이터 포맷에 맞는 사용자 지정 분류자를 찾을 수 없다면 다음 테이블에 보여진 것처럼 기본 설정 분류자를 시작합니다. 기본 설정 분류자는 포맷이 일치한지(`certainty=1.0`) 일치하지 않는지(`certainty=0.0`) 보여주는 결과를 반환합니다. `certainty=1.0`이 있는 첫 번째 분류자는 Data Catalog의 메타데이터 테이블의 분류 문자열 및 스키마를 제공합니다.


| 분류자 유형 | 분류 문자열 | Notes | 
| --- | --- | --- | 
| Apache Avro | avro | 파일 시작 부분의 스키마를 읽어 포맷을 결정합니다. | 
| Apache ORC | orc | 파일 메타데이터를 읽어 포맷을 결정합니다. | 
| Apache Parquet | parquet | 파일 끝 부분의 스키마를 읽어 포맷을 결정합니다. | 
| JSON | json | 파일 시작 부분을 읽어 포맷을 결정합니다. | 
| 이진수 JSON | bson | 파일 시작 부분을 읽어 포맷을 결정합니다. | 
| XML | xml | 파일 시작부를 읽어 형식을 확인합니다. AWS Glue는 문서의 XML 태그에 기반하여 테이블 스키마를 확인합니다. 문서의 행을 지정하기 위한 사용자 지정 분류자를 생성하는 방법에 대한 자세한 내용은 [XML 사용자 지정 분류자 작성](custom-classifier.md#custom-classifier-xml) 단원을 참조하십시오. | 
| Amazon Ion | ion | 파일 시작 부분을 읽어 포맷을 결정합니다. | 
| 통합된 Apache Log | combined\$1apache | grok 패턴을 통해 로그 포맷을 결정합니다. | 
| Apache log | apache | grok 패턴을 통해 로그 포맷을 결정합니다. | 
| Linux kernel log | linux\$1kernel | grok 패턴을 통해 로그 포맷을 결정합니다. | 
| Microsoft log | microsoft\$1log | grok 패턴을 통해 로그 포맷을 결정합니다. | 
| Ruby log | ruby\$1logger | 파일 시작 부분을 읽어 포맷을 결정합니다. | 
| Squid 3.x log | squid | 파일 시작 부분을 읽어 포맷을 결정합니다. | 
| Redis monitor log | redismonlog | 파일 시작 부분을 읽어 포맷을 결정합니다. | 
| Redis log | redislog | 파일 시작 부분을 읽어 포맷을 결정합니다. | 
| CSV | csv | 콤마(,) 혹은 파이프(\$1), 탭(\$1t), 세미콜론(;), Ctrl\$1A(\$1u0001)의 다음 구획 문자를 확인합니다. Ctrl-A는 Start Of Heading용 유니코드 관리 문자입니다. | 
| Amazon Redshift | redshift | JDBC 연결을 사용하여 메타데이터를 가져옵니다. | 
| MySQL | mysql | JDBC 연결을 사용하여 메타데이터를 가져옵니다. | 
| PostgreSQL | postgresql | JDBC 연결을 사용하여 메타데이터를 가져옵니다. | 
| Oracle 데이터베이스 | oracle | JDBC 연결을 사용하여 메타데이터를 가져옵니다. | 
| Microsoft SQL Server | sqlserver | JDBC 연결을 사용하여 메타데이터를 가져옵니다. | 
| Amazon DynamoDB | dynamodb | DynamoDB 테이블에서 데이터를 읽습니다. | 

다음 형식의 파일은 분류될 수 있습니다.
+ ZIP(단일 파일만 있는 아카이브에 지원됨). 다른 서비스에서는 Zip이 잘 지원되지 않습니다(아카이브 때문에).
+ bzip
+ GZIP
+ LZ4
+ Snappy(표준 및 Hadoop 네이티브 Snappy 형식 모두에서 지원됨)

### 기본 설정 CSV 분류자
<a name="classifier-builtin-rules"></a>

기본 설정 CSV 분류자는 CSV 파일 내용을 파싱하여 AWS Glue 테이블 스키마를 결정합니다. 이 분류자는 다음 구분 기호를 확인합니다.
+ 쉼표(,)
+ 파이프(\$1)
+ 탭(\$1t)
+ 세미콜론(;)
+ Ctrl-A (\$1u0001)

  Ctrl-A는 `Start Of Heading`용 유니코드 관리 문자입니다.

CSV로써 분류되려면 테이블 스키마는 적어도 데이터의 두 개의 열과 두 개의 행이 있어야 합니다. CSV 분류자는 휴리스틱 숫자를 사용하여 헤더가 주어진 파일에 존재하는지 결정합니다. 분류자가 데이터의 첫 번째 행에서 헤더를 결정하지 못하면 열 헤더는 `col1`, `col2`, `col3` 등으로 보여집니다. 기본 설정 CSV 분류자는 다음 파일의 특성을 평가하여 헤더를 추론할지 여부를 결정합니다.
+ 잠재적 헤더의 모든 열은 STRING(문자열) 데이터 유형으로 파싱합니다.
+ 마지막 열을 제외하면 잠재적 헤더의 모든 열은 150 문자보다 적습니다. 후행 구분 기호를 허용하기 위해서는 마지막 열이 파일 전체로 비어 있을 수 있습니다.
+ 잠재적 헤더의 모든 열은 열 이름 때문에 AWS Glue `regex` 요구 사항과 일치해야 합니다.
+ 헤더는 데이터 행과 많이 달라야 합니다. 이를 결정하기 위해서는 하나 이상의 행이 STRING(문자열) 유형 아닌 것으로써 파싱해야 합니다. 모든 열이 문자열 유형이면 데이터 첫 번째 행은 헤더로써 사용되는 후속 행과 많이 다르지 않습니다.

**참고**  
기본 설정 CSV 분류자는 원하는 AWS Glue 테이블을 생성하지 않으면 다음 대안 중 하나 이상을 사용할 수 있습니다.  
Data Catalog의 열 이름을 변경하고 `SchemaChangePolicy`를 LOG에 설정하고 파티션 출력 구성을 `InheritFromTable`로 설정하여 추후에 실행할 크롤러에 대비합니다.
사용자 지정 grok 분류자를 생성하여 데이터를 파싱하고 원하는 열을 지정합니다.
기본 설정 CSV 분류자는 유형 추론의 좋은 선택인 직렬화 라이브러리로써 `LazySimpleSerDe`를 참조하는 테이블을 생성합니다. 하지만 CSV 데이터가 따옴표로 묶인 문자열을 포함하면 테이블 정의를 편집하고 SerDe 라이브러리를 `OpenCSVSerDe`로 변경합니다. 추론된 유형을 STRING(문자열)로 조절하고 `SchemaChangePolicy`를 로그에 설치하고 파티션 출력 구성을 `InheritFromTable`로 설치하여 추후에 실행할 크롤러에 대비합니다. SerDe 라이브러리에 대한 자세한 내용은 Amazon Athena User Guide의 [SerDe Reference](https://docs.aws.amazon.com/athena/latest/ug/serde-reference.html)를 참조하세요.

# 다양한 데이터 형식에 대한 사용자 지정 분류자 작성
<a name="custom-classifier"></a>

AWS Glue에서 데이터를 분류할 수 있도록 사용자 지정 분류자를 제공할 수 있습니다. You can create a custom classifier using a grok 패턴, XML 태그, JavaScript Object Notation(JSON) 또는 CSV(쉼표로 분리된 값)를 이용하여 사용자 지정 분류자를 생성할 수 있습니다. AWS Glue 크롤러가 사용자 지정 분류자를 호출합니다. 분류자가 데이터를 인식하면 크롤러에 데이터 분류 및 스키마를 반환합니다. 데이터가 내장된 분류자와 일치하지 않거나 크롤러가 생성한 테이블을 사용자 지정하기 원할 경우 사용자 지정 분류자를 정의해야 할 수도 있습니다.

 AWS Glue 콘솔을 사용한 분류자 생성에 대한 자세한 내용은 [AWS Glue 콘솔을 사용하여 분류자 생성](console-classifiers.md)을 참조하십시오.

AWS Glue는 사용자가 지정한 순서대로 내장된(기본) 분류자에 앞서 사용자 지정 분류자를 실행합니다. 크롤러가 데이터와 일치하는 분류자를 찾으면, 사용자의 AWS Glue Data Catalog에 작성되는 테이블 정의에 분류 문자열과 스키마를 사용합니다.

**Topics**
+ [Grok 사용자 지정 분류자 작성](#custom-classifier-grok)
+ [XML 사용자 지정 분류자 작성](#custom-classifier-xml)
+ [JSON 사용자 지정 분류자 작성](#custom-classifier-json)
+ [CSV 사용자 지정 분류자 작성](#custom-classifier-csv)

## Grok 사용자 지정 분류자 작성
<a name="custom-classifier-grok"></a>

Grok는 텍스트 데이터의 패턴 일치 구문 분석에 사용하는 도구입니다. Grok 패턴은 한 번에 한 줄씩 데이터를 일치시킬 때 사용하는 명명된 정규식(regex) 세트입니다. AWS Glue는 grok 패턴을 사용하여 사용자 데이터의 스키마를 추정합니다. Grok 패턴과 사용자 데이터가 일치하는 경우 AWS Glue는 이 패턴을 사용해 데이터의 구조를 결정하고 이를 필드로 매핑합니다.

AWS Glue는 많은 기본 패턴을 제공하지만, 사용자가 직접 정의할 수도 있습니다. 기본 패턴을 사용하여 grok 패턴을 생성하거나 사용자 지정 분류자 정의에서 패턴을 사용자 지정할 수 있습니다. 사용자 지정 텍스트 파일 형식을 분류할 수 있도록 grok 패턴을 조정할 수 있습니다.

**참고**  
AWS Glue grok 사용자 지정 분류자는 AWS Glue Data Catalog에서 생성된 테이블에 대해 `GrokSerDe` 직렬화 라이브러리를 사용합니다. AWS Glue Data Catalog를 Amazon Athena, Amazon EMR 또는 Redshift Spectrum에 사용하려는 경우 이러한 서비스에 대한 설명서에서 `GrokSerDe` 지원에 대한 정보를 확인하세요. 현재는 Amazon EMR 및 Redshift Spectrum에서 `GrokSerDe`로 생성된 테이블을 쿼리할 때 문제가 발생할 수 있습니다.

다음은 grok 패턴 구성 요소의 기본적인 구문입니다.

```
%{PATTERN:field-name}
```

명명된 `PATTERN`과 일치하는 데이터를 `string`이라는 기본 데이터 유형을 가진 스키마의 `field-name` 열로 매핑합니다. 선택적으로, 필드의 데이터 형식을 결과 스키마에서 `byte`, `boolean`, `double`, `short`, `int`, `long` 또는 `float`로 캐스트할 수 있습니다.

```
%{PATTERN:field-name:data-type}
```

예를 들면, `num` 필드를 `int` 데이터 유형으로 캐스트하기 위해 이 패턴을 사용할 수 있습니다.

```
%{NUMBER:num:int}
```

패턴을 다른 패턴으로 구성할 수 있습니다. 예를 들어 월, 해당 월의 날, 시간(예: `Feb 1 06:25:43`)의 패턴으로 정의되는 `SYSLOG` 타임스탬프의 패턴이 있을 수 있습니다. 이 데이터에서 다음 패턴을 정의할 수 있습니다.

```
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
```

**참고**  
Grok 패턴은 한 번에 한 줄씩만 처리할 수 있습니다. 여러 줄로 된 패턴을 지원하지 않습니다. 또 패턴 내부의 줄 바꿈도 지원하지 않습니다.

### grok 분류자의 사용자 지정 값
<a name="classifier-values"></a>

grok 분류자를 정의할 때 사용자 지정 분류자를 생성하기 위해 다음 값을 제공합니다.

**명칭**  
분류자의 이름.

**분류**  
`special-logs` 같이 분류되는 데이터의 형식을 설명하기 위해 작성하는 텍스트 문자열입니다.

**Grok 패턴**  
일치 여부를 결정하기 위해 데이터 스토어에 적용하는 패턴 세트입니다. 이 패턴은 AWS Glue [기본 패턴](#classifier-builtin-patterns) 및 사용자가 정의한 사용자 지정 패턴입니다.  
다음은 grok 패턴의 예입니다.  

```
%{TIMESTAMP_ISO8601:timestamp} \[%{MESSAGEPREFIX:message_prefix}\] %{CRAWLERLOGLEVEL:loglevel} : %{GREEDYDATA:message}
```
데이터가 `TIMESTAMP_ISO8601`와 일치하면 스키마 열인 `timestamp`가 생성됩니다. 동작은 예제의 다른 명명 패턴과 유사합니다.

**사용자 지정 패턴**  
선택적으로 사용자가 정의한 사용자 지정 패턴입니다. 사용자 데이터를 분류하는 grok 패턴이 이 패턴을 참조합니다. 데이터에 적용되는 grok 패턴에서 이런 사용자 지정 패턴을 참조시킬 수 있습니다. 각 사용자 지정 구성 요소 패턴은 별개 줄로 구성되어 있어야 합니다. [정규식(regex)](http://en.wikipedia.org/wiki/Regular_expression) 구문을 사용하여 패턴을 정의합니다.  
다음은 사용자 지정 패턴 사용에 대한 예입니다.  

```
CRAWLERLOGLEVEL (BENCHMARK|ERROR|WARN|INFO|TRACE)
MESSAGEPREFIX .*-.*-.*-.*-.*
```
첫 번째 사용자 지정 명명 패턴인 `CRAWLERLOGLEVEL`은 데이터가 열거된 문자열 중 하나와 일치할 때 일치됩니다. 두 번째 사용자 지정 패턴인 `MESSAGEPREFIX`은 메시지 접두사 문자열과 일치를 시도합니다.

AWS Glue는 계속해서 생성 시간, 마지막 업데이트 시간, 분류자 버전을 추적합니다.

### 기본 제공 패턴
<a name="classifier-builtin-patterns"></a>

AWS Glue는 사용자 지정 분류자 구축에 사용할 수 있는 많은 범용 패턴을 제공합니다. 분류자 정의의 `grok pattern`에 명명 패턴을 추가합니다.

다음 목록은 각 패턴이 한 줄씩 구성되어 있습니다. 각 줄의 패턴 이름에는 정의가 적용됩니다. [정규식(regex)](http://en.wikipedia.org/wiki/Regular_expression) 구문은 패턴을 정의하는 데 사용됩니다.

```
#<noloc>&GLU;</noloc> Built-in patterns
 USERNAME [a-zA-Z0-9._-]+
 USER %{USERNAME:UNWANTED}
 INT (?:[+-]?(?:[0-9]+))
 BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
 NUMBER (?:%{BASE10NUM:UNWANTED})
 BASE16NUM (?<![0-9A-Fa-f])(?:[+-]?(?:0x)?(?:[0-9A-Fa-f]+))
 BASE16FLOAT \b(?<![0-9A-Fa-f.])(?:[+-]?(?:0x)?(?:(?:[0-9A-Fa-f]+(?:\.[0-9A-Fa-f]*)?)|(?:\.[0-9A-Fa-f]+)))\b
 BOOLEAN (?i)(true|false)
 
 POSINT \b(?:[1-9][0-9]*)\b
 NONNEGINT \b(?:[0-9]+)\b
 WORD \b\w+\b
 NOTSPACE \S+
 SPACE \s*
 DATA .*?
 GREEDYDATA .*
 #QUOTEDSTRING (?:(?<!\\)(?:"(?:\\.|[^\\"])*"|(?:'(?:\\.|[^\\'])*')|(?:`(?:\\.|[^\\`])*`)))
 QUOTEDSTRING (?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))
 UUID [A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}
 
 # Networking
 MAC (?:%{CISCOMAC:UNWANTED}|%{WINDOWSMAC:UNWANTED}|%{COMMONMAC:UNWANTED})
 CISCOMAC (?:(?:[A-Fa-f0-9]{4}\.){2}[A-Fa-f0-9]{4})
 WINDOWSMAC (?:(?:[A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2})
 COMMONMAC (?:(?:[A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2})
 IPV6 ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?
 IPV4 (?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9])
 IP (?:%{IPV6:UNWANTED}|%{IPV4:UNWANTED})
 HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-_]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-_]{0,62}))*(\.?|\b)
 HOST %{HOSTNAME:UNWANTED}
 IPORHOST (?:%{HOSTNAME:UNWANTED}|%{IP:UNWANTED})
 HOSTPORT (?:%{IPORHOST}:%{POSINT:PORT})
 
 # paths
 PATH (?:%{UNIXPATH}|%{WINPATH})
 UNIXPATH (?>/(?>[\w_%!$@:.,~-]+|\\.)*)+
 #UNIXPATH (?<![\w\/])(?:/[^\/\s?*]*)+
 TTY (?:/dev/(pts|tty([pq])?)(\w+)?/?(?:[0-9]+))
 WINPATH (?>[A-Za-z]+:|\\)(?:\\[^\\?*]*)+
 URIPROTO [A-Za-z]+(\+[A-Za-z+]+)?
 URIHOST %{IPORHOST}(?::%{POSINT:port})?
 # uripath comes loosely from RFC1738, but mostly from what Firefox
 # doesn't turn into %XX
 URIPATH (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%_\-]*)+
 #URIPARAM \?(?:[A-Za-z0-9]+(?:=(?:[^&]*))?(?:&(?:[A-Za-z0-9]+(?:=(?:[^&]*))?)?)*)?
 URIPARAM \?[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*
 URIPATHPARAM %{URIPATH}(?:%{URIPARAM})?
 URI %{URIPROTO}://(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?
 
 # Months: January, Feb, 3, 03, 12, December
 MONTH \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b
 MONTHNUM (?:0?[1-9]|1[0-2])
 MONTHNUM2 (?:0[1-9]|1[0-2])
 MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])
 
 # Days: Monday, Tue, Thu, etc...
 DAY (?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)
 
 # Years?
 YEAR (?>\d\d){1,2}
 # Time: HH:MM:SS
 #TIME \d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?
 # TIME %{POSINT<24}:%{POSINT<60}(?::%{POSINT<60}(?:\.%{POSINT})?)?
 HOUR (?:2[0123]|[01]?[0-9])
 MINUTE (?:[0-5][0-9])
 # '60' is a leap second in most time standards and thus is valid.
 SECOND (?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)
 TIME (?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9])
 # datestamp is YYYY/MM/DD-HH:MM:SS.UUUU (or something like it)
 DATE_US %{MONTHNUM}[/-]%{MONTHDAY}[/-]%{YEAR}
 DATE_EU %{MONTHDAY}[./-]%{MONTHNUM}[./-]%{YEAR}
 DATESTAMP_US %{DATE_US}[- ]%{TIME}
 DATESTAMP_EU %{DATE_EU}[- ]%{TIME}
 ISO8601_TIMEZONE (?:Z|[+-]%{HOUR}(?::?%{MINUTE}))
 ISO8601_SECOND (?:%{SECOND}|60)
 TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
 TZ (?:[PMCE][SD]T|UTC)
 DATESTAMP_RFC822 %{DAY} %{MONTH} %{MONTHDAY} %{YEAR} %{TIME} %{TZ}
 DATESTAMP_RFC2822 %{DAY}, %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{ISO8601_TIMEZONE}
 DATESTAMP_OTHER %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR}
 DATESTAMP_EVENTLOG %{YEAR}%{MONTHNUM2}%{MONTHDAY}%{HOUR}%{MINUTE}%{SECOND}
 CISCOTIMESTAMP %{MONTH} %{MONTHDAY} %{TIME}
 
 # Syslog Dates: Month Day HH:MM:SS
 SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
 PROG (?:[\w._/%-]+)
 SYSLOGPROG %{PROG:program}(?:\[%{POSINT:pid}\])?
 SYSLOGHOST %{IPORHOST}
 SYSLOGFACILITY <%{NONNEGINT:facility}.%{NONNEGINT:priority}>
 HTTPDATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT}
 
 # Shortcuts
 QS %{QUOTEDSTRING:UNWANTED}
 
 # Log formats
 SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:
 
 MESSAGESLOG %{SYSLOGBASE} %{DATA}
 
 COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{Bytes:bytes=%{NUMBER}|-})
 COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent}
 COMMONAPACHELOG_DATATYPED %{IPORHOST:clientip} %{USER:ident;boolean} %{USER:auth} \[%{HTTPDATE:timestamp;date;dd/MMM/yyyy:HH:mm:ss Z}\] "(?:%{WORD:verb;string} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion;float})?|%{DATA:rawrequest})" %{NUMBER:response;int} (?:%{NUMBER:bytes;long}|-)
 
 
 # Log Levels
 LOGLEVEL ([A|a]lert|ALERT|[T|t]race|TRACE|[D|d]ebug|DEBUG|[N|n]otice|NOTICE|[I|i]nfo|INFO|[W|w]arn?(?:ing)?|WARN?(?:ING)?|[E|e]rr?(?:or)?|ERR?(?:OR)?|[C|c]rit?(?:ical)?|CRIT?(?:ICAL)?|[F|f]atal|FATAL|[S|s]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)
```

## XML 사용자 지정 분류자 작성
<a name="custom-classifier-xml"></a>

XML는 파일에서 태그를 사용해 문서의 구조를 정의합니다. XML 사용자 지정 분류자의 경우 사용자가 행을 정의할 때 사용하는 태그 이름을 지정할 수 있습니다.

### XML 분류자의 사용자 지정 분류자 값
<a name="classifier-values-xml"></a>

XML 분류자를 정의할 때 사용자 지정 분류자를 생성하기 위해 AWS Glue에 다음 값을 제공합니다. 이 분류자의 분류 필드를 `xml`으로 설정합니다.

**명칭**  
분류자의 이름.

**행 태그**  
XML 문서의 테이블 행을 정의하는 XML 태그 이름입니다. 꺾쇠 괄호 `< >`는 사용하지 않습니다. 이름은 태그에 대한 XML 규칙을 따라야 합니다.  
행 데이터가 포함된 요소는 자기 복제를 하는 비어 있는 요소가 **될 수 없습니다**. 예를 들어 이 빈 요소는 AWS Glue에서 구문 분석되지 **않습니다**.  

```
            <row att1=”xx” att2=”yy” />  
```
 비어 있는 요소를 다음과 같이 작성할 수 없습니다.  

```
            <row att1=”xx” att2=”yy”> </row> 
```

AWS Glue는 계속해서 생성 시간, 마지막 업데이트 시간, 분류자 버전을 추적합니다.

예를 들어 다음과 같은 XML 파일이 있다고 가정하겠습니다. 작성자와 제목 열만 포함된 AWS Glue 테이블을 생성하려면 AWS Glue 콘솔에서 **Row tag(행 태그)**가 `AnyCompany`인 분류자를 생성합니다. 그런 다음 이 사용자 지정 분류자를 사용하는 크롤러를 추가해 실행합니다.

```
<?xml version="1.0"?>
<catalog>
   <book id="bk101">
     <AnyCompany>
       <author>Rivera, Martha</author>
       <title>AnyCompany Developer Guide</title>
     </AnyCompany>
   </book>
   <book id="bk102">
     <AnyCompany>   
       <author>Stiles, John</author>
       <title>Style Guide for AnyCompany</title>
     </AnyCompany>
   </book>
</catalog>
```

## JSON 사용자 지정 분류자 작성
<a name="custom-classifier-json"></a>

JSON은 데이터 교환 형식입니다. 이름 값 쌍이나 순서가 지정된 값 목록을 가진 데이터 구조를 정의합니다. JSON 사용자 지정 분류자의 경우 데이터 구조에 JSON 경로를 지정해 사용자 테이블의 스키마를 정의할 수 있습니다.

### AWS Glue의 사용자 지정 분류자 값
<a name="classifier-values-json"></a>

JSON 분류자를 정의할 때 사용자 지정 분류자를 생성하기 위해 AWS Glue에 다음 값을 제공합니다. 이 분류자의 분류 필드를 `json`으로 설정합니다.

**명칭**  
분류자의 이름.

**JSON 경로**  
테이블 스키마 정의에 사용하는 객체를 가리키는 JSON 경로입니다. JSON 경로 작성 시 점이나 대괄호를 사용할 수 없습니다. 다음의 연산자가 지원됩니다:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/custom-classifier.html)

AWS Glue는 계속해서 생성 시간, 마지막 업데이트 시간, 분류자 버전을 추적합니다.

**Example 배열에서 레코드를 가져오는 데 JSON 분류자 사용**  
JSON 데이터가 레코드 배열이라고 가정하겠습니다. 예를 들어, 파일의 처음 몇 줄은 다음과 비슷할 수 있습니다.  

```
[
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ak",
    "name": "Alaska"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:1",
    "name": "Alabama's 1st congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:2",
    "name": "Alabama's 2nd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:3",
    "name": "Alabama's 3rd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:4",
    "name": "Alabama's 4th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:5",
    "name": "Alabama's 5th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:6",
    "name": "Alabama's 6th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:7",
    "name": "Alabama's 7th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:1",
    "name": "Arkansas's 1st congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:2",
    "name": "Arkansas's 2nd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:3",
    "name": "Arkansas's 3rd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:4",
    "name": "Arkansas's 4th congressional district"
  }
]
```
기본 JSON 분류자를 사용하는 크롤러를 실행할 때는 스키마 정의에 전체 파일이 사용됩니다. JSON 경로를 지정하지 않기 때문에 크롤러는 데이터를 하나의 객체로 처리하며, 이것이 배열입니다. 예를 들어, 스키마의 모양은 다음과 같을 수 있습니다.  

```
root
|-- record: array
```
하지만 JSON 어레이의 각 레코드를 토대로 스키마를 생성하려면 사용자 지정 JSON 분류자를 생성하고 JSON 경로를 `$[*]`로 지정합니다. 이 JSON 경로를 지정하는 경우, 분류자는 어레이의 12개 레코드를 모두 조사해 스키마를 결정합니다. 그 결과로 생성된 스키마에는 다음 예제와 유사하게 각 객체의 필드가 분리되어 포함됩니다.  

```
root
|-- type: string
|-- id: string
|-- name: string
```

**Example 파일의 일부만을 검사하는 데 JSON 분류자 사용**  
JSON 데이터가 [http://everypolitician.org/](http://everypolitician.org/)에서 가져온 예제 JSON 파일 `s3://awsglue-datasets/examples/us-legislators/all/areas.json`의 패턴을 따른다고 가정합니다. JSON 파일의 예제 객체는 다음과 같습니다.  

```
{
  "type": "constituency",
  "id": "ocd-division\/country:us\/state:ak",
  "name": "Alaska"
}
{
  "type": "constituency",
  "identifiers": [
    {
      "scheme": "dmoz",
      "identifier": "Regional\/North_America\/United_States\/Alaska\/"
    },
    {
      "scheme": "freebase",
      "identifier": "\/m\/0hjy"
    },
    {
      "scheme": "fips",
      "identifier": "US02"
    },
    {
      "scheme": "quora",
      "identifier": "Alaska-state"
    },
    {
      "scheme": "britannica",
      "identifier": "place\/Alaska"
    },
    {
      "scheme": "wikidata",
      "identifier": "Q797"
    }
  ],
  "other_names": [
    {
      "lang": "en",
      "note": "multilingual",
      "name": "Alaska"
    },
    {
      "lang": "fr",
      "note": "multilingual",
      "name": "Alaska"
    },
    {
      "lang": "nov",
      "note": "multilingual",
      "name": "Alaska"
    }
  ],
  "id": "ocd-division\/country:us\/state:ak",
  "name": "Alaska"
}
```
기본 JSON 분류자를 사용하는 크롤러를 실행할 때는 스키마를 생성하는 데 전체 파일이 사용됩니다. 그러면 다음과 같은 스키마가 생성될 수 있습니다.  

```
root
|-- type: string
|-- id: string
|-- name: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
```
하지만 "`id`" 객체만을 사용하는 스키마를 생성하려면 사용자 지정 JSON 분류자를 생성하고 JSON 경로를 `$.id`로 지정합니다. 그러면 스키마는 "`id`" 필드에만 토대를 둡니다.  

```
root
|-- record: string
```
이 스키마에서 추출한 데이터의 첫 몇 줄은 다음과 같습니다.  

```
{"record": "ocd-division/country:us/state:ak"}
{"record": "ocd-division/country:us/state:al/cd:1"}
{"record": "ocd-division/country:us/state:al/cd:2"}
{"record": "ocd-division/country:us/state:al/cd:3"}
{"record": "ocd-division/country:us/state:al/cd:4"}
{"record": "ocd-division/country:us/state:al/cd:5"}
{"record": "ocd-division/country:us/state:al/cd:6"}
{"record": "ocd-division/country:us/state:al/cd:7"}
{"record": "ocd-division/country:us/state:ar/cd:1"}
{"record": "ocd-division/country:us/state:ar/cd:2"}
{"record": "ocd-division/country:us/state:ar/cd:3"}
{"record": "ocd-division/country:us/state:ar/cd:4"}
{"record": "ocd-division/country:us/state:as"}
{"record": "ocd-division/country:us/state:az/cd:1"}
{"record": "ocd-division/country:us/state:az/cd:2"}
{"record": "ocd-division/country:us/state:az/cd:3"}
{"record": "ocd-division/country:us/state:az/cd:4"}
{"record": "ocd-division/country:us/state:az/cd:5"}
{"record": "ocd-division/country:us/state:az/cd:6"}
{"record": "ocd-division/country:us/state:az/cd:7"}
```
JSON 파일의 "`identifier`" 같이 중첩된 객체를 토대로 스키마를 생성하려면 사용자 지정 JSON 분류자를 생성하고 JSON 경로를 `$.identifiers[*].identifier`로 지정합니다. 이 스키마는 이전 예제와 유사하지만, JSON 파일에서 전혀 다른 객체에 토대를 두고 있습니다.  
이런 스키마는 다음과 같습니다.  

```
root
|-- record: string
```
테이블에서 데이터의 첫 몇 줄은 스키마가 "`identifier`" 객체에 토대를 두고 있다는 점을 보여줍니다.  

```
{"record": "Regional/North_America/United_States/Alaska/"}
{"record": "/m/0hjy"}
{"record": "US02"}
{"record": "5879092"}
{"record": "4001016-8"}
{"record": "destination/alaska"}
{"record": "1116270"}
{"record": "139487266"}
{"record": "n79018447"}
{"record": "01490999-8dec-4129-8254-eef6e80fadc3"}
{"record": "Alaska-state"}
{"record": "place/Alaska"}
{"record": "Q797"}
{"record": "Regional/North_America/United_States/Alabama/"}
{"record": "/m/0gyh"}
{"record": "US01"}
{"record": "4829764"}
{"record": "4084839-5"}
{"record": "161950"}
{"record": "131885589"}
```
JSON 파일의 "`name`" 배열의 "`other_names`" 필드 같이 다른 중첩된 객체를 토대로 테이블을 생성하려면 사용자 지정 JSON 분류자를 생성하고 JSON 경로를 `$.other_names[*].name`로 지정합니다. 이 스키마는 이전 예제와 유사하지만, JSON 파일에서 전혀 다른 객체에 토대를 두고 있습니다. 이런 스키마는 다음과 같습니다.  

```
root
|-- record: string
```
이 테이블의 처음 몇 줄 데이터는 "`name`" 배열 내 "`other_names`" 객체의 데이터에 근거함을 보여줍니다.  

```
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Аляска"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "ألاسكا"}
{"record": "ܐܠܐܣܟܐ"}
{"record": "الاسكا"}
{"record": "Alaska"}
{"record": "Alyaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Штат Аляска"}
{"record": "Аляска"}
{"record": "Alaska"}
{"record": "আলাস্কা"}
```

## CSV 사용자 지정 분류자 작성
<a name="custom-classifier-csv"></a>

 사용자 지정 CSV 분류자를 사용하면 사용자 지정 csv 분류자 필드의 각 열에 대한 데이터 형식을 지정할 수 있습니다. 콤마로 분리된 각 열의 데이터 유형을 지정할 수 있습니다. 데이터 유형을 지정하면 크롤러가 추론한 데이터 유형을 재정의하고 데이터가 적절하게 분류되도록 할 수 있습니다.

분류자에서 CSV를 처리하기 위한 Serde를 설정할 수 있습니다. 이는 데이터 카탈로그에서 적용됩니다.

사용자 지정 분류기를 만들면 분류기를 다른 크롤러에 다시 사용할 수도 있습니다.
+  헤더만 있는(데이터 없음) csv 파일의 경우, 정보가 충분하지 않기 때문에 이러한 파일은 UNKNOWN으로 분류됩니다. *열 제목* 옵션에서 CSV에 '제목 포함'을 지정하고 데이터 유형을 제공하면 이러한 파일을 올바르게 분류할 수 있습니다.

사용자 지정 CSV 분류자를 사용하여 다양한 유형의 CSV 데이터 스키마를 추론할 수 있습니다. 분류자에 제공할 수 있는 사용자 지정 속성에는 구분 기호, CSV SerDe 옵션, 헤더에 대한 옵션, 데이터에서 특정 검증을 수행할 수 있는지 여부가 포함되어 있습니다.

### AWS Glue의 사용자 지정 분류자 값
<a name="classifier-values-csv"></a>

CSV 분류자를 정의할 때 분류자를 생성하기 위해 AWS Glue에 다음 값을 제공합니다. 이 분류자의 분류 필드를 `csv`으로 설정합니다.

**분류자 이름**  
분류자의 이름.

**CSV Serde**  
분류자에서 CSV를 처리하기 위한 Serde를 설정합니다. 이는 데이터 카탈로그에서 적용됩니다. 옵션은 Open CSV SerDe, Lazy Simple SerDe, 없음과 같습니다. 크롤러에서 감지하려는 경우 없음 값을 지정할 수 있습니다.

**열 구분 기호**  
행의 열 입력 항목 각각을 구분하는 것을 나타내기 위한 사용자 지정 기호입니다. 유니코드 문자를 제공합니다. 구분 기호를 입력할 수 없는 경우 구분 기호를 복사하여 붙여넣을 수 있습니다. 이 방법은 시스템에서 지원하지 않는 문자(일반적으로 □로 표시)를 포함하여 인쇄 가능한 문자에도 사용할 수 있습니다.

**인용 기호**  
단일 열 값에 내용을 결합하는 것을 나타내기 위한 사용자 지정 기호입니다. 열 구분 기호와 달라야 합니다. 유니코드 문자를 제공합니다. 구분 기호를 입력할 수 없는 경우 구분 기호를 복사하여 붙여넣을 수 있습니다. 이 방법은 시스템에서 지원하지 않는 문자(일반적으로 □로 표시)를 포함하여 인쇄 가능한 문자에도 사용할 수 있습니다.

**열 제목**  
열 제목을 CSV 파일에서 어떻게 탐지해야 하는지에 대한 행동을 표시합니다. 사용자 지정 CSV 파일에 열 제목이 포함되어 있는 경우에는 쉼표로 구분된 열 제목 목록을 입력합니다.

**처리 옵션: 단일 열에서 파일 허용**  
오직 하나의 열만 포함하는 파일을 처리할 수 있도록 합니다.

**처리 옵션: 열 값을 식별하기 전에 공백 트리밍**  
열 값의 유형을 식별하기 전에 값의 트리밍 여부를 지정합니다.

**사용자 지정 데이터 유형 - *선택 사항***  
 쉼표로 분리된 사용자 지정 데이터 유형을 입력합니다. CSV 파일의 사용자 지정 데이터 유형을 지정합니다. 사용자 지정 데이터 유형은 지원되는 데이터 유형이어야 합니다. 지원되는 데이터 유형은 “바이너리”, “부울”, “날짜”, “십진수”, “더블”, “플로트”, “정수”, “롱”, “쇼트”, “문자열”, “타임스탬프”입니다. 지원되지 않는 데이터 유형은 오류를 표시합니다.

# AWS Glue 콘솔을 사용하여 분류자 생성
<a name="console-classifiers"></a>

분류자는 데이터의 스키마를 결정합니다. 사용자 지정 분류자를 작성하고 AWS Glue에서 분류자를 가리킬 수 있습니다.

## 분류자 생성
<a name="add-classifier-console"></a>

AWS Glue 콘솔에서 분류자를 추가하려면 [**분류자 추가(Add classifier)**]를 선택합니다. 분류자를 정의할 때 다음에 대한 값을 제공합니다.
+ [**분류자 이름(Classifier name)**] – 분류자에 대한 고유 이름을 입력합니다.
+ [**분류자 유형(Classifier type)**] – 분류자가 유추한 테이블의 분류자 유형입니다.
+ [**마지막 업데이트(Last updated)** – 이 분류자가 업데이트된 마지막 시간입니다.

**분류자 이름**  
분류자 고유 이름을 입력합니다.

**분류자 유형**  
생성할 분류자의 유형을 선택합니다.

선택한 분류기 유형에 따라 분류기에 대해 다음 속성을 구성합니다.

------
#### [ Grok ]
+ **분류** 

  분류된 데이터의 포맷 또는 유형을 설명하거나 사용자 정의 레이블을 제공합니다.
+ **Grok 패턴** 

  데이터를 구조화 스키마로 구분 분석하는 데 사용됩니다. Grok 패션은 데이터 스토어의 포맷을 보여주는 이름이 붙여진 패턴으로 구성됩니다. AWS Glue에서 제공하는 명명된 기본 제공 패턴과 [**사용자 정의 패턴(Custom patterns)**] 필드에 작성하고 포함하는 사용자 정의 패턴을 사용하여 이 grok 패턴을 작성합니다. Grok 디버거 결과가 AWS Glue 결과와 정확하게 일치하지 않더라도 grok 디버거를 통한 몇 가지 샘플 데이터를 사용하여 패턴을 시도해 볼 수 있습니다. Grok 디버거는 웹에서 볼 수 있습니다. AWS Glue가 제공한 이름이 붙여진 기본 설정 패턴은 웹에서 사용 가능한 grok 패턴과 일반적으로 호환됩니다.

  반복적으로 이름이 붙여진 패턴을 추가하여 Grok 패턴을 만들고 디버거에서 결과를 확인합니다. 이 활동은 AWS Glue 크롤러가 grok 패턴을 실행할 때 신뢰를 줘 데이터가 구문 분석될 수 있습니다.
+ **사용자 지정 패턴** 

  Grok 분류자의 경우, 이것은 여러분이 작성하는 **Grok pattern(Grok 패턴)**의 조건부 빌딩 블록입니다. 기본 설정 패턴이 데이터를 구분 분석하지 못할 경우, 사용자 지정 패턴을 작성해야 할 수도 있습니다. 이런 사용자 지정 패턴은 이 필드에서 정의되고 **Grok pattern(Grok 패턴)** 필드에서 참조됩니다. 각 사용자 지정 패턴은 개별 라인에서 정의됩니다. 기본 설정 패턴과 같이 [regular expression(정규식) (regex)](http://en.wikipedia.org/wiki/Regular_expression) 구문을 사용하는 이름이 붙여진 패턴 정의로 구성됩니다.

  예를 들어, 다음은 뒤이어 정규식 정의가 있는 `MESSAGEPREFIX` 이름을 붙여 데이터를 적용하고 데이터가 패턴을 따르는지 결정합니다.

  ```
  MESSAGEPREFIX .*-.*-.*-.*-.*
  ```

------
#### [ XML ]
+ **행 태그** 

  XML 분류자를 위해, 이것은 XML 문서의 테이블 행을 정의하는 XML 태그 이름입니다. `< >` 꺽쇠괄호없이 이름을 입력합니다. 이름은 태그에 대한 XML 규칙을 따라야 합니다.

  자세한 내용은 [XML 사용자 지정 분류자 작성](custom-classifier.md#custom-classifier-xml) 섹션을 참조하세요.

------
#### [ JSON ]
+ **JSON 경로** 

  JSON 분류자를 위해, 이것은 생성된 테이블 행을 정의하는 객체, 배열 및 값까지의 JSON 경로입니다. AWS Glue가 지원한 연산자를 사용하여 점 혹은 괄호 JSON 구문 이름을 입력합니다.

  자세한 내용은 [JSON 사용자 지정 분류자 작성](custom-classifier.md#custom-classifier-json)의 연산자 목록을 참조하십시오.

------
#### [ CSV ]
+ **열 구분 기호** 

  행의 열 입력 항목 각각을 구분하는 것을 나타내기 위한 단일 문자 또는 기호입니다. 목록에서 구분 기호를 선택하거나 `Other`를 선택하여 사용자 정의 구분 기호를 입력합니다.
+ **인용 기호** 

  단일 열 값에 내용을 결합하는 것을 나타내기 위한 단일 문자 또는 기호입니다. 열 구분 기호와 달라야 합니다. 목록에서 따옴표 기호를 선택하거나 `Other`를 선택하여 사용자 정의 따옴표 문자를 입력합니다.
+ **열 제목** 

  열 제목을 CSV 파일에서 어떻게 탐지해야 하는지에 대한 행동을 표시합니다. `Has headings`, `No headings` 또는 `Detect headings`를 선택할 수 있습니다. 사용자 지정 CSV 파일에 열 제목이 포함되어 있는 경우에는 쉼표로 구분된 열 제목 목록을 입력합니다.
+ **단일 열이 있는 파일 허용** 

  CSV로 분류되려면 데이터는 적어도 데이터의 두 개의 열과 두 개의 행이 있어야 합니다. 하나의 열만 포함하는 파일의 처리를 허용하려면 이 옵션을 사용합니다.
+ **열 값을 식별하기 전에 공백 트리밍** 

  이 옵션은 열 값의 유형을 식별하기 전에 값의 트리밍 여부를 지정합니다.
+  **사용자 지정 데이터 유형** 

   (선택 사항) - 쉼표로 구분된 목록에 사용자 지정 데이터 유형을 입력합니다. 지원되는 데이터 유형은 “바이너리”, “부울”, “날짜”, “십진수”, “더블”, “플로트”, “정수”, “롱”, “쇼트”, “문자열”, “타임스탬프”입니다.
+  **CSV Serde** 

   (선택 사항) - 분류자에서 CSV를 처리하기 위한 Serde입니다. 이는 데이터 카탈로그에서 적용됩니다. `Open CSV SerDe`, `Lazy Simple SerDe` 또는 `None` 중에서 선택합니다. 크롤러에서 감지하려는 경우 `None` 값을 지정할 수 있습니다.

------

자세한 내용은 [다양한 데이터 형식에 대한 사용자 지정 분류자 작성](custom-classifier.md) 섹션을 참조하세요.

## 분류자 보기
<a name="view-classifiers-console"></a>

AWS Glue 콘솔을 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 열고 [**분류자(Classifiers)**] 탭을 선택하여 생성한 모든 분류자에 대한 목록을 봅니다.

분류자 목록은 각 분류자에 대한 다음 속성을 표시합니다.
+ **분류자** - 분류자 이름입니다. 분류자를 생성할 때는 분류자 이름을 제공해야 합니다.
+ [**분류(Classification)**] – 분류자가 유추한 테이블의 분류자 유형입니다.
+ [**마지막 업데이트(Last updated)** – 이 분류자가 업데이트된 마지막 시간입니다.

## 분류자 관리
<a name="manage-classifiers-console"></a>

AWS Glue 콘솔의 [**분류자(Classifiers)**] 목록에서 분류자를 추가, 편집 및 삭제할 수 있습니다. 목록에서 분류자 이름을 선택하여 분류자에 대한 더 자세한 정보를 알아봅니다. 세부 정보는 분류자를 생성할 때 정의한 정보를 포함합니다.

# 크롤러 구성
<a name="define-crawler"></a>

크롤러가 데이터 스토어로 액세스하고 메타데이터를 식별하며 AWS Glue Data Catalog의 테이블 정의를 생성합니다. AWS Glue 콘솔의 [**크롤러(Crawlers)**] 창에는 생성한 모든 크롤러가 나열됩니다. 목록은 크롤러 마지막 실행의 상태와 지표를 보여줍니다.

 이 항목에는 크롤러의 파라미터 설정, 크롤링할 데이터 소스 정의, 보안 설정, 크롤링된 데이터 관리와 같은 필수 요소를 다루는 크롤러 구성의 단계별 프로세스가 포함되어 있습니다.

**Topics**
+ [1단계: 크롤러 속성 설정](define-crawler-set-crawler-properties.md)
+ [2단계: 데이터 소스 및 분류자 선택](define-crawler-choose-data-sources.md)
+ [3단계: 보안 설정 구성](define-crawler-configure-security-settings.md)
+ [4단계: 출력 및 일정 설정](define-crawler-set-output-and-scheduling.md)
+ [5단계: 검토 및 생성](define-crawler-review.md)

# 1단계: 크롤러 속성 설정
<a name="define-crawler-set-crawler-properties"></a>

**크롤러를 구성하려면**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\)에서 AWS Glue 콘솔을 엽니다. 탐색 창에서 **크롤러**를 선택합니다.

1.  **크롤러 생성**을 선택하고 **크롤러 추가** 마법사의 지침을 따릅니다. 마법사는 크롤러 생성에 필요한 단계를 안내합니다. 사용자 지정 분류기를 추가하여 스키마를 정의하려면 [분류자 정의 및 관리](add-classifier.md) 섹션을 참조하세요.

1.  크롤러에 대한 이름과 설명(선택 사항)을 입력합니다. 선택에 따라 **태그 키** 와 선택 사항인 **태그 값**으로 크롤러에 태그를 지정할 수 있습니다. 생성된 태그 키는 읽기 전용입니다. 일부 리소스에서 태그를 이용하면 리소스를 정리하고 식별하는 데 도움이 됩니다. 자세한 내용은 AWS Glue의 AWS 태그를 참조하세요.  
**명칭**  
이름은 문자(A-Z), 숫자(0-9), 하이픈(-) 또는 밑줄(\$1) 포함할 수 있으며 최대 255자로 지정할 수 있습니다.  
**설명**  
설명은 최대 2048자까지 입력이 가능합니다.  
**Tags**  
태그를 사용하여 리소스를 정리하고 식별할 수 있습니다. 자세한 내용은 다음 자료를 참조하세요.  
   + [AWS Glue의 AWS 태그](monitor-tags.md)

# 2단계: 데이터 소스 및 분류자 선택
<a name="define-crawler-choose-data-sources"></a>

다음으로 크롤러의 데이터 소스 및 분류자를 구성합니다.

지원되는 데이터 소스에 대한 자세한 내용은 [크롤링에 지원되는 데이터 소스](crawler-data-stores.md) 섹션을 참조하세요.

**데이터 소스 구성**  
**데이터가 AWS Glue 테이블에 이미 매핑되어 있습니까?**에 적절한 옵션인 '아직' 또는 '예'를 선택하세요. 기본적으로 '아직'이 선택됩니다.  
크롤러는 크롤의 원본으로 데이터 스토어에 직접 액세스하거나 데이터 카탈로그의 기존 테이블을 원본으로 사용할 수 있습니다. 크롤러가 기존 카탈로그 테이블을 사용하면 해당 카탈로그 테이블에 지정된 데이터 스토어가 크롤됩니다.  
+ 아직 안 됨: 크롤링할 데이터 소스를 하나 이상 선택합니다. 크롤러는 서로 다른 유형(Amazon S3, JDBC 등)의 여러 데이터 스토어를 크롤할 수 있습니다.

  한 번에 하나의 데이터 스토어만 구성할 수 있습니다. 연결 정보를 제공하고 경로를 포함하고 패턴을 제외하면 다른 데이터 스토어를 추가할 수 있습니다.
+ 예: AWS Glue 데이터 카탈로그에서 기존 테이블을 선택합니다. 카탈로그 테이블은 크롤할 데이터 스토어를 지정합니다. 크롤러는 단일 실행으로 카탈로그 테이블만 크롤할 수 있습니다. 다른 원본 유형에서는 혼합할 수 없습니다.

  카탈로그 테이블을 원본으로 지정하는 일반적인 이유는 (데이터 스토어의 구조를 이미 알고 있었으므로) 테이블을 수동으로 생성했으며 크롤러가 새 파티션을 추가하는 등 테이블을 업데이트된 상태로 유지하기 때문입니다. 다른 이유에 대한 설명은 [크롤러를 사용하여 수동으로 생성된 Data Catalog 테이블 업데이트](tables-described.md#update-manual-tables) 단원을 참조하십시오.

  기존 테이블을 크롤러 원본 유형으로 지정하면 다음 조건이 적용됩니다.
  + 데이터베이스 이름은 선택 사항입니다.
  + Amazon S3 또는 Amazon DynamoDB 또는 Delta Lake 데이터 스토어를 지정하는 카탈로그 테이블만 허용됩니다.
  + 크롤러가 실행되면 새 카탈로그 테이블이 생성되지 않습니다. 기존 테이블은 새 파티션을 추가하는 등 필요에 따라 업데이트됩니다.
  + 데이터 스토어에서 찾은 삭제된 객체는 무시됩니다. 카탈로그 테이블은 삭제되지 않습니다. 대신 크롤러는 로그 메시지를 작성합니다. (`SchemaChangePolicy.DeleteBehavior=LOG`)
  + 각 Amazon S3 경로에 대해 단일 스키마를 생성하는 크롤러 구성 옵션은 기본적으로 사용되며 사용 중지할 수 없습니다. (`TableGroupingPolicy`=`CombineCompatibleSchemas`) 자세한 내용은 [각 Amazon S3 포함 경로에 대해 단일 스키마 생성](crawler-grouping-policy.md) 섹션을 참조하십시오.
  + 다른 원본 유형(예: Amazon S3 또는 Amazon DynamoDB)과 원본으로 카탈로그 테이블을 혼합할 수 없습니다.
  
 델타 테이블을 사용하려면 먼저 Athena DDL 또는 AWS Glue API를 사용하여 델타 테이블을 생성하세요.  
 Athena를 사용하여 위치를 Amazon S3 폴더로 설정하고 테이블 유형을 'DELTA'로 설정합니다.  

```
CREATE EXTERNAL TABLE database_name.table_name
LOCATION 's3://bucket/folder/'
TBLPROPERTIES ('table_type' = 'DELTA')
```
 AWS Glue API를 사용하여 테이블 매개변수 맵 내에 테이블 유형을 지정합니다. 테이블 매개변수에는 다음과 같은 키/값 쌍이 포함되어야 합니다. 테이블을 생성하는 방법에 대한 자세한 내용은 [create\$1table에 대한 Boto3 설명서](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue/client/create_table.html)를 참조하세요.  

```
{
    "table_type":"delta"
}
```

**데이터 소스**  
크롤러가 스캔할 데이터 소스 목록을 선택하거나 추가합니다.  
 (선택 사항) JDBC를 데이터 소스로 선택하면 드라이버 정보가 저장되는 연결 액세스를 지정할 때 자체 JDBC 드라이버를 사용할 수 있습니다.

**포함 경로**  
 크롤러에 무엇을 포함하거나 제외할 것인지 평가할 때 크롤러는 필요한 포함 경로를 평가하는 것으로 시작합니다. Amazon S3, MongoDB, MongoDB Atlas, Amazon DocumentDB(MongoDB 호환) 및 관계형 데이터 스토어의 경우 포함 경로를 지정해야 합니다.    
Amazon S3 데이터 스토어의 경우  
이 계정에서 경로를 지정할지 혹은 다른 계정에서 경로를 지정할지 선택한 다음 Amazon S3 경로 선택을 위해 찾아봅니다.  
Amazon S3 데이터 스토어의 경우 경로 포함 구문은 `bucket-name/folder-name/file-name.ext`입니다. 버킷에 있는 모든 객체를 크롤하려면 추가 경로에서 버킷 이름을 지정합니다. 제외 패턴은 포함 경로와 상대적입니다.  
Delta Lake 데이터 스토어의 경우  
s3://*bucket*/*prefix*/*object*와 같이 Delta 테이블에 대한 Amazon S3 경로를 하나 이상 지정합니다.  
Iceberg 또는 Hudi 데이터 스토어의 경우  
Iceberg 또는 Hudi 테이블 메타데이터가 포함된 폴더를 포함하는 Amazon S3 경로를 하나 이상 지정합니다(s3://*bucket*/*prefix* 형식).  
Iceberg 및 Hudi 데이터 스토어의 경우 Iceberg/Hudi 폴더는 루트 폴더의 하위 폴더에 있을 수 있습니다. 크롤러는 경로 아래에 있는 모든 폴더에서 Hudi 폴더를 스캔합니다.  
JDBC 데이터 스토어의 경우  
데이터베이스 제품에 따라 *<database>*/*<schema>*/*<table>* 또는 *<database>*/*<table>*을 입력합니다. Oracle Database 및 MySQL은 경로의 스키마를 지원하지 않습니다. *<schema>* 또는 *<table>* 대신에 백분율 문자(%)를 사용할 수 있습니다. 예를 들어 시스템 식별자(SID)가 `orcl`인 Oracle Database의 경우 `orcl/%`를 입력하여 연결에 이름이 지정된 사용자가 액세스할 수 있는 모든 테이블을 가져옵니다.  
이 필드는 대/소문자를 구분합니다.
 자체 JDBC 드라이버 버전을 가져오기로 선택한 경우 AWS Glue 크롤러는 AWS Glue작업 및 Amazon S3 버킷의 리소스를 소비하여 제공된 드라이버가 사용자 환경에서 실행되도록 합니다. 리소스의 추가 사용량은 계정에 반영됩니다. 드라이버는 [AWS Glue 연결 추가](https://docs.aws.amazon.com/glue/latest/dg/console-connections.html)에 설명된 속성으로 제한됩니다.  
MongoDB, MongoDB Atlas 또는 Amazon DocumentDB 데이터 스토어의 경우  
MongoDB, MongoDB Atlas 및 Amazon DocumentDB(MongoDB와 호환)의 경우 구문은 `database/collection`입니다.
JDBC 데이터 스토어의 구문은 `database-name/schema-name/table-name` 혹은 `database-name/table-name`입니다. 구문은 데이터베이스 엔진이 데이터베이스 내에서 스키마를 지원할지 여부에 따라 다릅니다. 예를 들어, MySQL 또는 Oracle과 같은 데이터베이스는 추가 경로에서 `schema-name`를 지정할 필요가 없습니다. 퍼센트 표시(`%`)를 추가 경로 내 스키마 또는 테이블로 바꿔 데이터베이스 내 모든 스키마 혹은 모든 테이블을 나타냅니다. 퍼센트 표시(`%`)를 추가 경로 내 데이터베이스로 바꿀 수 없습니다.

**최대 이동 깊이(Iceberg 또는 Hudi 데이터 스토어만 해당)**  
크롤러가 Amazon S3 경로에서 Iceberg 또는 Hudi 메타데이터 폴더를 검색하기 위해 이동할 수 있는 Amazon S3 경로의 최대 깊이를 정의합니다. 이 파라미터의 목적은 크롤러 실행 시간을 제한하는 것입니다. 기본값은 10이고, 최댓값은 20입니다.

**제외 패턴**  
이렇게 하면 크롤에서 특정 파일이나 테이블을 제외할 수 있습니다. 제외 경로는 포함 경로와 상대적입니다. 예를 들어 테이블에서 JDBC 데이트 스토어에서 테이블을 제외하기 위해서 테이블 이름을 제외 경로에 입력합니다.  
크롤러는 JDBC URI 연결 문자열을 포함한 AWS Glue를 사용하여 JDBC 데이터 스토어에 연결합니다. 크롤러는 AWS Glue 연결의 JDBC 사용자 이름 및 비밀번호를 사용하여 데이터베이스 엔진의 객체에 액세스만 합니다. *크롤러는 JDBC 연결을 통한 액세스할 수 있는 테이블을 생성만 합니다.* JDBC URI로 데이터베이스 엔진에 크롤러가 액세스한 후, 추가 경로는 데이터 카탈로그에 생성된 데이터베이스 엔진의 테이블을 결정하는데 사용됩니다. 예를 들어 MySQL의 경우, `MyDatabase/%`의 추가 경로를 지정하면 `MyDatabase` 내 모든 테이블은 데이터 카탈로그에 생성됩니다. Amazon Redshift에 액세스할 경우, `MyDatabase/%`의 추가 경로를 지정하면 데이터베이스 `MyDatabase`의 모든 스키마 내 모든 테이블은 데이터 카탈로그에 생성됩니다. `MyDatabase/MySchema/%`의 추가 경로를 지정하면 `MyDatabase` 데이터베이스의 모든 테이블과 `MySchema` 스키마가 생성됩니다.  
추가 경로를 지정한 후, 크롤러에서 객체를 제외합니다. 그렇지 않으면 추가 경로는 하나 이상의 Unix 스타일 `glob`이 패턴을 제외하는 것을 지정하여 객체를 추가합니다. 이런 패턴은 추가 경로에 적용되어 어떤 객체가 제외되어야 하는지 결정합니다. 또한 이런 패턴은 크롤러가 생성한 테이블의 속성으로 저장됩니다. AWS Glue `create_dynamic_frame.from_catalog` 등의 PySpark 확장은 테이블 속성을 읽고 제외 패턴이 정의한 객체를 제외합니다.  
AWS Glue는 제외 패턴에서 다음 `glob` 패턴을 지원합니다.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/define-crawler-choose-data-sources.html)
AWS Glue는 다음과 같이 `glob`가 패턴을 제외하도록 해석합니다.  
+ Amazon S3 키를 폴더 계층으로 구분하기 위해 슬래시(`/`) 문자가 사용됩니다.
+ 별표(`*`) 문자는 폴더의 경계를 넘지 않고 0개 이상의 이름 구성 요소 문자와 해당합니다.
+ 이중 별표(`**`) 문자는 폴더 또는 스키마의 경계를 넘지 않고 0개 이상의 이름 구성 요소 문자와 해당합니다.
+ 물음표(`?`) 문자는 이름 구성 요소의 정확히 1문자에 해당합니다.
+ 역 슬래시(`\`) 문자는 특수 문자로 해석될 수 있는 이스케이프 문자로 사용됩니다. 표현식 `\\`는 하나의 백 슬래시에 해당하고 `\{`는 왼쪽 중괄호에 해당합니다.
+ 대괄호(`[ ]`)는 문자 모음 중 한 문자의 이름 구성 요소에 해당하는 괄호 표현식을 생성합니다. 예를 들어, `[abc]`는 `a`, `b` 혹은 `c`에 해당합니다. 하이픈(`-`)은 범위를 지정하는 데 사용되기 때문에 `[a-z]`는 `a`에서 `z`까지의 범위를 지정합니다 (포괄적). 이런 형식은 혼합될 수 있어 [`abce-g`]는 `a`, `b`, `c`, `e`, `f`, 또는 `g`에 해당됩니다. 대괄호(`[`) 다음 문자가 느낌표(`!`)라면, 괄호 표현식이 취소됩니다. 예를 들어, `[!a-c]`는 `a`, `b` 또는 `c`를 제외한 모든 문자와 대응합니다.

  괄호 표현식 내에 `*`, `?` 및 `\`는 자체로 대응됩니다. 취소할 때 하이픈이 괄호 내 첫 번째 문자이거나 `!` 다음 첫 번째 문자이면 하이픈(`-`) 문자는 자체로 대응합니다.
+ 부 패턴이 그룹 내에서 대등하면 중괄호(`{ }`)는 그룹과 대응하는 부 패턴 그룹을 포함합니다. 쉼표(`,`) 문자는 부 패턴을 구분하는 기호입니다. 그룹은 중첩될 수 없습니다.
+ 파일명의 첫 번째 마침표 혹은 점은 매칭 작업에서 일반 문자로 취급합니다. 예를 들어 `*`가 파일명 `.hidden`에 해당하는 패턴을 제외합니다.

**Example Amazon S3 제외 패턴**  
각 제외 패턴은 추가 경로에 대응하여 평가됩니다. 예를 들어 다음과 같은 Amazon S3 디렉터리 구조가 있다고 가정하겠습니다.  

```
/mybucket/myfolder/
   departments/
      finance.json
      market-us.json
      market-emea.json
      market-ap.json
   employees/
      hr.json
      john.csv
      jane.csv
      juan.txt
```
추가 경로 `s3://mybucket/myfolder/`에 따르면 다음 예는 패턴을 제외한 결과입니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/define-crawler-choose-data-sources.html)

**Example Amazon S3 파티션의 하위 집합 제외**  
일별로 데이터가 분할되었다면 개별 Amazon S3 파티션에 1년의 각 일자가 존재합니다. 따라서 2015년 1월이면 31 파티션이 있습니다. 이제, 1월 첫째 주 데이터만 크롤하고자 한다면 1일부터 7일까지만 남겨놓고 모든 파티션을 제외합니다.  

```
 2015/01/{[!0],0[8-9]}**, 2015/0[2-9]/**, 2015/1[0-2]/**    
```
이 glob 형식을 살펴보겠습니다. 첫 번째 부분인 ` 2015/01/{[!0],0[8-9]}**`는 2015년 01월 중 08일과 09뿐만 아니라 0으로 시작하지 않는 모든 일자를 제외합니다. "\$1\$1"는 일수 형식의 접미사로 사용된다는 것을 기억하고 폴더 경계를 더 낮은 수준의 폴더로 지나갑니다. "\$1"가 사용되면 하위 폴더 수준은 제외되지 않습니다.  
두 번째 부분인 ` 2015/0[2-9]/**`는 2015년 중 02월에서 09월까지의 일자를 제외합니다.  
세 번째 부분인 `2015/1[0-2]/**`는 2015년 중 10월, 11월 및 12월의 일자를 제외합니다.

**Example JDBC 제외 패턴**  
다음과 같은 스키마 구조로 JDBC 데이터베이스를 크롤한다고 가정하겠습니다.  

```
MyDatabase/MySchema/
   HR_us
   HR_fr
   Employees_Table
   Finance
   Market_US_Table
   Market_EMEA_Table
   Market_AP_Table
```
추가 경로 `MyDatabase/MySchema/%`에 따르면 다음 예는 패턴을 제외한 결과입니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/define-crawler-choose-data-sources.html)

**추가 크롤러 소스 파라미터**  
소스 유형마다 다른 추가 파라미터 집합이 필요합니다.

**연결**  
AWS Glue 연결을 선택하거나 추가합니다. 연결에 관한 자세한 내용은 [데이터에 연결](glue-connections.md) 단원을 참조하십시오.

**추가 메타데이터 - 선택 사항(JDBC 데이터 스토어에만 해당)**  
크롤러가 크롤링할 추가 메타데이터 속성을 선택합니다.  
+ 댓글: 관련 테이블 수준 및 열 수준 설명을 크롤링합니다.
+ 원시 유형: 테이블 열의 원시 데이터 유형을 추가 메타데이터에 유지합니다. 기본 동작으로 크롤러는 원시 데이터 유형을 Hive 호환 유형으로 변환합니다.

**JDBC 드라이버 클래스 이름 - 선택 사항 (JDBC 데이터 스토어에만 해당)**  
 크롤러가 데이터 소스에 연결하는 데 사용할 사용자 지정 JDBC 드라이버 클래스 이름을 입력합니다.  
+ Postgres: org.postgresql.Driver
+ MySQL: com.mysql.jdbc.Driver, com.mysql.cj.jdbc.Driver
+ Redshift: com.amazon.redshift.jdbc.Driver, com.amazon.redshift.jdbc42.Driver
+ Oracle: oracle.jdbc.driver.OracleDriver
+ SQL Server: com.microsoft.sqlserver.jdbc.SQLServerDriver

**JDBC 드라이버 S3 경로 - 선택 사항(JDBC 데이터 스토어에만 해당)**  
`.jar` 파일에 대한 기존 Amazon S3 경로를 선택합니다. 크롤러를 데이터 소스에 연결할 때 사용자 지정 JDBC 드라이버를 사용하는 경우 `.jar` 파일이 여기에 저장됩니다.

**데이터 샘플링 사용(Amazon DynamoDB, MongoDB, MongoDB Atlas Amazon DocumentDB 데이터 스토어만 해당)**  
데이터 샘플만 크롤링할지 여부를 선택합니다. 선택하지 않으면 전체 테이블이 크롤링됩니다. 테이블이 높은 처리량 테이블이 아닌 경우 모든 레코드를 스캔하는 데 시간이 오래 걸릴 수 있습니다.

**쿼리를 위한 테이블 생성(Delta Lake 데이터 스토어에만 해당)**  
Delta Lake 테이블 생성 방법을 선택합니다.  
+ 기본 테이블 생성: Delta 트랜잭션 로그의 쿼리를 직접 지원하는 쿼리 엔진과 통합할 수 있습니다.
+ Symlink 테이블 생성: 지정된 구성 파라미터를 기반으로 파티션 키로 분할된 매니페스트 파일을 포함하는 symlink 매니페스트 폴더를 생성합니다.

**스캔 속도 - 선택 사항(DynamoDB 데이터 스토어에만 해당)**  
크롤러에서 사용할 DynamoDB 테이블 읽기 용량 단위의 비율을 지정합니다. 읽기 용량 단위는 DynamoDB에서 정의한 용어이며, 초당 해당 테이블에서 수행할 수 있는 읽기 수에 대한 속도 제한기 역할을 하는 숫자 값입니다. 0.1과 1.5 사이의 값을 입력합니다. 값을 지정하지 않으면 기본값은 프로비저닝된 테이블의 경우 0.5이고 온디맨드 테이블의 경우 구성된 최대 용량의 1/4입니다. 프로비저닝된 용량 모드만 AWS Glue 크롤러와 함께 사용해야 합니다.  
DynamoDB 데이터 스토어의 경우, 테이블의 읽기 및 쓰기 처리를 위한 프로비저닝된 용량 모드를 설정합니다. AWS Glue 크롤러는 온디맨드 용량 모드와 함께 사용하지 않아야 합니다.

**네트워크 연결 - 선택 사항(Amazon S3, Delta, Iceberg, Hudi 및 Catalog 대상 데이터 스토어의 경우)**  
필요에 따라 이 Amazon S3 대상과 함께 사용할 네트워크 연결을 포함합니다. 각 크롤러는 하나의 네트워크 연결로 제한되므로 다른 Amazon S3 대상도 동일한 연결을 사용하게 됩니다(비워 두면 연결 없음).  
연결에 관한 자세한 내용은 [데이터에 연결](glue-connections.md) 단원을 참조하십시오.

**파일의 하위 집합과 샘플 크기만 샘플링(Amazon S3 데이터 스토어에만 해당)**  
데이터 집합의 샘플 파일을 크롤링할 때 크롤링할 각 리프 폴더의 파일 수를 지정합니다. 이 기능이 설정되어 있으면 이 데이터 집합의 모든 파일을 크롤링하는 대신 크롤러가 크롤링할 각 리프 폴더의 일부 파일을 무작위로 선택합니다.  
샘플링 크롤러는 데이터 포맷에 대한 사전 지식이 있고 폴더의 스키마가 변경되지 않는다는 것을 알고 있는 고객에게 가장 적합합니다. 이 기능을 설정하면 크롤러 런타임이 크게 감소합니다.  
유효한 값은 1\$1249의 정수입니다. 지정하지 않으면 모든 파일이 크롤링됩니다.

**후속 크롤러 실행**  
이 필드는 모든 Amazon S3 데이터 소스에 영향을 주는 글로벌 필드입니다.  
+ 모든 하위 폴더 크롤링: 이후에 크롤링할 때마다 모든 폴더를 다시 크롤링합니다.
+ 새 하위 폴더만 크롤링: 마지막 크롤링된 이후에 추가된 Amazon S3 폴더만 크롤링됩니다. 스키마가 호환되는 경우 새 파티션이 기존 테이블에 추가됩니다. 자세한 내용은 [새 파티션을 추가하기 위한 증분 크롤링 예약](incremental-crawls.md) 섹션을 참조하세요.
+ 이벤트 기반 크롤링: Amazon S3 이벤트를 사용하여 크롤링할 폴더를 제어합니다. 자세한 내용은 [Amazon S3 이벤트 알림을 사용하여 크롤링 가속화](crawler-s3-event-notifications.md) 섹션을 참조하세요.

**사용자 지정 분류자 - 선택 사항**  
크롤러를 정의하기 전에 사용자 지정 분류자를 정의합니다. 분류자는 지정된 파일이 크롤러가 처리할 수 있는 형식인지 여부를 확인합니다. 처리할 수 있는 형식인 경우, 분류자는 해당 데이터 형식과 일치하는 `StructType` 객체의 형태로 스키마를 생성합니다.  
자세한 내용은 [분류자 정의 및 관리](add-classifier.md) 섹션을 참조하세요.

# 3단계: 보안 설정 구성
<a name="define-crawler-configure-security-settings"></a>

**IAM 역할**  
크롤러는 이 역할을 수임합니다. AWS 관리형 정책 `AWSGlueServiceRole`과 비슷한 권한이 있어야 합니다. Amazon S3 및 DynamoDB 소스의 경우 데이터 스토어에 액세스할 수 있는 권한도 있어야 합니다. 크롤러가 AWS Key Management Service(AWS KMS)로 암호화된 Amazon S3 데이터를 읽는 경우 역할에 AWS KMS 키에 대한 복호화 권한이 있어야 합니다.  
Amazon S3 데이터 스토어의 경우 역할에 연결된 추가 권한은 다음과 유사합니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::bucket/object*"
      ]
    }
  ]
}
```
Amazon DynamoDB 데이터 스토어의 경우 역할에 연결된 추가 권한은 다음과 유사합니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DescribeTable",
        "dynamodb:Scan"
      ],
      "Resource": [
        "arn:aws:dynamodb:*:111122223333:table/table-name*"
      ]
    }
  ]
}
```
 자체 JDBC 드라이버를 추가하려면 추가 권한을 추가해야 합니다.  
+  `CreateJob`, `DeleteJob`, `GetJob`, `GetJobRun`, `StartJobRun` 작업에 대한 권한을 부여합니다.
+  Amazon S3 작업, `s3:DeleteObjects`, `s3:GetObject`, `s3:ListBucket`, `s3:PutObject`에 대한 권한을 부여합니다.
**참고**  
Amazon S3 버킷 정책이 비활성화된 경우에는 `s3:ListBucket`이 필요하지 않습니다.
+  서비스 보안 주체에 Amazon S3 정책의 버킷 및 폴더에 대한 액세스 권한을 부여합니다.
 Amazon S3 정책 예제:     
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/driver-parent-folder/driver.jar",
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        }
    ]
}
```
 AWS Glue에서는 Amazon S3 버킷에서 JDBC 드라이버와 동일한 수준에 있는 `_crawler` 및 `_glue_job_crawler` 폴더를 생성합니다. 예를 들어 드라이버 경로가 `<s3-path/driver_folder/driver.jar>`인 경우 다음 폴더가 아직 없으면 폴더가 생성됩니다.  
+  <s3-path/driver\$1folder/\$1crawler> 
+  <s3-path/driver\$1folder/\$1glue\$1job\$1crawler> 
 선택적으로 크롤러에 보안 구성을 추가하여 저장 데이터 암호화 옵션을 지정할 수 있습니다.  
자세한 내용은 [2단계: AWS Glue에 대한 IAM 역할 생성](create-an-iam-role.md) 및 [AWS Glue의 Identity and Access Management](security-iam.md)(을)를 참조하세요.

**Lake Formation 구성 - 선택 사항**  
크롤러가 Lake Formation 보안 인증을 사용하여 데이터 소스를 크롤링하도록 허용합니다.  
**Use Lake Formation credentials for crawling S3 data source**(Lake Formation 보안 인증을 사용하여 S3 데이터 소스 크롤링)을 선택하면 크롤러가 Lake Formation 보안 인증을 사용하여 데이터 소스를 크롤링할 수 있습니다. 데이터 소스가 다른 계정에 속하는 경우 등록된 계정 ID를 제공해야 합니다. 그렇지 않으면 크롤러는 계정과 연결된 데이터 소스만 크롤링합니다. Amazon S3 및 데이터 카탈로그 데이터 소스에만 해당됩니다.

**보안 구성 - 선택 사항**  
설정에는 보안 구성이 포함됩니다. 자세한 내용은 다음을 참조하세요.  
+ [AWS Glue에서 작성한 데이터 암호화](encryption-security-configuration.md)
크롤러에 보안 구성이 설정된 후에는 이를 변경할 수는 있지만 제거할 수는 없습니다. 크롤러의 보안 수준을 낮추려면 구성 내에서 보안 기능을 `DISABLED`로 명시적으로 설정하거나 새 크롤러를 생성하세요.

# 4단계: 출력 및 일정 설정
<a name="define-crawler-set-output-and-scheduling"></a>

**출력 구성**  
옵션에는 크롤러가 감지된 스키마 변경 사항, 데이터 스토어에서 삭제된 객체 등을 처리하는 방법이 포함됩니다. 자세한 내용은 [크롤러 동작 사용자 지정](crawler-configuration.md) 섹션을 참조하세요.

**크롤러 예약**  
필요에 따라 크롤러를 실행하거나 AWS Glue에서 크롤러 및 작업을 위한 시간 기반 일정을 정의합니다. 일정 정의는 Unix식 cron 구문을 사용합니다. 자세한 내용은 [크롤러 일정 관리](schedule-crawler.md) 섹션을 참조하세요.

# 5단계: 검토 및 생성
<a name="define-crawler-review"></a>

구성한 크롤러 설정을 검토하고 크롤러를 생성합니다.

# 크롤러 일정 관리
<a name="schedule-crawler"></a>

요구에 따라 정기 일정에 따라 AWS Glue 크롤러를 실행합니다. 일정에 따라 크롤러를 설정할 경우 크롤러의 실행 빈도, 실행할 요일, 실행 시간과 같은 특정 제약 조건을 지정할 수 있습니다. 이러한 사용자 지정 일정을 *cron* 형식으로 생성할 수 있습니다. 자세한 내용은 Wikipedia의 [cron](http://en.wikipedia.org/wiki/Cron)을 참조하십시오.

크롤러 일정을 설정하고자 한다면 CRON의 기능 및 제약점을 고려해야 합니다. 예를 들어, 매월 31일에 크롤러를 실행하고자 한다면 매월 31일이 없다는 점을 유의하기 바랍니다.

**Topics**
+ [크롤러 일정 생성](create-crawler-schedule.md)
+ [기존 크롤러에 대한 일정 생성](Update-crawler-schedule.md)

# 크롤러 일정 생성
<a name="create-crawler-schedule"></a>

AWS Glue 콘솔 또는 AWS CLI를 사용하여 크롤러의 일정을 생성할 수 있습니다.

------
#### [ AWS Management Console ]

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

1. 탐색 창에서 **크롤러**를 선택합니다.

1. 아래 [크롤러 구성](define-crawler.md) 섹션의 1\$13 단계를 따릅니다.

1. [4단계: 출력 및 일정 설정](define-crawler-set-output-and-scheduling.md)에서 **크롤러 예약**을 선택하여 실행 빈도를 설정합니다. 크롤러를 시간별, 일별, 주별, 월별로 실행하도록 선택하거나 cron 표현식을 사용하여 사용자 지정 일정을 정의할 수 있습니다.

   cron 표현식은 일정 패턴을 나타내는 문자열로, \$1 \$1 \$1 <minute><hour><day of month><month><day of week><year>처럼 공백으로 구분된 6개 필드로 구성됩니다.

   예를 들어 매일 자정에 작업을 실행하는 경우 cron 표현식은 0 0 \$1 \$1? \$1입니다.

   자세한 내용은 [cron 표현식](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html#CronExpressions) 섹션을 참조하세요.

1. 구성한 크롤러 설정을 검토하고 일정에 따라 실행되는 크롤러를 생성합니다.

------
#### [ AWS CLI ]

```
aws glue create-crawler 
 --name myCrawler \
 --role AWSGlueServiceRole-myCrawler  \
 --targets '{"S3Targets":[{Path="s3://amzn-s3-demo-bucket/"}]}' \
 --schedule cron(15 12 * * ? *)
```

------

작업 및 크롤러의 일정을 관리하기 위해 cron을 사용하는 방법에 대한 자세한 내용은 [작업 및 크롤러를 위한 시간 기반 일정](monitor-data-warehouse-schedule.md) 섹션을 참조하세요.

# 기존 크롤러에 대한 일정 생성
<a name="Update-crawler-schedule"></a>

기존 크롤러에 대한 반복 일정을 설정하려면 다음 단계를 따릅니다.

------
#### [ AWS Management Console ]

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

1. 탐색 창에서 **크롤러**를 선택합니다.

1. 사용 가능 목록에서 예약하려는 크롤러를 선택합니다.

1. **실행 메뉴**에서 **편집**을 선택합니다.

1. **4단계: 출력 및 예약 설정**까지 아래로 스크롤한 다음 **편집**을 선택합니다.

1.  **크롤러 예약**에서 크롤러 일정을 업데이트합니다.

1. **업데이트**를 선택합니다.

------
#### [ AWS CLI ]

다음 CLI 명령을 사용하여 기존 크롤러 구성을 업데이트합니다.

```
aws glue update-crawler-schedule 
   --crawler-name myCrawler
   --schedule cron(15 12 * * ? *)
```

------

# 크롤러 결과 및 세부 정보 보기
<a name="console-crawlers-details"></a>

 크롤러가 성공적으로 실행되면 데이터 카탈로그에 테이블 정의가 생성됩니다. 탐색 창에서 [**테이블(Tables)**] 탭을 선택하여 지정한 데이터베이스의 크롤러가 생성한 테이블을 살펴봅니다.

 다음과 같이 크롤러 자체와 관련된 정보를 볼 수 있습니다.
+ AWS Glue 콘솔의 [**크롤러(Crawlers)**] 페이지에는 크롤러에 대한 다음 속성이 표시됩니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/console-crawlers-details.html)
+  크롤러의 기록을 보려면 탐색 창에서 **Crawlers**(크롤러)를 선택하여 생성한 크롤러를 확인합니다. 사용 가능한 크롤러 목록에서 크롤러를 선택합니다. **Crawler runs**(크롤러 실행) 탭에서 크롤러 속성과 크롤러 기록을 볼 수 있습니다.

   Crawler runs(크롤러 실행) 탭에는 **Start time (UTC)**(시작 시간(UTC)), **End time (UTC)**(종료 시간(UTC)), **Duration**(기간), **Status**(상태), **DPU hours**(DPU 시간) 및 **Table changes**(테이블 변경)를 비롯하여 크롤러가 실행된 각 시간에 대한 정보가 표시됩니다.

  크롤러 실행 탭은 크롤러 기록 기능의 시작 날짜 이후 발생한 크롤만 표시하고 최대 12개월의 크롤만 유지합니다. 이전의 크롤은 반환되지 않습니다.
+ 추가 정보를 보려면 크롤러 세부 정보 페이지에서 탭을 선택합니다. 각 탭에는 크롤러 관련 정보가 표시됩니다.
  +  **Schedule**(일정): 크롤러에 대해 생성된 모든 일정이 여기에 표시됩니다.
  +  **Data sources**(데이터 소스): 크롤러에서 스캔한 모든 데이터 소스가 여기에 표시됩니다.
  +  **Classifiers**(분류자): 크롤러에 할당된 모든 분류자가 여기에 표시됩니다.
  +  **Tags**(태그): 생성되고 AWS 리소스에 할당된 모든 태그가 여기에 표시됩니다.

# 크롤러가 데이터 카탈로그 테이블에 설정한 파라미터
<a name="table-properties-crawler"></a>

 이러한 테이블 속성은 AWS Glue 크롤러가 설정합니다. 사용자가`classification` 및 `compressionType` 속성을 소비할 것으로 기대합니다. 테이블 크기 추정치를 비롯한 기타 속성은 내부 계산에 사용되며, 당사는 이러한 속성의 정확성이나 고객 사용 사례에 대한 적용 가능성을 보장하지 않습니다. 이러한 파라미터를 변경하면 크롤러의 동작이 변경될 수 있지만 이 워크플로는 지원되지 않습니다.


| 속성 키 | 속성 값 | 
| --- | --- | 
| UPDATED\$1BY\$1CRAWLER | 업데이트를 수행하는 크롤러의 이름입니다. | 
| connectionName | 크롤러가 데이터 스토어에 연결하는 데 사용되는 데이터 카탈로그의 연결 이름입니다. | 
| recordCount | 파일 크기 및 헤더를 기반으로 테이블의 레코드 수를 추정합니다. | 
| skip.header.line.count | 헤더를 건너뛰기 위해 행을 건너뛰었습니다. CSV로 분류된 테이블에 설정합니다. | 
| CrawlerSchemaSerializerVersion | 내부용 | 
| classification | 크롤러에서 추론한 데이터 형식입니다. AWS Glue에 의해 지원되는 형식에 대한 자세한 내용은 [기본 제공 분류자](add-classifier.md#classifier-built-in) 단원을 참조하세요. | 
| CrawlerSchemaDeserializerVersion | 내부용 | 
| sizeKey | 테이블의 파일 크기를 합산하여 크롤링했습니다. | 
| averageRecordSize | 테이블 열의 평균 크기(바이트). | 
| compressionType | 테이블의 데이터에 사용되는 압축 유형입니다. AWS Glue 크롤러가 지원하는 압축 유형에 대한 자세한 내용은 [기본 제공 분류자](add-classifier.md#classifier-built-in)을 참조하세요. | 
| typeOfData | `file`, `table`, 또는 `view`. | 
| objectCount | 테이블의 Amazon S3 경로 아래에 있는 객체 수입니다. | 

 이러한 추가 테이블 속성은 Snowflake 데이터 스토어의 AWS Glue 크롤러에 의해 설정됩니다.


| 속성 키 | 속성 값 | 
| --- | --- | 
| aws:RawTableLastAltered | Snowflake 테이블의 마지막으로 변경된 타임스탬프를 기록합니다. | 
| ViewOriginalText | SQL 문을 봅니다. | 
| ViewExpandedText | Base64 형식으로 인코딩된 SQL 문을 볼 수 있습니다. | 
| ExternalTable:S3Location | Snowflake 외부 테이블의 Amazon S3 위치입니다. | 
| ExternalTable:FileFormat | Snowflake 외부 테이블의 Amazon S3 파일 형식입니다. | 

 이러한 추가 테이블 속성은 Amazon Redshift, Microsoft SQL Server, MySQL, PostgreSQL 및 Oracle과 같은 JDBC 유형 데이터 스토어의 AWS Glue 크롤러에 의해 설정됩니다.


| 속성 키 | 속성 값 | 
| --- | --- | 
| aws:RawType | 크롤러가 데이터 카탈로그에 데이터를 저장하면 데이터 유형이 Hive 호환 유형으로 변환되므로 기본 데이터 유형에 대한 정보가 손실되는 경우가 많습니다. 크롤러는 `aws:RawType` 파라미터를 출력하여 기본 수준 데이터 유형을 제공합니다. | 
| aws:RawColumnComment | 설명이 데이터베이스의 열과 연결되는 경우 크롤러는 카탈로그 테이블에 해당 설명을 출력합니다. 주석 문자열은 255바이트로 잘립니다. Microsoft SQL Server에서는 설명이 지원되지 않습니다.  | 
| aws:RawTableComment | 설명이 데이터베이스의 테이블과 연결되는 경우 크롤러는 카탈로그 테이블에 해당 설명을 출력합니다. 설명 문자열은 255바이트로 잘립니다. Microsoft SQL Server에서는 설명이 지원되지 않습니다. | 

# 크롤러 동작 사용자 지정
<a name="crawler-configuration"></a>

AWS Glue 크롤러을 구성하면 크롤러의 행태를 정의할 수 있는 몇 가지 옵션이 있습니다.
+ **증분 크롤링** - 테이블 스키마에 새 파티션만 추가하도록 증분 크롤링을 실행하는 크롤러를 구성할 수 있습니다.
+ **파티션 인덱스** - 크롤러는 기본적으로 Amazon S3 및 Delta Lake 대상에 대한 파티션 인덱스를 생성하여 특정 파티션을 효율적으로 조회합니다.
+ **Amazon S3 이벤트를 사용하여 크롤링 가속 **- 전체 Amazon S3 또는 데이터 카탈로그 대상을 나열하는 대신 이벤트를 트리거한 하위 폴더의 모든 파일을 나열하여 두 크롤링 간의 변경 사항을 식별하기 위해 Amazon S3 이벤트를 사용하도록 크롤러를 구성할 수 있습니다.
+ **스키마 변경 처리** - 크롤러가 기존 스키마에 스키마를 변경하지 못하게 할 수 있습니다. AWS Management Console 또는 AWS Glue API를 사용하여 크롤러가 특정 변화에 따라 어떤 절차를 밟는지 알아봅니다.
+ **여러 Amazon S3 경로에 대한 단일 스키마** - 데이터가 호환되는 경우 각 S3 경로에 대해 단일 스키마를 생성하도록 크롤러를 구성할 수 있습니다.
+ **테이블 위치 및 파티셔닝 수준** - 테이블 수준 크롤러 옵션을 사용하면 크롤러에 테이블의 위치와 파티션 생성 방법을 유연하게 알릴 수 있습니다.
+ **테이블 임계값** - 테이블 임계값을 지정하여 크롤러가 생성할 수 있는 최대 테이블 수를 지정할 수 있습니다.
+ **AWS Lake Formation 자격 증명** - Lake Formation 자격 증명을 사용하여 동일한 AWS 계정 또는 다른 AWS 계정 내의 기본 Amazon S3 위치가 있는 데이터 카탈로그 테이블이나 Amazon S3 데이터 스토어에 액세스하도록 크롤러를 구성할 수 있습니다.

 AWS Glue 콘솔을 사용하여 크롤러를 추가하는 방법에 대한 자세한 내용은 [크롤러 구성](define-crawler.md) 단원을 참조하십시오.

**Topics**
+ [새 파티션을 추가하기 위한 증분 크롤링 예약](incremental-crawls.md)
+ [파티션 인덱스 생성](crawler-configure-partition-indexes.md)
+ [크롤러가 기존 스키마를 변경하지 않도록 방지](crawler-schema-changes-prevent.md)
+ [각 Amazon S3 포함 경로에 대해 단일 스키마 생성](crawler-grouping-policy.md)
+ [테이블 위치와 파티션 수준 지정](crawler-table-level.md)
+ [크롤러가 생성할 수 있는 최대 테이블 수 지정](crawler-maximum-number-of-tables.md)
+ [Lake Formation 자격 증명을 사용하도록 크롤러 구성](crawler-lf-integ.md)
+ [Amazon S3 이벤트 알림을 사용하여 크롤링 가속화](crawler-s3-event-notifications.md)

# 새 파티션을 추가하기 위한 증분 크롤링 예약
<a name="incremental-crawls"></a>

테이블 스키마에 새 파티션만 추가하도록 증분 크롤링 AWS Glue 크롤러 실행을 구성할 수 있습니다. 크롤러가 처음 실행되면 전체 데이터 소스를 처리에 전체 크롤링을 수행하여 전체 스키마와 모든 기존 파티션을 AWS Glue Data Catalog에 기록합니다.

초기 전체 크롤링 이후의 후속 크롤링은 증분 방식으로 진행되며, 이때 크롤러는 이전 크롤링 이후에 새롭게 추가된 파티션만 식별하여 추가합니다. 이 접근 방식을 사용하면 크롤러가 더 이상 각 실행에 대해 전체 데이터 소스를 처리할 필요가 없고 대신 새 파티션에만 집중하므로 크롤링 시간이 단축됩니다.

**참고**  
증분 크롤링에서는 기존 파티션의 수정 또는 삭제를 감지하지 않습니다. 이 구성은 안정적인 스키마를 사용하는 데이터 소스에 가장 적합합니다. 한 번의 주요 스키마 변경이 발생한 경우 새 스키마를 정확하게 캡처하기 위해 전체 크롤링을 수행하도록 크롤러를 일시적으로 설정한 다음 증분 크롤링 모드로 다시 전환하는 것이 좋습니다.

다음 다이어그램은 증분 크롤링 설정을 사용하도록 설정한 경우 크롤러가 새로 추가된 Month=March 폴더만 탐지하여 카탈로그에 추가한다는 것을 보여줍니다.

![\[다음 다이어그램은 3월의 파일이 추가되었음을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/crawlers-s3-folders-new.png)


다음 단계에 따라 크롤러가 증분 크롤링을 수행하도록 업데이트하세요.

------
#### [ AWS Management Console ]

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

1. **데이터 카탈로그**에서 **크롤러**를 선택합니다.

1. 증분 크롤링 설정을 원하는 크롤러를 선택합니다.

1. **편집**을 선택합니다.

1. **2단계를 선택합니다. 데이터 소스 및 분류자를 선택합니다**.

1. 증분 크롤링 하려는 데이터 소스를 선택합니다.

1. **편집**을 선택합니다.

1. **후속 크롤러 실행**에서 **새 하위 폴더만 크롤링**을 선택합니다.

1. **업데이트**를 선택합니다.

크롤러 일정을 만들려면 [크롤러 일정 관리](schedule-crawler.md) 섹션을 참조하세요.

------
#### [ AWS CLI ]

```
aws glue update-crawler \
 --name myCrawler \
 --recrawl-policy RecrawlBehavior=CRAWL_NEW_FOLDERS_ONLY \
 --schema-change-policy UpdateBehavior=LOG,DeleteBehavior=LOG
```

------

**규칙 및 제한**  
이 옵션이 설정되어 있으면 크롤러를 편집할 때 Amazon S3 대상 데이터 스토어를 변경할 수 없습니다. 이 옵션은 특정 크롤러 구성 설정에 영향을 줍니다. 설정하면 크롤러의 업데이트 동작 및 삭제 동작이 `LOG`에 기록됩니다. 이는 다음을 의미합니다.
+ 스키마가 호환되지 않는 객체를 발견하면 크롤러는 데이터 카탈로그에 객체를 추가하지 않고 이 세부 정보를 CloudWatch Logs에 로그로 추가합니다.
+ 데이터 카탈로그의 삭제된 개체는 업데이트되지 않습니다.

# 파티션 인덱스 생성
<a name="crawler-configure-partition-indexes"></a>

데이터 카탈로그는 특정 파티션을 효율적으로 조회할 수 있도록 파티션 인덱스 생성을 지원합니다. 자세한 내용은 [파티션 인덱스 생성](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html)을 참조하세요. AWS Glue 크롤러는 기본적으로 Amazon S3 및 Delta Lake 대상에 대한 파티션 인덱스를 생성합니다.

------
#### [ AWS Management Console ]

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

1. **데이터 카탈로그**에서 **크롤러**를 선택합니다.

1. 크롤러를 정의하면 **자동으로 파티션 인덱스 생성** 옵션이 **출력 및 예약 설정** 페이지의 **고급 옵션** 아래에서 기본적으로 활성화됩니다.

   이 옵션을 비활성화하려면 콘솔에서 **파티션 인덱스 자동 생성** 확인란의 선택을 취소하면 됩니다.

1. 크롤러 구성을 완료하고 **크롤러 생성**을 선택합니다.

------
#### [ AWS CLI ]

 AWS CLI를 사용하여 `configuration` 파라미터에서 `CreatePartitionIndex `를 설정하여 이 옵션을 비활성화할 수도 있습니다. 기본값은 true입니다.

```
aws glue update-crawler \
    --name myCrawler \
    --configuration '{"Version": 1.0, "CreatePartitionIndex": false }'
```

------

## 파티션 인덱스에 대한 사용 참고 사항
<a name="crawler-configure-partition-indexes-usage-notes"></a>
+ 크롤러에서 생성한 테이블에는 기본적으로 `partition_filtering.enabled` 변수가 없습니다. 자세한 내용은 [AWS Glue 파티션 인덱싱 및 필터링](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index)을 참조하세요.
+ 암호화된 파티션에 대한 파티션 인덱스 생성은 지원되지 않습니다.

# 크롤러가 기존 스키마를 변경하지 않도록 방지
<a name="crawler-schema-changes-prevent"></a>

 AWS Glue 크롤러가 실행될 때 데이터 카탈로그에서 스키마를 변경하지 않도록 할 수 있습니다. 기본적으로 크롤러는 크롤링되는 데이터 소스와 일치하도록 데이터 카탈로그의 스키마를 업데이트합니다. 하지만 경우에 따라 크롤러가 기존 스키마를 수정하지 않도록 하는 것이 좋습니다. 특히 데이터를 변환하거나 정리한 후 원래 스키마가 변경 내용을 덮어쓰지 않도록 하려는 경우에는 더욱 그렇습니다.

 테이블 정의의 기존 스키마를 덮어쓰지 않도록 크롤러를 구성하려면 다음 단계를 따릅니다.

------
#### [  AWS Management Console  ]

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

1. **데이터 카탈로그**에서 **크롤러**를 선택합니다.

1. 목록에서 크롤러를 선택하고 **편집**을 선택합니다.

1. **4단계, 출력 및 예약 설정**을 선택합니다.

1. **고급 옵션**에서 **새 열만 추가** 또는 **변경 내용 무시를 선택하고 데이터 카탈로그의 테이블을 업데이트하지 않음**을 선택합니다.

1.  또한 구성 옵션을 **테이블의 메타데이터로 모든 신규 및 기존 파티션 업데이트**로 설정할 수 있습니다. 이렇게 하면 파티션 스키마가 테이블에서 상속되도록 설정됩니다.

1. **업데이트**를 선택합니다.

------
#### [ AWS CLI ]

다음 예제는 기존 스키마를 변경하지 않고 새 열만 추가하도록 크롤러를 구성하는 방법을 보여줍니다.

```
aws glue update-crawler \
  --name myCrawler \
  --configuration '{"Version": 1.0, "CrawlerOutput": {"Tables": {"AddOrUpdateBehavior": "MergeNewColumns"}}}'
```

다음 예제는 기존 스키마를 변경하지 않고 새 열을 추가하지 않도록 크롤러를 구성하는 방법을 보여줍니다.

```
aws glue update-crawler \
  --name myCrawler \
  --schema-change-policy UpdateBehavior=LOG \
  --configuration '{"Version": 1.0, "CrawlerOutput": {"Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }}}'
```

------
#### [ API ]

크롤러가 실행될 때 테이블 스키마가 전혀 변하지 않도록 하려면 `LOG`에 스키마 변경 정책을 설정합니다.

API를 사용하여 크롤러를 구성하면 다음 파라미터를 설정합니다.
+ `SchemaChangePolicy` 구조의 `UpdateBehavior` 필드를 `LOG`로 설정합니다.
+  예를 들어, 크롤러 API의 다음 JSON 객체를 나타내는 문자열로 `Configuration` 필드를 설정합니다.

  ```
  {
     "Version": 1.0,
     "CrawlerOutput": {
        "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }
     }
  }
  ```

------

# 각 Amazon S3 포함 경로에 대해 단일 스키마 생성
<a name="crawler-grouping-policy"></a>

기본적으로 크롤러가 Amazon S3에 저장된 데이터용 테이블을 정의하면 데이터 호환성과 스키마 유사성을 모두 고려합니다. 고려되는 데이터 호환성 요인에는 데이터가 동일 포맷(예: JSON), 동일 압축 포맷(예: GZIP), Amazon S3 경로의 구조 및 기타 데이터 속성인지 여부가 포함됩니다. 스키마 유사성은 개별 Amazon S3 객체의 스키마가 얼마나 근접하게 유사한지를 측정합니다.

이 옵션의 이해를 돕기 위해 포함 경로가 `s3://amzn-s3-demo-bucket/table1/`인 크롤러를 정의한다고 가정해 보겠습니다. 이 크롤러는 실행 시 다음과 같은 특성을 가진 JSON 파일 두 개를 찾습니다.
+ **파일 1** – `S3://amzn-s3-demo-bucket/table1/year=2017/data1.json`
+ *파일 내용* – `{“A”: 1, “B”: 2}`
+ *스키마* – `A:int, B:int`
+ **파일 2** – `S3://amzn-s3-demo-bucket/table1/year=2018/data2.json`
+ *파일 내용* – `{“C”: 3, “D”: 4}`
+ *스키마* – `C: int, D: int`

스키마가 충분히 비슷하지 않으므로 기본적으로 크롤러가 `year_2017` 및 `year_2018`이라는 두 테이블을 생성합니다. 하지만 **Create a single schema for each S3 path(각 S3 경로에 대해 단일 스키마 생성)** 옵션을 선택했으며 데이터가 호환되는 경우, 크롤러가 한 개 테이블을 생성합니다. 이 테이블에는 `A:int,B:int,C:int,D:int` 및 `partitionKey` `year:string`이라는 스키마가 있습니다.

------
#### [ AWS Management Console ]

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

1. **데이터 카탈로그**에서 **크롤러**를 선택합니다.

1. 새 크롤러를 구성하는 경우 **출력 및 예약**의 고급 옵션에서 **각 S3 경로에 대해 단일 스키마 생성** 옵션을 선택합니다.

------
#### [ AWS CLI ]

가능하면 공통 테이블 정의에 호환 스키마를 결합(`CombineCompatibleSchemas`)하도록 크롤러를 구성할 수 있습니다. 이 옵션을 사용하는 경우 크롤러가 데이터 호환성을 고려하지만, 지정된 포함 경로에서 Amazon S3 객체를 평가할 때 특정 스키마의 유사성을 무시합니다.

AWS CLI를 사용하여 크롤러를 구성할 때는 다음 구성 옵션을 설정합니다.

```
aws glue update-crawler \
   --name myCrawler \
   --configuration '{"Version": 1.0, "Grouping": {"TableGroupingPolicy": "CombineCompatibleSchemas" }}'
```

------
#### [ API ]

API를 사용하여 크롤러를 구성할 때는 다음 구성 옵션을 설정합니다.

 예를 들어, 크롤러 API의 다음 JSON 객체를 나타내는 문자열로 `Configuration` 필드를 설정합니다.

```
{
   "Version": 1.0,
   "Grouping": {
      "TableGroupingPolicy": "CombineCompatibleSchemas" }
}
```

------

# 테이블 위치와 파티션 수준 지정
<a name="crawler-table-level"></a>

기본적으로 크롤러가 Amazon S3에 저장된 데이터에 대한 테이블을 정의할 때 크롤러는 스키마를 병합하고 최상위 테이블(`year=2019`)을 생성하려고 시도합니다. 경우에 따라 크롤러가 폴더 `month=Jan`에 대한 테이블을 생성할 것으로 예상할 수 있지만 대신 형제 폴더(`month=Mar`)가 동일한 테이블에 병합되었기 때문에 크롤러가 파티션을 생성합니다.

테이블 수준 크롤러 옵션을 사용하면 크롤러에 테이블의 위치와 파티션 생성 방법을 유연하게 알릴 수 있습니다. [**테이블 수준(Table level)**]을 지정하면 Amazon S3 버킷에서 해당 절대 수준으로 테이블이 생성됩니다.

![\[수준 2로 지정된 테이블 수준의 크롤러 그룹화\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/crawler-table-level1.jpg)


 콘솔에서 크롤러를 구성할 때 [**테이블 수준(Table level)**] 크롤러 옵션에 대한 값을 지정할 수 있습니다. 값은 테이블 위치(데이터 집합의 절대 수준)를 나타내는 양의 정수여야 합니다. 최상위 폴더의 수준은 1입니다. 예를 들어 경로 `mydataset/year/month/day/hour`의 경우 수준을 3으로 설정하면 `mydataset/year/month` 위치에 테이블이 생성됩니다.

------
#### [ AWS Management Console ]

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

1. **데이터 카탈로그**에서 **크롤러**를 선택합니다.

1. 크롤러를 구성할 때 **출력 및 예약 설정**의 **고급 옵션**에서 **테이블 수준**을 선택합니다.

![\[크롤러 구성에서 테이블 수준 지정\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/crawler-configuration-console.png)


------
#### [ AWS CLI ]

AWS CLI를 사용하여 크롤러를 구성하는 경우 예제 코드에 표시된 대로 `configuration` 파라미터를 설정합니다.

```
aws glue update-crawler \
  --name myCrawler \
  --configuration '{"Version": 1.0, "Grouping": { "TableLevelConfiguration": 2 }}'
```

------
#### [ API ]

API를 사용하여 크롤러를 구성하는 경우 다음 JSON 객체의 문자열 표현으로 `Configuration` 필드를 설정합니다. 예를 들면 다음과 같습니다.

```
configuration = jsonencode(
{
   "Version": 1.0,
   "Grouping": {
            TableLevelConfiguration = 2  
        }
})
```

------
#### [ CloudFormation ]

이 예제에서는 콘솔에서 사용 가능한 **테이블 레벨(Table level)** 옵션을 CloudFormation 템플릿 내에서 설정합니다.

```
"Configuration": "{
    \"Version\":1.0,
    \"Grouping\":{\"TableLevelConfiguration\":2}
}"
```

------

# 크롤러가 생성할 수 있는 최대 테이블 수 지정
<a name="crawler-maximum-number-of-tables"></a>

선택적으로 AWS Glue 콘솔 또는 AWS CLI를 통해 `TableThreshold`를 지정하여 크롤러가 생성할 수 있는 최대 테이블 수를 지정할 수 있습니다. 크롤링 중 크롤러가 탐지한 테이블이 이 입력 값보다 크면 크롤링이 실패하고 데이터 카탈로그에 데이터가 기록되지 않습니다.

이 파라미터는 크롤러에 의해 탐지되고 생성되는 테이블이 예상보다 훨씬 큰 경우에 유용합니다. 다음과 같은 여러 가지 이유가 있을 수 있습니다.
+ AWS Glue 작업을 사용하여 Amazon S3 위치를 채우면 폴더와 같은 수준에 빈 파일이 생길 수 있습니다. 이러한 경우 이 Amazon S3 위치에서 크롤러를 실행하면 파일 및 폴더가 동일한 수준에 있기 때문에 크롤러가 여러 테이블을 생성합니다.
+ `"TableGroupingPolicy": "CombineCompatibleSchemas"`를 설정하지 않으면 예상보다 많은 테이블이 생성될 수 있습니다.

`TableThreshold`를 0보다 큰 정수 값으로 지정합니다. 이 값은 크롤러별로 구성됩니다. 즉, 모든 크롤링에 대해 이 값이 고려됩니다. 예: 크롤러의 `TableThreshold` 값이 5로 설정되어 있습니다. 각 크롤링에서 AWS Glue는 탐지된 테이블 수를 이 테이블 임곗값(5)과 비교하여 탐지된 테이블 수가 5보다 작으면 테이블을 데이터 카탈로그에 쓰고 AWS Glue 그렇지 않으면 데이터 카탈로그에 쓰지 않고 크롤링에 실패합니다.

------
#### [ AWS Management Console ]

**AWS Management Console을 사용하여 `TableThreshold`를 설정하려면:**

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

1. 크롤러를 구성할 때 **출력 및 예약**에서 **최대 테이블 임계값**을 크롤러가 생성할 수 있는 테이블 수로 설정합니다.  
![\[Maximum table threshold(최대 테이블 임곗값) 파라미터가 표시된 AWS 콘솔의 Set output and scheduling(출력 및 예약 설정) 섹션.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/crawler-max-tables.png)

------
#### [ AWS CLI ]

AWS CLI를 사용하여 `TableThreshold`를 설정하려면:

```
aws glue update-crawler \
    --name myCrawler \
    --configuration '{"Version": 1.0, "CrawlerOutput": {"Tables": { "TableThreshold": 5 }}}'
```

------
#### [ API ]

API를 사용하여 `TableThreshold`를 설정하려면:

```
"{"Version":1.0,
"CrawlerOutput":
{"Tables":{"AddOrUpdateBehavior":"MergeNewColumns",
"TableThreshold":5}}}";
```

------

테이블 경로를 식별하고 데이터를 정리하는 데 도움이 되도록 오류 메시지가 기록됩니다. 다음은 테이블 수가 제공된 테이블 임곗값보다 커서 크롤러가 실패한 경우 계정의 예제 로그입니다.

```
Table Threshold value = 28, Tables detected - 29
```

CloudWatch에서는 탐지된 모든 테이블 위치를 INFO 메시지로 기록합니다. 오류가 실패 원인으로 기록됩니다.

```
ERROR com.amazonaws.services.glue.customerLogs.CustomerLogService - CustomerLogService received CustomerFacingException with message 
The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. Failing crawler without writing to Data Catalog.
com.amazonaws.services.glue.exceptions.CustomerFacingInternalException: The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. 
Failing crawler without writing to Data Catalog.
```

# Lake Formation 자격 증명을 사용하도록 크롤러 구성
<a name="crawler-lf-integ"></a>

AWS Lake Formation 자격 증명을 사용하여 동일한 AWS 계정 또는 다른 AWS 계정 내의 기본 Amazon S3 위치가 있는 데이터 카탈로그 테이블 또는 Amazon S3 데이터 스토어에 액세스하도록 크롤러를 구성할 수 있습니다. 크롤러와 데이터 카탈로그 테이블이 동일한 계정에 있는 경우 기존 데이터 카탈로그 테이블을 크롤러의 대상으로 구성할 수 있습니다. 현재 데이터 카탈로그 테이블을 크롤러의 대상으로 사용할 때 단일 카탈로그 테이블이 있는 단일 카탈로그 대상만 허용됩니다.

**참고**  
데이터 카탈로그 테이블을 크롤러 대상으로 정의할 때 데이터 카탈로그 테이블의 기본 위치가 Amazon S3 위치인지 확인합니다. Lake Formation 자격 증명을 사용하는 크롤러는 기본 Amazon S3 위치가 있는 데이터 카탈로그 대상만 지원합니다.

## 크롤러와 등록된 Amazon S3 위치 또는 데이터 카탈로그 테이블이 동일한 계정에 있는 경우 필요한 설정(계정 내 크롤링)
<a name="in-account-crawling"></a>

크롤러가 Lake Formation 자격 증명을 사용하여 데이터 스토어 또는 데이터 카탈로그 테이블에 액세스할 수 있도록 하려면 Lake Formation에 데이터 위치를 등록해야 합니다. 또한 크롤러의 IAM 역할에는 Amazon S3 버킷이 등록된 대상에서 데이터를 읽을 수 있는 권한이 있어야 합니다.

AWS Management Console 또는 AWS Command Line Interface(AWS CLI)를 사용하여 다음 구성 단계를 완료할 수 있습니다.

------
#### [ AWS Management Console ]

1. 크롤러 소스에 액세스하도록 크롤러를 구성하기 전에 데이터 스토어 또는 데이터 카탈로그의 데이터 위치를 Lake Formation에 등록합니다. Lake Formation 콘솔([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))에서 크롤러가 정의된 AWS 계정에서 Amazon S3 위치를 데이터 레이크의 루트 위치로 등록합니다. 자세한 내용을 알아보려면 [Registering an Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html)(Amazon S3 위치 등록)을 참조하세요.

1. 크롤러가 Lake Formation의 대상에서 데이터를 읽을 수 있도록 크롤러 실행에 사용되는 IAM 역할에 **Data location**(데이터 위치) 권한을 부여합니다. 자세한 내용을 알아보려면 [Granting data location permissions (same account)](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html)(데이터 위치 권한 부여(동일한 계정))를 참조하세요.

1. 출력 데이터베이스로 지정된 데이터베이스에 크롤러 역할 액세스 권한(`Create` )을 부여합니다. 자세한 내용을 알아보려면 [Granting database permissions using the Lake Formation console and the named resource method](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-database-permissions.html)(Lake Formation 콘솔 및 명명된 리소스 메서드를 사용하여 데이터베이스 권한 부여)를 참조하세요.

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))에서 크롤러에 대한 IAM 역할을 생성합니다. 역할에 `lakeformation:GetDataAccess` 정책을 추가합니다.

1. AWS Glue 콘솔([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/))에서 크롤러를 구성하는 동안 **Use Lake Formation credentials for crawling Amazon S3 data source**(Amazon S3 데이터 소스 크롤링에 Lake Formation 자격 증명 사용) 옵션을 선택합니다.
**참고**  
accountId 필드는 계정 내 크롤링의 선택 사항입니다.

------
#### [ AWS CLI ]

```
aws glue --profile demo create-crawler --debug --cli-input-json '{
    "Name": "prod-test-crawler",
    "Role": "arn:aws:iam::111122223333:role/service-role/AWSGlueServiceRole-prod-test-run-role",
    "DatabaseName": "prod-run-db",
    "Description": "",
    "Targets": {
    "S3Targets":[
                {
                 "Path": "s3://amzn-s3-demo-bucket"
                }
                ]
                },
   "SchemaChangePolicy": {
      "UpdateBehavior": "LOG",
      "DeleteBehavior": "LOG"
  },
  "RecrawlPolicy": {
    "RecrawlBehavior": "CRAWL_EVERYTHING"
  },
  "LineageConfiguration": {
    "CrawlerLineageSettings": "DISABLE"
  },
  "LakeFormationConfiguration": {
    "UseLakeFormationCredentials": true,
    "AccountId": "111122223333"
  },
  "Configuration": {
           "Version": 1.0,
           "CrawlerOutput": {
             "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" },
             "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" }
           },
           "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" }
         },
  "CrawlerSecurityConfiguration": "",
  "Tags": {
    "KeyName": ""
  }
}'
```

------

# 크롤러와 등록된 Amazon S3 위치가 다른 계정에 있는 경우 필요한 설정(크로스 계정 크롤링)
<a name="cross-account-crawling"></a>

크롤러가 Lake Formation 자격 증명을 사용하여 다른 계정의 데이터 스토어에 액세스할 수 있도록 하려면 먼저 Lake Formation에 Amazon S3 데이터 위치를 등록해야 합니다. 그리고 다음 단계에 따라 크롤러의 계정에 데이터 위치 권한을 부여합니다.

AWS Management Console 또는 AWS CLI를 사용하여 다음 단계를 완료할 수 있습니다.

------
#### [ AWS Management Console ]

1. Amazon S3 위치가 등록된 계정(계정 B)에서

   1. Lake Formation에 Amazon S3 경로를 등록합니다. 자세한 내용을 알아보려면 [Registering an Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html)(Amazon S3 위치 등록)을 참조하세요.

   1.  크롤러가 실행될 계정(계정 A)에 **Data location**(데이터 위치) 권한을 부여합니다. 자세한 내용을 알아보려면 [Granting data location permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html)(데이터 위치 권한 부여)를 참조하세요.

   1. 기본 위치를 대상 Amazon S3 위치로 사용하여 Lake Formation에 빈 데이터베이스를 생성합니다. 자세한 내용을 알아보려면 [Creating a database](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-database.html)(데이터베이스 생성)를 참조하세요.

   1. 계정 A(크롤러가 실행될 계정)에 이전 단계에서 생성한 데이터베이스에 대한 액세스 권한을 부여합니다. 자세한 내용을 알아보려면 [Granting database permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-database-permissions.html)(데이터베이스 권한 부여)를 참조하세요.

1. 크롤러가 생성되어 실행될 계정(계정 A)에서

   1.  AWS RAM 콘솔을 사용하여 외부 계정(계정 B)에서 공유된 데이터베이스를 수락합니다. 자세한 내용을 알아보려면 [AWS Resource Access Manager에서 리소스 공유 초대 수락](https://docs.aws.amazon.com/lake-formation/latest/dg/accepting-ram-invite.html)을 참조하세요.

   1.  크롤러에 대한 IAM 역할을 생성합니다. 역할에 `lakeformation:GetDataAccess` 정책을 추가합니다.

   1.  Lake Formation 콘솔([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))에서 크롤러가 Lake Formation의 대상에서 데이터를 읽을 수 있도록 크롤러 실행에 사용되는 IAM 역할에 대상 Amazon S3 위치에 대한 **Data location**(데이터 위치) 권한을 부여합니다. 자세한 내용을 알아보려면 [Granting data location permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html)(데이터 위치 권한 부여)를 참조하세요.

   1.  공유 데이터베이스에 리소스 링크를 생성합니다. 자세한 내용을 알아보려면 [Create a resource link](https://docs.aws.amazon.com/lake-formation/latest/dg/create-resource-link-database.html)(리소스 링크 만들기)를 참조하세요.

   1.  공유 데이터베이스 및 (`Describe`) 리소스 링크에 대한 크롤러 역할 액세스 권한(`Create`)을 부여합니다. 리소스 링크는 크롤러의 출력에 지정됩니다.

   1.  AWS Glue 콘솔([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/))에서 크롤러를 구성하는 동안 **Use Lake Formation credentials for crawling Amazon S3 data source**(Amazon S3 데이터 소스 크롤링에 Lake Formation 자격 증명 사용) 옵션을 선택합니다.

      크로스 계정 크롤링의 경우 대상 Amazon S3 위치가 Lake Formation에 등록된 AWS 계정 ID를 지정합니다. 계정 내 크롤링의 경우 accountId 필드는 선택 사항입니다.  
![\[IAM role selection and Lake Formation configuration options for AWS Glue 크롤러 security settings.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/cross-account-crawler.png)

------
#### [ AWS CLI ]

```
aws glue --profile demo create-crawler --debug --cli-input-json '{
    "Name": "prod-test-crawler",
    "Role": "arn:aws:iam::111122223333:role/service-role/AWSGlueServiceRole-prod-test-run-role",
    "DatabaseName": "prod-run-db",
    "Description": "",
    "Targets": {
    "S3Targets":[
                {
                 "Path": "s3://amzn-s3-demo-bucket"
                }
                ]
                },
   "SchemaChangePolicy": {
      "UpdateBehavior": "LOG",
      "DeleteBehavior": "LOG"
  },
  "RecrawlPolicy": {
    "RecrawlBehavior": "CRAWL_EVERYTHING"
  },
  "LineageConfiguration": {
    "CrawlerLineageSettings": "DISABLE"
  },
  "LakeFormationConfiguration": {
    "UseLakeFormationCredentials": true,
    "AccountId": "111111111111"
  },
  "Configuration": {
           "Version": 1.0,
           "CrawlerOutput": {
             "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" },
             "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" }
           },
           "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" }
         },
  "CrawlerSecurityConfiguration": "",
  "Tags": {
    "KeyName": ""
  }
}'
```

------

**참고**  
Lake Formation 자격 증명을 사용하는 크롤러는 Amazon S3 및 데이터 카탈로그 대상에 대해서만 지원됩니다.
Lake Formation 자격 증명 벤딩을 사용하는 대상의 경우 기본 Amazon S3 위치가 동일한 버킷에 속해야 합니다. 예를 들어, 고객은 모든 대상 위치가 동일한 버킷(amzn-s3-demo-bucket1) 아래에 있는 한 여러 대상(s3://amzn-s3-demo-bucket1/folder1, s3://amzn-s3-demo-bucket1/folder2)을 사용할 수 있습니다. 서로 다른 버킷(s3://amzn-s3-demo-bucket1/folder1, s3://amzn-s3-demo-bucket2/folder2)을 지정하는 것은 허용되지 않습니다.
현재 데이터 카탈로그 대상 크롤러의 경우 단일 카탈로그 테이블이 있는 단일 카탈로그 대상만 허용됩니다.

# Amazon S3 이벤트 알림을 사용하여 크롤링 가속화
<a name="crawler-s3-event-notifications"></a>

Amazon S3 또는 데이터 카탈로그 대상의 객체를 나열하는 대신 Amazon S3 이벤트를 사용하여 변경 사항을 찾도록 크롤러를 구성할 수 있습니다. 이 기능은 전체 Amazon S3 또는 데이터 카탈로그 대상을 나열하는 대신 Amazon S3 이벤트를 통해 이벤트를 트리거한 하위 폴더의 모든 파일을 나열하여 두 크롤링 간의 변경 사항을 식별하므로 다시 크롤링하는 시간이 단축됩니다.

첫 번째 크롤링은 대상의 모든 Amazon S3 객체를 나열합니다. 첫 번째 크롤링이 성공한 후에는 수동으로 또는 정해진 일정에 따라 다시 크롤링하도록 선택할 수 있습니다. 크롤러는 모든 객체를 나열하지 않고 해당 이벤트의 객체만 나열합니다.

대상이 데이터 카탈로그 테이블인 경우 크롤러는 변경 내용을 사용하여 데이터 카탈로그의 기존 테이블을 업데이트합니다(예: 테이블의 추가 파티션).

Amazon S3 이벤트 기반 크롤러로 이동할 경우의 이점은 다음과 같습니다.
+ 대상의 모든 객체를 나열할 필요 없이 객체가 추가되거나 삭제되는 특정 폴더가 나열되므로 더 빠르게 다시 크롤링할 수 있습니다.
+ 객체가 추가되거나 삭제되는 특정 폴더가 나열되므로 전체 크롤링 비용이 절감됩니다.

Amazon S3 이벤트 크롤링은 크롤러 일정에 따라 SQS 대기열의 Amazon S3 이벤트를 사용하여 실행됩니다. 대기열에 이벤트가 없으면 비용이 발생하지 않습니다. SQS 대기열이나 여러 소비자가 동일한 이벤트를 필요로 하는 경우 SNS와 SQS의 조합으로 바로 이동하도록 Amazon S3 이벤트를 구성할 수 있습니다. 자세한 내용은 [Amazon S3 이벤트 알림을 위해 계정 설정](#crawler-s3-event-notifications-setup) 섹션을 참조하세요.

이벤트 모드로 크롤러를 생성하고 구성한 후 첫 번째 크롤링은 Amazon S3 또는 데이터 카탈로그 대상을 모두 나열하여 목록 모드로 실행됩니다. "크롤링이 Amazon S3 이벤트를 사용하여 실행되고 있습니다."라는 로그는 첫 번째 크롤링이 성공적으로 끝난 후 크롤링이 Amazon S3 이벤트를 사용하여 작동하고 있음을 확인합니다.

Amazon S3 이벤트 크롤링을 생성하고 크롤링에 영향을 줄 수 있는 크롤러 속성을 업데이트하면 크롤링이 목록 모드로 작동하고 "크롤링이 S3 이벤트 모드로 실행되고 있지 않습니다."라는 로그가 추가됩니다.

**참고**  
사용할 수 있는 최대 메시지 수는 크롤링당 100,000개입니다.

## 고려 사항 및 제한 사항
<a name="s3event-crawler-limitations"></a>

Amazon S3 이벤트 알림을 사용하여 변경 사항을 찾도록 크롤러를 구성할 때 다음 고려 사항과 제한 사항이 적용됩니다.
+  **삭제된 파티션의 중요 동작** 

  Data Catalog 테이블에서 Amazon S3 이벤트 크롤러를 사용하는 경우:
  +  `DeletePartition` API 직접 호출을 사용하여 파티션을 삭제하는 경우 해당 파티션의 모든 S3 객체도 삭제하고, S3 이벤트 알림을 구성할 때 **모든 객체 제거 이벤트**를 선택해야 합니다. 삭제 이벤트가 구성되지 않은 경우 크롤러는 다음 실행 도중 삭제된 파티션을 다시 생성합니다.
+ Amazon S3 대상이든 Data Catalog 대상이든 크롤러는 단일 대상만 지원합니다.
+ 프라이빗 VPC의 SQS는 지원되지 않습니다.
+ Amazon S3 샘플링은 지원되지 않습니다.
+ 크롤러 대상은 Amazon S3 대상의 폴더이거나 데이터 카탈로그 대상에 대한 하나 이상의 AWS Glue 데이터 카탈로그 테이블이어야 합니다.
+ 'everything' 경로 와일드카드는 지원되지 않습니다(s3://%).
+ 데이터 카탈로그 대상의 경우 모든 카탈로그 테이블은 Amazon S3 이벤트 모드에 대해 동일한 Amazon S3 버킷을 가리켜야 합니다.
+ 데이터 카탈로그 대상의 경우 카탈로그 테이블은 Delta Lake 형식(\$1symlink 폴더 포함 또는 카탈로그 테이블의 `InputFormat` 확인)의 Amazon S3 위치를 가리키지 않아야 합니다.

**Topics**
+ [고려 사항 및 제한 사항](#s3event-crawler-limitations)
+ [Amazon S3 이벤트 알림을 위해 계정 설정](#crawler-s3-event-notifications-setup)
+ [Amazon S3 대상에 대한 Amazon S3 이벤트 알림용 크롤러 설정](crawler-s3-event-notifications-setup-console-s3-target.md)
+ [데이터 카탈로그 테이블에 대한 Amazon S3 이벤트 알림용 크롤러 설정](crawler-s3-event-notifications-setup-console-catalog-target.md)

## Amazon S3 이벤트 알림을 위해 계정 설정
<a name="crawler-s3-event-notifications-setup"></a>

다음 설정 태스크를 완료합니다. 괄호 안의 값은 스크립트에서 구성 가능한 설정을 가리킵니다.

1. Amazon S3 버킷의 이벤트 알림을 설정해야 합니다.

   자세한 내용은 [Amazon S3 이벤트 알림](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html)을 참조하세요.

1. Amazon S3 이벤트 기반 크롤러를 사용하려면 S3 대상 및 SQS의 스토어와 동일한 접두사에서 필터링된 이벤트를 사용하여 Amazon S3 버킷에서 이벤트 알림을 사용해야 합니다. [연습: 알림용 버킷 구성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ways-to-add-notification-config-to-bucket.html) 단계에 따라 콘솔을 통해 SQS와 이벤트 알림을 설정할 수 있습니다.

1. 크롤러가 사용하는 역할에 다음 SQS 정책을 추가합니다.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
           "sqs:DeleteMessage",
           "sqs:GetQueueUrl",
           "sqs:ListDeadLetterSourceQueues",
           "sqs:ReceiveMessage",
           "sqs:GetQueueAttributes",
           "sqs:ListQueueTags",
           "sqs:SetQueueAttributes",
           "sqs:PurgeQueue"
         ],
         "Resource": "arn:aws:sqs:us-east-1:111122223333:cfn-sqs-queue"
       }
     ]
   }
   ```

------

# Amazon S3 대상에 대한 Amazon S3 이벤트 알림용 크롤러 설정
<a name="crawler-s3-event-notifications-setup-console-s3-target"></a>

AWS Management Console 또는 AWS CLI를 사용하여 Amazon S3 대상에 대한 Amazon S3 이벤트 알림용 크롤러를 설정하려면 다음 단계를 따르세요.

------
#### [ AWS Management Console ]

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

1.  크롤러 속성을 설정합니다. 자세한 내용을 알아보려면 [AWS Glue 콘솔에서 크롤러 구성 옵션 설정](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-console)을 참조하세요.

1.  **Data source configuration**(데이터 소스 구성) 섹션에 *Is your data already mapped to AWS Glue tables?*라는 메시지가 표시됩니다.

    기본적으로 **Not yet**(아직)이 이미 선택되어 있습니다. Amazon S3 데이터 소스를 사용 중이고 데이터가 AWS Glue 테이블에 아직 매핑되지 않았으므로 이 항목을 기본값으로 둡니다.

1.  **Data sources**(데이터 소스) 섹션에서 **Add a data source**(데이터 소스 추가)를 선택합니다.  
![\[Data source configuration interface with options to select or add data sources for crawling.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/crawler-s3-event-console1.png)

1.  **Add data source**(데이터 소스 추가) 모달에서 Amazon S3 데이터 소스를 구성합니다.
   +  **Data source**(데이터 소스): 기본적으로 Amazon S3가 선택됩니다.
   +  **Network connection**(네트워크 연결)(선택 사항): **Add new connection**(새 연결 추가)을 선택합니다.
   +  **Location of Amazon S3 data**(Amazon S3 데이터 위치): 기본적으로 **In this account**(이 계정에서)가 선택됩니다.
   +  **Amazon S3 path**(Amazon S3 경로): 폴더와 파일이 크롤링되는 Amazon S3 경로를 지정합니다.
   +  **Subsequent crawler runs**(후속 크롤러 실행): 크롤러에 대한 Amazon S3 이벤트 알림을 사용하려면 **Crawl based on events**(이벤트 기반 크롤링)를 선택합니다.
   +  **Include SQS ARN**(SQS ARN 포함): 유효한 SQS ARN을 포함하는 데이터 스토어 파라미터를 지정합니다. (예: `arn:aws:sqs:region:account:sqs`).
   +  **Include dead-letter SQS ARN**(배달 못한 편지 SQS ARN 포함)(선택 사항): 유효한 Amazon 배달 못한 편지 SQS ARN을 지정합니다. (예: `arn:aws:sqs:region:account:deadLetterQueue`).
   +  **Add an Amazon S3 data source**(Amazon S3 데이터 소스 추가)를 선택합니다.  
![\[Add data source dialog for S3, showing options for network connection and crawl settings.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/crawler-s3-event-console2.png)

------
#### [ AWS CLI ]

 다음은 이벤트 알림을 사용하여 Amazon S3 대상 버킷을 크롤링하도록 크롤러를 구성하는 Amazon S3 AWS CLI 호출의 예입니다.

```
Create Crawler:
aws glue update-crawler \
    --name myCrawler \
    --recrawl-policy RecrawlBehavior=CRAWL_EVENT_MODE \
    --schema-change-policy UpdateBehavior=UPDATE_IN_DATABASE,DeleteBehavior=LOG
    --targets '{"S3Targets":[{"Path":"s3://amzn-s3-demo-bucket/", "EventQueueArn": "arn:aws:sqs:us-east-1:012345678910:MyQueue"}]}'
```

------

# 데이터 카탈로그 테이블에 대한 Amazon S3 이벤트 알림용 크롤러 설정
<a name="crawler-s3-event-notifications-setup-console-catalog-target"></a>

데이터 카탈로그 테이블이 있는 경우, AWS Glue 콘솔을 사용하여 Amazon S3 이벤트 알림용 크롤러를 설정합니다.

1.  크롤러 속성을 설정합니다. 자세한 내용을 알아보려면 [AWS Glue 콘솔에서 크롤러 구성 옵션 설정](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-console)을 참조하세요.

1.  **Data source configuration**(데이터 소스 구성) 섹션에 *Is your data already mapped to AWS Glue tables?*라는 메시지가 표시됩니다.

    데이터 카탈로그의 기존 테이블을 데이터 소스로 선택하려면 **예(Yes)**를 선택합니다.

1.  **Glue 테이블(Glue tables)** 섹션에서 **테이블 추가(Add tables)**를 선택합니다.  
![\[Data source configuration interface with options to select existing Glue tables or add new ones.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/crawler-s3-event-console1-cat.png)

1.  **테이블 추가(Add table)** 모달에서 데이터베이스 및 테이블을 구성합니다.
   +  **Network connection**(네트워크 연결)(선택 사항): **Add new connection**(새 연결 추가)을 선택합니다.
   +  **데이터베이스(Database)**: 데이터 카탈로그의 데이터베이스를 선택합니다.
   +  **테이블(Tables)**: 데이터 카탈로그의 해당 데이터베이스에서 하나 이상의 테이블을 선택합니다.
   +  **Subsequent crawler runs**(후속 크롤러 실행): 크롤러에 대한 Amazon S3 이벤트 알림을 사용하려면 **Crawl based on events**(이벤트 기반 크롤링)를 선택합니다.
   +  **Include SQS ARN**(SQS ARN 포함): 유효한 SQS ARN을 포함하는 데이터 스토어 파라미터를 지정합니다. (예: `arn:aws:sqs:region:account:sqs`).
   +  **Include dead-letter SQS ARN**(배달 못한 편지 SQS ARN 포함)(선택 사항): 유효한 Amazon 배달 못한 편지 SQS ARN을 지정합니다. (예: `arn:aws:sqs:region:account:deadLetterQueue`).
   +  **확인(Confirm)**을 선택합니다.  
![\[Add Glue tables dialog with network, database, tables, and crawler options.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/crawler-s3-event-console2-cat.png)

# 튜토리얼: AWS Glue 크롤러 추가
<a name="tutorial-add-crawler"></a>

이 AWS Glue 시나리오에서는 주요 항공사의 도착 데이터를 분석하여 월별 출발 공항의 인기도를 계산해야 합니다. Amazon S3에 저장된 CSV 포맷의 2016년 항공편 데이터가 있습니다. 데이터를 변환하고 분석하기 전에 해당 메타데이터를 AWS Glue Data Catalog에 분류합니다.

이 튜토리얼에서는 Amazon S3 비행 로그에서 메타데이터를 유추하고 Data Catalog에 테이블을 생성하는 크롤러를 추가해 보겠습니다.

**Topics**
+ [사전 조건](#tutorial-add-crawler-prerequisites)
+ [1단계: 크롤러 추가](#tutorial-add-crawler-step1)
+ [2단계: 크롤러 실행](#tutorial-add-crawler-step2)
+ [3단계: AWS Glue Data Catalog 객체 보기](#tutorial-add-crawler-step3)

## 사전 조건
<a name="tutorial-add-crawler-prerequisites"></a>

이 튜토리얼에서는 AWS 계정이 있고 AWS Glue에 대한 액세스 권한이 있다고 가정합니다.

## 1단계: 크롤러 추가
<a name="tutorial-add-crawler-step1"></a>

다음 단계에 따라 Amazon S3 저장된 CSV 파일에서 메타데이터를 추출하는 크롤러를 구성하고 실행합니다.

**Amazon S3에 저장된 파일을 읽는 크롤러를 생성하려면**

1. AWS Glue 서비스 콘솔의 왼쪽 메뉴에서 [**크롤러(Crawlers)**]를 선택합니다.

1. 크롤러 페이지에서 **크롤러 생성**을 선택합니다. 그러면 크롤러 세부 정보를 묻는 일련의 페이지가 시작됩니다.  
![\[이 스크린샷은 크롤러 페이지를 보여줍니다. 여기에서 크롤러를 만들거나 기존 크롤러를 편집, 복제, 삭제, 조회할 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/crawlers-create_crawler.png)

1. [크롤러 이름(Crawler name)] 필드에 **Flights Data Crawler**를 입력하고 [**다음(Next)**]을 선택합니다.

   크롤러는 분류자를 호출하여 데이터의 스키마를 추론합니다. 이 튜토리얼에서는 기본적으로 CSV에 기본 제공 분류자를 사용합니다.

1. 크롤러 소스 유형으로 [**데이터 스토어(Data stores)**]를 선택하고 [**다음(Next)**]을 선택합니다.

1. 이제 크롤러가 데이터를 가리키도록 하겠습니다. [**데이터 스토어 추가(Add a data store)**] 페이지에서 Amazon S3 데이터 스토어를 선택합니다. 이 튜토리얼에서는 연결을 사용하지 않으므로 [**연결(Connection)**] 필드가 표시되면 비워 둡니다.

   [**데이터 크롤링(Crawl data in)**] 옵션으로 [**다른 계정으로 지정된 경로(Specified path in another account)**]를 선택합니다. 그런 다음 [**포함 경로(Include path)**]에 크롤러가 항공편 데이터를 찾을 수 있는 경로인 **s3://crawler-public-us-east-1/flight/2016/csv**를 입력합니다. 경로를 입력하면 이 필드의 제목이 [**포함 경로(Include path)**]로 바뀝니다. **다음**을 선택합니다.

1. 단일 크롤러로 여러 데이터 스토어를 크롤링할 수 있습니다. 그러나 이 튜토리얼에서는 단일 데이터 스토어만 사용하므로 [**아니요(No)**]를 선택한 후 [**다음(Next)**]을 선택합니다.

1. 크롤러는 데이터 스토어에 액세스하고 AWS Glue Data Catalog에서 객체를 생성할 수 있는 권한이 필요합니다. 이러한 권한을 구성하려면 [**IAM 역할 생성(Create an IAM role)**]을 선택합니다. IAM 역할 이름은 `AWSGlueServiceRole-`로 시작하고 필드에 역할 이름의 마지막 부분을 입력합니다. **CrawlerTutorial**을 입력한 다음 [**다음(Next)**]을 선택합니다.
**참고**  
IAM 역할을 생성하려면 AWS 사용자에게 `CreateRole`, `CreatePolicy` 및 `AttachRolePolicy` 권한이 있어야 합니다.

   마법사는 `AWSGlueServiceRole-CrawlerTutorial`이라는 IAM 역할을 생성하고 AWS 관리형 정책 `AWSGlueServiceRole`을 이 역할에 연결하고 Amazon S3 위치 `s3://crawler-public-us-east-1/flight/2016/csv`에 대한 읽기 액세스를 허용하는 인라인 정책을 추가합니다.

1. 크롤러에 대한 일정을 생성합니다. [**빈도(Frequency)**]에서 [**온디맨드로 실행(Run on demand)**]을 선택하고 [**다음(Next)**]을 선택합니다.

1. 크롤러가 Data Catalog에 테이블을 생성합니다. 테이블은 Data Catalog의 데이터베이스에 포함됩니다. 먼저 [**데이터베이스 추가(Add database)**]를 선택하여 데이터베이스를 생성합니다. 팝업 창에서 데이터베이스 이름으로 **test-flights-db**를 입력하고 [**생성(Create)**]을 선택합니다.

   그런 다음 [**테이블에 추가된 접두사(Prefix added to tables)**]에 **flights**를 입력합니다. 나머지 옵션에 기본값을 사용하고 [**다음(Next)**]을 선택합니다.

1. []**크롤러 추가(Add crawler)**] 마법사에서 선택 내용을 확인합니다. 실수가 있는 경우 [**뒤로(Back)**]를 클릭하여 이전 페이지로 돌아가서 변경할 수 있습니다.

   정보를 검토한 후 [**마침(Finish)**]을 선택하여 크롤러를 생성합니다.

## 2단계: 크롤러 실행
<a name="tutorial-add-crawler-step2"></a>

크롤러를 생성하면 마법사가 크롤러 보기 페이지로 이동합니다. 온디맨드 일정으로 크롤러를 생성하기 때문에 크롤러를 실행할 수 있는 옵션이 제공됩니다.

**크롤러를 실행하려면**

1. 이 페이지 상단 근처에 있는 배너를 통해 크롤러가 생성되었음을 알리고 지금 실행할 것인지 묻습니다. [**지금 실행?(Run it now?)**]을 선택하여 크롤러를 실행합니다.

   배너가 변경되어 크롤러에 대해 “실행 시도 중(Attempting to run)” 및 “실행 중(Running)” 메시지가 표시됩니다. 크롤러 실행이 시작되면 배너가 사라지고 크롤러 디스플레이가 업데이트되어 크롤러에 대해 시작 중(Starting) 상태가 표시됩니다. 잠시 후 새로 고침 아이콘을 클릭하여 테이블에 표시된 크롤러의 상태를 업데이트할 수 있습니다.

1. 크롤러가 완료되면 크롤러의 변경 사항을 설명하는 새 배너가 나타납니다. **test-flights-db**링크를 선택하여 Data Catalog 객체를 볼 수 있습니다.

## 3단계: AWS Glue Data Catalog 객체 보기
<a name="tutorial-add-crawler-step3"></a>

크롤러는 소스 위치에서 데이터를 읽고 Data Catalog에 테이블을 생성합니다. 테이블은 해당 스키마를 포함한 데이터를 나타내는 메타데이터 정의입니다. Data Catalog의 테이블에는 데이터가 없습니다. 대신 이러한 테이블을 작업 정의에서 소스 또는 대상으로 사용합니다.

**크롤러가 생성한 Data Catalog 객체를 보려면**

1. 왼쪽 탐색의 [**데이터 카탈로그(Data catalog)**]에서 [**데이터베이스(Databases)**]를 선택합니다. 여기에서 크롤러에 의해 생성된 `flights-db` 데이터베이스를 볼 수 있습니다.

1. 왼쪽 탐색의 **[데이터 카탈로그(Data catalog)]** 및 **[데이터베이스(Databases)]** 아래에서 [**테이블(Tables)**]을 선택합니다. 여기에서 크롤러가 생성한 `flightscsv` 테이블을 볼 수 있습니다. 테이블 이름을 선택하면 테이블 설정, 파라미터 및 속성을 볼 수 있습니다. 이 보기에서 아래로 스크롤하면 테이블의 열 및 데이터 유형에 대한 정보인 스키마를 볼 수 있습니다.

1. 테이블 보기 페이지에서 [**파티션 보기(View partitions)**]를 선택하면 데이터에 대해 생성된 파티션을 볼 수 있습니다. 첫 번째 열은 파티션 키입니다.

# 수동으로 메타데이터 정의
<a name="populate-dg-manual"></a>

 AWS Glue 데이터 카탈로그는 데이터 소스 및 데이터 세트에 대한 메타데이터를 저장하는 중앙 리포지토리입니다. 크롤러가 지원되는 데이터 소스의 메타데이터를 자동으로 크롤링하고 채울 수 있지만 특정 시나리오에서는 데이터 카탈로그에서 메타데이터를 수동으로 정의해야 할 수 있습니다.
+ 지원되지 않는 데이터 형식 - 크롤러가 지원하지 않는 데이터 소스가 있는 경우 데이터 카탈로그에서 해당 데이터 소스의 메타데이터를 수동으로 정의해야 합니다.
+ 사용자 지정 메타데이터 요구 사항 - AWS Glue 크롤러에서는 사전 정의된 규칙 및 규약을 기반으로 메타데이터를 유추합니다. AWS Glue 크롤러 추론 메타데이터에 포함되지 않는 특정 메타데이터 요구 사항이 있는 경우 필요에 맞게 메타데이터를 수동으로 정의할 수 있습니다.
+ 데이터 거버넌스 및 표준화 - 데이터 거버넌스, 규정 준수 또는 보안상의 이유로 메타데이터 정의에 대한 보다 세밀한 제어가 필요할 수 있습니다. 메타데이터를 수동으로 정의하면 메타데이터가 조직의 표준 및 정책을 준수하는지 확인할 수 있습니다.
+ 장래 데이터 수집을 위한 자리 표시자 - 즉시 사용할 수 없거나 액세스할 수 없는 데이터 소스가 있는 경우 빈 스키마 테이블을 자리 표시자로 생성할 수 있습니다. 데이터 소스를 사용할 수 있게 되면 사전 정의된 구조를 유지하면서 실제 데이터로 테이블을 채울 수 있습니다.

 메타데이터를 수동으로 정의하려면 AWS Glue 콘솔, Lake Formation 콘솔, AWS Glue API 또는 AWS Command Line Interface(AWS CLI)를 사용할 수 있습니다. 데이터베이스, 테이블 및 파티션을 생성하고 열 이름, 데이터 유형, 설명 및 기타 속성과 같은 메타데이터 속성을 지정할 수 있습니다.

# 데이터베이스 생성
<a name="define-database"></a>

데이터베이스는 AWS Glue에서 메타데이터 테이블을 구성하는 데 사용됩니다. AWS Glue Data Catalog에 테이블을 정의할 때 테이블을 데이터베이스에 추가합니다. 테이블은 하나의 데이터베이스에만 있을 수 있습니다.

데이터베이스는 다양한 데이터 스토어의 데이터를 정의하는 테이블을 포함할 수 있습니다. 이 데이터에는 Amazon Simple Storage Service(Amazon S3)의 객체와 Amazon Relational Database Service의 관계형 테이블이 포함될 수 있습니다.

**참고**  
AWS Glue Data Catalog에서 데이터베이스를 삭제할 때 데이터베이스의 모든 테이블도 삭제됩니다.

 데이터베이스 목록을 보려면 AWS Management Console에 로그인하고 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 엽니다. [**데이터베이스(Databases)**]를 선택한 다음 목록에서 데이터베이스 이름을 선택하여 상세 정보를 봅니다.

 AWS Glue 콘솔의 [**데이터베이스(Databases)**] 탭에서 데이터베이스를 추가, 편집 및 삭제할 수 있습니다.
+ 새로운 데이터베이스를 생성하려면 [**Add database(데이터베이스 추가)**]를 선택하고 이름과 설명을 제공해야 합니다. Apache Hive와 같은 다른 메타데이터 스토어의 호환성을 고려해 이름은 소문자로 합니다.
**참고**  
Amazon Athena에서 데이터베이스로 액세스하고자 할 경우, 공급자 이름을 영숫자 문자와 밑줄 표시로 생성합니다. 자세한 내용을 알아보려면 [테이블, 데이터베이스 및 열의 이름](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#ate-table-database-and-column-names-allow-only-underscore-special-characters)을 참조하세요.
+  데이터베이스에 대한 설명을 편집하려면 데이터베이스 이름 옆에 있는 확인란을 선택하고 **Edit**(편집)을 선택합니다.
+  데이터베이스를 삭제하려면 데이터베이스 이름 옆에 있는 확인란을 선택하고 **Remove**(제거)를 선택합니다.
+  데이터베이스에 포함된 테이블 목록을 표시하려면 데이터베이스 이름을 선택합니다. 그러면 데이터베이스 속성에 데이터베이스의 모든 테이블이 표시됩니다.

크롤러가 작성하는 데이터베이스를 변경하려면 크롤러 정의를 변경해야 합니다. 자세한 내용은 [크롤러를 사용하여 데이터 카탈로그 채우기](add-crawler.md) 섹션을 참조하세요.

## 데이터베이스 리소스 링크
<a name="databases-resource-links"></a>


|  | 
| --- |
| AWS Glue 콘솔이 최근에 업데이트되었습니다. 현재 버전의 콘솔에서는 데이터베이스 리소스 링크를 지원하지 않습니다. | 

Data Catalog에는 데이터베이스에 대한 *리소스 링크*도 포함될 수 있습니다. 데이터베이스 리소스 링크는 로컬 또는 공유 데이터베이스에 대한 링크입니다. 현재 AWS Lake Formation에서만 리소스 링크를 생성할 수 있습니다. 데이터베이스에 대한 리소스 링크를 생성한 후에는 데이터베이스 이름을 사용할 모든 위치에 리소스 링크 이름을 사용할 수 있습니다. 사용자가 소유하거나 사용자와 공유된 데이터베이스와 함께 데이터베이스 리소스 링크는 `glue:GetDatabases()`에 의해 반환되고 AWS Glue 콘솔의 [**데이터베이스(Databases)**] 페이지에 항목으로 나타납니다.

Data Catalog에는 테이블 리소스 링크도 포함될 수 있습니다.

리소스 링크에 대한 자세한 내용은 *AWS Lake Formation Developer Guide*의 [Creating Resource Links](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-resource-links.html)를 참조하세요.

# 테이블 생성
<a name="tables-described"></a>

크롤러를 실행하여 데이터의 목록을 데이터 스토어로 가져오는 것이 권장되는 방법이지만 메타데이터 테이블을 수동으로 AWS Glue Data Catalog에 추가할 수도 있습니다. 이 접근 방식을 사용하면 메타데이터 정의를 더 세밀하게 제어하고 특정 요구 사항에 따라 메타데이터 정의를 사용자 지정할 수 있습니다.

또한 다음과 같은 방법으로 데이터 카탈로그에 수동으로 테이블을 추가할 수 있습니다.
+ AWS Glue 콘솔을 사용하여 AWS Glue Data Catalog에 테이블을 수동으로 생성합니다. 자세한 내용은 [콘솔을 사용하여 테이블 생성](#console-tables) 섹션을 참조하세요.
+ [AWS Glue API](aws-glue-api.md)에서 `CreateTable` 작업을 사용하여 AWS Glue Data Catalog에 테이블을 생성합니다. 자세한 내용은 [CreateTable 작업(Python: create\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-CreateTable) 섹션을 참조하세요.
+ CloudFormation 템플릿을 사용합니다. 자세한 내용은 [AWS Glue용 AWS CloudFormation](populate-with-cloudformation-templates.md) 섹션을 참조하세요.

콘솔 또는 API를 사용하여 테이블을 수동으로 정의할 때 데이터 원본에 있는 데이터의 유형과 형식을 나타내는 분류 필드의 값과 테이블 스키마를 지정합니다. 크롤러가 테이블을 생성하면 데이터 형식 및 스키마는 기본 제공 분류자 또는 사용자 지정 분류자에 의해 결정됩니다. AWS Glue 콘솔을 사용하여 테이블 생성에 대한 자세한 내용은 [콘솔을 사용하여 테이블 생성](#console-tables) 단원을 참조하십시오.

**Topics**
+ [테이블 파티션](#tables-partition)
+ [테이블 리소스 링크](#tables-resource-links)
+ [콘솔을 사용하여 테이블 생성](#console-tables)
+ [파티션 인덱스 생성](partition-indexes.md)
+ [크롤러를 사용하여 수동으로 생성된 Data Catalog 테이블 업데이트](#update-manual-tables)
+ [데이터 카탈로그 테이블 속성](#table-properties)

## 테이블 파티션
<a name="tables-partition"></a>

Amazon Simple Storage Service(Amazon S3) 폴더의 AWS Glue 테이블 정의는 분할된 테이블을 설명할 수 있습니다. 예를 들어, 쿼리 성능을 향상시키려면 파티션된 테이블이 매월 데이터를 키로써 매월 이름을 사용하여 다른 파일로 나눠야 합니다. AWS Glue에서 테이블의 파티션된 키가 테이블 정의에 포함됩니다. AWS Glue가 Amazon S3 폴더의 데이터를 평가하여 테이블을 분류하면 개별 테이블인지 또는 추가된 파티션된 테이블인지 결정합니다.

테이블의 모든 파티션을 로드하는 대신 테이블에 파티션 인덱스를 만들어 파티션의 하위 집합을 가져올 수 있습니다. 파티션 인덱스 작업에 대한 자세한 내용은 [파티션 인덱스 생성](partition-indexes.md) 섹션을 참조하세요.

AWS Glue가 Amazon S3 폴더의 파티션된 테이블을 생성하는 것으로 간주하려면 모든 조건이 true여야 합니다.
+ AWS Glue가 결정함에 따라 파일의 스키마는 비슷합니다.
+ 파일의 데이터 형식은 동일합니다.
+ 파일의 압축 형식은 동일합니다.

예를 들어, iOS 및 안드로이드 앱 세일 데이터 모두를 저장할 수 있는 `my-app-bucket`이라는 Amazon S3 버킷을 소유할 수 있습니다. 데이터는 연, 월, 일별로 분할되어 있습니다. iOS 및 안드로이드 세일 데이터 파일은 동일한 스키마, 데이터 포맷 및 압축 포맷을 가지고 있습니다. AWS Glue Data Catalog에서 AWS Glue 크롤러는 연, 월, 일별 파티션 키와 함께 하나의 테이블 정의를 생성합니다.

`my-app-bucket`의 다음 Amazon S3 목록은 몇 가지 파티션을 보여줍니다. `=` 부호는 파티션 키 값을 지정할 때 사용됩니다.

```
   my-app-bucket/Sales/year=2010/month=feb/day=1/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=1/Android.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/Android.csv
   ...
   my-app-bucket/Sales/year=2017/month=feb/day=4/iOS.csv
   my-app-bucket/Sales/year=2017/month=feb/day=4/Android.csv
```

## 테이블 리소스 링크
<a name="tables-resource-links"></a>


|  | 
| --- |
| AWS Glue 콘솔이 최근에 업데이트되었습니다. 현재 버전의 콘솔에서는 테이블 리소스 링크를 지원하지 않습니다. | 

Data Catalog에는 테이블에 대한 *리소스 링크*도 포함될 수 있습니다. 테이블 리소스 링크는 로컬 또는 공유 테이블에 대한 링크입니다. 현재 AWS Lake Formation에서만 리소스 링크를 생성할 수 있습니다. 테이블에 대한 리소스 링크를 생성한 후에는 테이블 이름을 사용할 모든 위치에 리소스 링크 이름을 사용할 수 있습니다. 사용자가 소유하거나 사용자와 공유된 테이블과 함께 테이블 리소스 링크는 `glue:GetTables()`에 의해 반환되고 AWS Glue 콘솔의 [**데이터베이스(Databases)**] 페이지에 항목으로 나타납니다.

Data Catalog에는 데이터베이스 리소스 링크도 포함될 수 있습니다.

리소스 링크에 대한 자세한 내용은 *AWS Lake Formation Developer Guide*의 [Creating Resource Links](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-resource-links.html)를 참조하세요.

## 콘솔을 사용하여 테이블 생성
<a name="console-tables"></a>

AWS Glue Data Catalog에서 테이블은 데이터 스토어의 데이터를 표현하는 메타데이터 정의입니다. 크롤러를 실행하여 테이블을 생성하거나 AWS Glue 콘솔을 사용하여 수동으로 테이블을 생성할 수 있습니다. AWS Glue 콘솔의 [**테이블(Tables)**] 목록에는 테이블의 메타데이터 값이 표시됩니다. ETL(Extract, Transform, and Load) 작업을 생성할 시 테이블 정의를 사용하여 소스 및 타켓을 명시합니다.

**참고**  
AWS Management Console이 최근에 변경되었으므로 [https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables) 권한을 가지려면 기존 IAM 역할을 수정해야 할 수 있습니다. 새 역할 생성을 위해 `SearchTables` API 권한이 이미 기본값으로 추가되었습니다.

시작하려면 AWS Management Console에 로그인하고 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 엽니다. [**Tables**] 탭을 선택하고 [**Add tables**] 버튼을 사용하여 크롤러 혹은 수동 입력 속성으로 테이블을 생성합니다.

### 콘솔에서 테이블 추가
<a name="console-tables-add"></a>

크롤러를 사용하여 테이블을 추가하려면 [**Add tables**]에서 [**Add tables using a crawler**]를 선택합니다. 다음, [**Add crawler**] 마법사 지시에 따릅니다. 크롤러가 실행되면 테이블은 AWS Glue Data Catalog에 추가됩니다. 자세한 내용은 [크롤러를 사용하여 데이터 카탈로그 채우기](add-crawler.md) 섹션을 참조하세요.

요구되는 속성을 알면 테이블 마법사를 통해 Data Catalog에 Amazon Simple Storage Service(Amazon S3) 테이블 정의를 생성할 수 있습니다. [**Add tables**]에서 [**Add table manually**]를 선택하고 [**Add table**] 마법사 지시를 따릅니다.

수동으로 콘솔을 통해 테이블을 추가할 때는 다음을 참조하세요.
+ Amazon Athena에서 테이블에 액세스하고자 할 경우, 공급자 이름을 영숫자 문자와 밑줄 표시로 생성합니다. 자세한 내용은 [Athena 이름](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#ate-table-database-and-column-names-allow-only-underscore-special-characters)을 참조하세요.
+ 원본 데이터의 위치는 Amazon S3 경로여야 합니다.
+ 데이터의 데이터 형식은 마법사의 형식과 일치해야 합니다. 해당 분류와 SerDe, 기타 테이블 속성은 자동으로 선택한 형식을 기반으로 장착됩니다. 다음 형식을 사용하여 테이블을 정의할 수 있습니다.  
**Avro**  
아파치 아브로 JSON 이진 형식  
**CSV**  
값 분리 가치. 콤마 혹은 파이프, 세미콜론, 탭, Ctrl\$1A의 구획 문자를 명시합니다.  
**JSON**  
JavaScript Object Notation(JSON)입니다.  
**XML**  
확장형 마크업 언어 형식 데이터에서 열을 정의하는 XML 태그를 명시합니다. 컬럼은 열 태그들 내에서 정의합니다.  
**PARQUET**  
Apache Parquet 컬럼 방식 스토리지  
**ORC**  
Optimized Row Columnar(ORC) 파일 형식입니다. Hive 데이터를 효율적으로 저장하도록 설계된 형식입니다.
+ 테이블의 파티션 키를 정의할 수 있습니다.
+ 현재, 콘솔을 사용하여 생성한 파티션된 테이블은 ETL 작업 시 사용할 수 없습니다.

### 테이블 속성
<a name="console-tables-attributes"></a>

다음은 테이블이 갖는 몇 가지 중요한 특징입니다.

**이름**  
테이블 생성 시 이름이 결정되고 변경할 수 없습니다. 테이블 이름은 많은 AWS Glue 작업을 참조하십시오.

**데이터베이스**  
컨테이너 객체는 테이블이 위치한 곳입니다. 이 객체는 AWS Glue Data Catalog 내 존재하는 테이블 조직을 포함하고 데이터 스토어의 조직과 다를 수 있습니다. 데이터베이스를 삭제하면 데이터베이스에 포함된 모든 테이블도 Data Catalog에서 삭제됩니다. 

**설명**  
테이블에 대한 설명입니다. 테이블 내용을 이해할 수 있도록 설명을 적을 수 있습니다.

**테이블 형식**  
표준 AWS Glue 테이블 또는 Apache Iceberg 형식의 테이블 생성을 지정합니다.  
Data Catalog에서는 Iceberg 테이블의 쿼리 성능을 개선하고 테이블 스토리지를 관리하는 다음 테이블 최적화 옵션을 제공합니다.  
+ **압축** - 데이터 파일이 병합 및 재작성되어 불필요한 데이터를 제거하고 조각난 데이터를 더 크고 효율적인 파일로 통합합니다.
+ **스냅샷 보존** - 스냅샷은 Iceberg 테이블의 타임스탬프가 표시된 버전입니다. 스냅샷 보존 구성을 통해 고객은 스냅샷을 보존하는 기간과 보존할 스냅샷 수를 적용할 수 있습니다. 스냅샷 보존 최적화 프로그램을 구성하면 오래되고 불필요한 스냅샷과 연결된 파일을 제거하여 스토리지 오버헤드를 관리하는 데 도움이 될 수 있습니다.
+ **분리된 파일 삭제** - 분리된 파일은 Iceberg 테이블 메타데이터에서 더 이상 참조되지 않는 파일입니다. 이러한 파일은 시간이 지남에 따라 누적될 수 있으며, 특히 테이블 삭제 같은 작업이나 ETL 작업 실패 이후에 누적될 수 있습니다. 분리된 파일 삭제를 활성화하면 AWS Glue에서 이러한 불필요한 파일을 주기적으로 식별 및 제거하여 스토리지를 확보할 수 있습니다.
자세한 내용은 [Iceberg 테이블 최적화](table-optimizers.md) 섹션을 참조하세요.

**최적화 구성**  
기본 설정을 사용하거나 테이블 최적화 프로그램을 활성화하기 위한 설정을 사용자 지정할 수 있습니다.

**IAM 역할**  
 테이블 최적화 프로그램을 실행하기 위해 서비스는 사용자를 대신하여 IAM 역할을 수임합니다. 드롭다운을 사용하여 IAM 역할을 선택할 수 있습니다. 압축 기능을 활성화하는 데 필요한 권한이 역할에 있는지 확인합니다.  
IAM 역할에 필요한 권한에 대해 알아보려면 [테이블 최적화 필수 조건](optimization-prerequisites.md) 섹션을 참조하십시오.

**위치**  
이 테이블 정의는 데이터 스토어의 데이터 위치를 표현하는 포인터를 표시합니다.

**분류**  
테이블 생성 시 분류 값이 제공됩니다. 일반적으로 크롤러가 소스 데이터 형식을 실행하고 명시하면 이것이 적힙니다.

**최종 업데이트 날짜**  
Data Catalog에 이 테이블이 업데이트된 시간 및 날짜(UTC).

**데이터 추가됨**  
Data Catalog에 이 테이블이 추가된 시간 및 날짜(UTC).

**Deprecated**  
기존 데이터 스토어에 Data Catalog의 테이블이 존재하지 않고 AWS Glue가 이를 인식하면 데이터 카탈로그에 이 테이블을 사용 중단 상태로 표시합니다. 사용 중단된 테이블을 참조하는 작업을 실행하면 그 작업은 실행되지 않을 수 있습니다. 사용 중단된 테이블을 참조하는 작업을 편집하여 소스와 타켓으로써 제거합니다. 더 이상 필요하지 않은 사용 중단된 테이블은 삭제하는 것이 좋습니다.

**연결**  
AWS Glue가 데이터 스토어에 연결하고자 할 경우, 연결 이름은 테이블과 관련이 있습니다.

### 테이블 세부 정보 보기 및 편집
<a name="console-tables-details"></a>

목록에서 테이블 이름을 선택하고 [**Action, View details**]를 선택하여 존재하는 테이블의 세부 정보를 열람합니다.

테이블 세부 정보는 테이블 속성과 스키마를 포함합니다. 이 화면은 테이블을 정의하기 위한 열 이름, 데이터 유형, 파티션 키 열 등을 포함한 테이블 스키마를 표시합니다. 복잡한 유형의 열은 [**속성 보기(View properties)**]를 선택하여 다음 예처럼 필드 구조의 세부 사항을 표시합니다.

```
{
"StorageDescriptor": 
    {
      "cols": {
         "FieldSchema": [
           {
             "name": "primary-1",
             "type": "CHAR",
             "comment": ""
           },
           {
             "name": "second ",
             "type": "STRING",
             "comment": ""
           }
         ]
      },
      "location": "s3://aws-logs-111122223333-us-east-1",
      "inputFormat": "",
      "outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
      "compressed": "false", 
      "numBuckets": "0",
      "SerDeInfo": {
           "name": "",
           "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
           "parameters": {
               "separatorChar": "|"
            }
      },
      "bucketCols": [],
      "sortCols": [],
      "parameters": {},
      "SkewedInfo": {},
      "storedAsSubDirectories": "false"
    },
    "parameters": {
       "classification": "csv"
    }
}
```

이러한 속성에 대한 `StorageDescriptor`와 같은 자세한 내용은 [StorageDescriptor 구조](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-StorageDescriptor)를 참조하십시오.

[**Edit schema**]를 선택하여 열을 추가 및 제거하고 열 이름과 데이터 유형을 바꿔 테이블 스키마를 바꿀 수 있습니다.

 [**Compare versions**]를 선택하고 테이블 스키마의 두 가지 다른 버전을 나란히 비교하여 스키마를 포함한 테이블의 다른 유형들을 비교할 수 있습니다. 자세한 내용은 [테이블 스키마 버전 비교](#console-tables-schema-comparison) 섹션을 참조하세요.

Amazon S3 파티션을 구성하는 파일을 표시하려면 [**파티션 보기(View partition)**]를 선택합니다. Amazon S3 테이블의 [**키(Key)**] 열은 원본 데이터 스토어 테이블의 파티션에 사용된 파티션 키를 표시합니다. 파티셔닝은 날짜, 위치, 출발점과 같이 키 열 값을 기준으로 테이블을 관련 부분으로 나눕니다. 파티션에 대한 보다 자세한 내용은 "hive partitioning"으로 웹서치를 하시기 바랍니다.

**참고**  
콘솔의 [**Explore table**] 자습서를 통해 테이블 세부 정보를 보기 위한 단계들을 알아보십시오.

### 테이블 스키마 버전 비교
<a name="console-tables-schema-comparison"></a>

 두 버전의 테이블 스키마를 비교할 때 중첩된 행을 확장 및 축소하여 중첩된 행 변경 내용을 비교하고, 두 버전의 스키마를 나란히 비교하고, 테이블 속성을 나란히 볼 수 있습니다.

 버전을 비교하려면 

1.  AWS Glue Console에서 **테이블**, **작업**을 선택한 다음 **버전 비교**를 선택합니다.  
![\[스크린샷은 선택 시 작업 버튼을 보여줍니다. 드롭다운 메뉴에는 버전 비교 옵션이 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/catalog-table-compare-versions.png)

1.  버전 드롭다운 메뉴를 선택하여 비교할 버전을 선택합니다. 스키마를 비교할 때 스키마 탭은 주황색으로 강조 표시됩니다.

1.  두 버전 간에 테이블을 비교하면 화면 왼쪽과 오른쪽에 테이블 스키마가 표시됩니다. 이렇게 하면 열 이름, 데이터 유형, 키 및 설명 필드를 나란히 비교하여 변경 내용을 시각적으로 확인할 수 있습니다. 변경 사항이 있을 경우 색상 아이콘에 적용된 변경 유형이 표시됩니다.
   +  삭제됨 - 빨간색 아이콘으로 표시되면 이전 버전의 테이블 스키마에서 해당 열이 제거된 위치를 나타냅니다.
   +  편집됨 또는 이동됨 - 파란색 아이콘으로 표시되면 새 버전의 테이블 스키마에서 열이 수정 또는 이동된 위치를 나타냅니다.
   +  추가됨 - 녹색 아이콘으로 표시되면 해당 열이 새 버전의 테이블 스키마에 추가된 위치를 나타냅니다.
   +  중첩된 변경 내용 - 노란색 아이콘으로 표시되면 중첩된 열에 변경 내용이 포함된 위치를 나타냅니다. 확장할 열을 선택하면 삭제, 편집, 이동 또는 추가된 열이 표시됩니다.  
![\[스크린샷은 두 버전 간의 테이블 스키마 비교를 보여줍니다. 왼쪽에는 이전 버전이 있습니다. 오른쪽에는 최신 버전이 있습니다. 삭제 아이콘은 이전 버전에서 제거되어 더 이상 새 버전에는 없는 열 옆에 있습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/catalog-table-version-comparison.png)

1.  필터 필드 검색 창을 사용하면 여기에 입력한 문자를 기반으로 필드를 표시할 수 있습니다. 테이블 버전 중 하나에 열 이름을 입력하면 필터링된 필드가 두 테이블 버전 모두에 표시되어 변경 사항이 발생한 위치를 보여 줍니다.

1.  속성을 비교하려면 **속성 탭**을 선택합니다.

1.  버전 비교를 중지하려면 **비교 중지**를 선택하여 테이블 목록으로 돌아갑니다.

# 파티션 인덱스 생성
<a name="partition-indexes"></a>

시간이 지남에 따라 수십만 개의 파티션이 테이블에 추가됩니다. [GetPartitions API](https://docs.aws.amazon.com/glue/latest/webapi/API_GetPartitions.html)는 테이블의 파티션을 가져오는 데 사용됩니다. API는 요청에 제공된 표현식과 일치하는 파티션을 반환합니다.

**Country, **Category, **Year, **Month, **creationDate 키로 분할된** sales\$1data 테이블을 예로 들어 보겠습니다. 2020년 **2020-08-15 이후에 **도서 카테고리에서 판매된 모든 상품에 대한 판매 데이터를 얻으려면 데이터 카탈로그에 "Category = 'Books' 및 creationDate > '2020-08-15'"라는 표현으로 `GetPartitions` 요청을 해야 합니다.

테이블에 파티션 인덱스가 없으면 AWS Glue는 테이블의 모든 파티션을 로드한 다음 `GetPartitions` 요청에서 사용자가 제공한 쿼리 표현식을 사용하여 로드된 파티션을 필터링합니다. 인덱스가 없는 테이블에서 파티션 수가 증가하면 쿼리를 실행하는 데 더 많은 시간이 걸립니다. 인덱스를 사용하면 `GetPartitions` 쿼리는 테이블의 모든 파티션을 로드하는 대신 파티션의 하위 집합을 가져오려고 시도합니다.

**Topics**
+ [파티션 인덱스 정보](#partition-index-1)
+ [파티션 인덱스로 테이블 생성](#partition-index-creating-table)
+ [기존 테이블에 파티션 인덱스 추가](#partition-index-existing-table)
+ [테이블의 파티션 인덱스 설명](#partition-index-describing)
+ [파티션 인덱스 사용에 대한 제한 사항](#partition-index-limitations)
+ [최적화된 GetPartitions 호출에 인덱스 사용](#partition-index-getpartitions)
+ [엔진과의 통합](#partition-index-integration-engines)

## 파티션 인덱스 정보
<a name="partition-index-1"></a>

파티션 인덱스를 생성할 때 지정된 테이블에 이미 존재하는 파티션 키 목록을 지정합니다. 파티션 인덱스는 테이블에 정의된 파티션 키의 하위 목록입니다. 테이블에 정의된 파티션 키의 순열에 대해 파티션 인덱스를 생성할 수 있습니다. 위의 **sales\$1data 테이블에 대해 가능한 인덱스는 (country, category, creationDate), (country, category, year), (country, category), (country), (category, country, year, month) 등입니다.

Data Catalog는 인덱스 생성 시 제공된 순서대로 파티션 값을 연결합니다. 인덱스는 파티션이 테이블에 추가될 때 일관되게 구축됩니다. 문자열(string, char, varchar), 숫자(int, bigint, long, tinyint, smallint), 날짜(yyyy-MM-dd) 열 유형에 대한 인덱스를 생성할 수 있습니다.

**지원되는 데이터 유형**
+ 날짜 - ISO 형식의 날짜(예: `YYYY-MM-DD`)입니다. 예를 들어 날짜 `2020-08-15`입니다. 형식은 하이픈(-)을 사용하여 연도, 월, 일을 구분합니다. 인덱싱에 허용되는 날짜 범위는 `0000-01-01`에서 `9999-12-31`까지입니다.
+ String - 작은따옴표 또는 큰따옴표로 묶인 문자열 리터럴입니다.
+ Char - 길이가 1\$1255자로 지정된 고정 길이 문자 데이터입니다(예: char(10)).
+ Varchar - 길이가 1\$165535자로 지정된 가변 길이 문자 데이터입니다(예: varchar(10)).
+ 숫자 - int, bigint, long, tinyint, smallint

숫자, 문자열, 날짜 데이터 유형에 대한 인덱스는 =, >, >=, <, <=, between 연산자를 지원합니다. 인덱싱 솔루션은 현재 `AND` 논리 연산자만 지원합니다. "LIKE", "IN", "OR" 및 "NOT" 연산자가 있는 하위 표현식은 인덱스를 사용하여 필터링하는 표현식에서 무시됩니다. 무시된 하위 표현식에 대한 필터링은 인덱스 필터링을 적용한 후 가져온 파티션에서 수행됩니다.

테이블에 추가된 각 파티션에 대해 해당 인덱스 항목이 생성됩니다. 'n'개의 파티션이 있는 테이블의 경우 1개의 파티션 인덱스는 'n'개의 파티션 인덱스 항목을 생성합니다. 동일한 테이블의 'm' 파티션 인덱스는 'm\$1n' 파티션 인덱스 항목이 됩니다. 각 파티션 인덱스 항목은 데이터 카탈로그 스토리지에 대한 현재 AWS Glue 가격 정책에 따라 요금이 부과됩니다. 스토리지 객체 요금에 대한 자세한 내용은 [AWS Glue 요금](https://aws.amazon.com/glue/pricing/)을 참조하세요.

## 파티션 인덱스로 테이블 생성
<a name="partition-index-creating-table"></a>

테이블 생성 중 파티션 인덱스를 생성할 수 있습니다. `CreateTable` 요청은 [`PartitionIndex` 객체](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-PartitionIndex) 목록을 입력으로 사용합니다. 지정된 테이블에 최대 3개의 파티션 인덱스를 생성할 수 있습니다. 각 파티션 인덱스에는 테이블에 대해 정의된 이름과 `partitionKeys` 목록이 필요합니다. 테이블에 생성된 인덱스는 [`GetPartitionIndexes` API](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-GetPartitionIndexes)를 사용하여 가져올 수 있습니다.

## 기존 테이블에 파티션 인덱스 추가
<a name="partition-index-existing-table"></a>

파티션 인덱스를 기존 테이블에 추가하려면 `CreatePartitionIndex` 작업을 사용합니다. 단, `CreatePartitionIndex` 작업당 `PartitionIndex` 하나를 생성할 수 있습니다. 인덱스가 생성되는 동안 테이블을 계속 사용할 수 있으므로 인덱스를 추가해도 테이블의 가용성에는 영향이 없습니다.

추가된 파티션의 인덱스 상태는 CREATING으로 설정되고 인덱스 데이터 생성이 시작됩니다. 인덱스 생성 프로세스가 성공하면 indexStatus가 ACTIVE로 업데이트되고 실패한 프로세스에 대해 인덱스 상태가 FAILED로 업데이트됩니다. 인덱스 생성은 여러 가지 이유로 실패할 수 있으며 `GetPartitionIndexes` 작업을 사용하여 실패 세부 정보를 검색할 수 있습니다. 가능한 실패는 다음과 같습니다.
+ ENCRYPTED\$1PARTITION\$1ERROR - 암호화된 파티션이 있는 테이블에 대한 인덱스 생성은 지원되지 않습니다.
+ INVALID PARTITION TYPE DATA\$1ERROR - `partitionKey` 값이 해당 `partitionKey` 데이터 유형에 대해 유효한 값이 아닐 때 관찰됩니다. 예: 'int' 데이터 유형을 가진 `partitionKey`는 'foo' 값을 갖습니다.
+ MISSING PARTITION VALUE\$1ERROR - `indexedKey`에 대한 `partitionValue`가 없을 때 관찰됩니다. 이는 테이블이 일관되게 분할되지 않은 경우에 발생할 수 있습니다.
+ UNSUPPORTED\$1PARTITION\$1CHARACTER\$1ERROR - 인덱싱된 파티션 키의 값에 \$1u0000, \$1u0001 또는 \$1u0002 문자가 포함될 때 관찰됩니다.
+ INTERNAL\$1ERROR - 인덱스를 생성하는 동안 내부 오류가 발생했습니다.

## 테이블의 파티션 인덱스 설명
<a name="partition-index-describing"></a>

테이블에 생성된 파티션 인덱스를 가져오려면 `GetPartitionIndexes` 연산을 사용합니다. 응답은 현재 각 인덱스 상태(`IndexStatus`)와 함께 테이블의 모든 인덱스를 반환합니다.

파티션 인덱스의 `IndexStatus`는 다음 중 하나가 됩니다.
+ `CREATING` - 현재 인덱스를 생성 중이며, 아직 사용할 수 없습니다.
+ `ACTIVE` - 인덱스를 사용할 준비가 되었습니다. 요청은 인덱스를 사용하여 최적화된 쿼리를 수행할 수 있습니다.
+ `DELETING` - 현재 인덱스를 삭제하고 있으며 더 이상 사용할 수 없습니다. 활성 상태의 인덱스는 상태를 ACTIVE에서 DELETING으로 이동하는 `DeletePartitionIndex` 요청을 사용하여 삭제할 수 있습니다.
+ `FAILED` - 기존 테이블에 대한 인덱스 생성에 실패했습니다. 각 테이블은 마지막 10개의 실패한 인덱스를 저장합니다.

기존 테이블에 생성된 인덱스의 가능한 상태 전환은 다음과 같습니다.
+ CREATING → ACTIVE → DELETING
+ CREATING → FAILED

## 파티션 인덱스 사용에 대한 제한 사항
<a name="partition-index-limitations"></a>

파티션 인덱스를 생성한 후에는 테이블 및 파티션 기능에 대한 다음 변경 사항을 확인합니다.

**새 파티션 생성(인덱스 추가 후)**  
테이블에 파티션 인덱스가 생성된 후 테이블에 추가된 모든 새 파티션은 인덱싱된 키에 대한 데이터 유형 검사에 대해 검증됩니다. 인덱싱된 키의 파티션 값은 데이터 유형 포맷에 대해 검증됩니다. 데이터 유형 검사가 실패하면 파티션 생성 작업이 실패합니다. *sales\$1data* 테이블의 경우 범주가 `string` 유형이고 연도가 `int` 유형인 키(category, year)에 대한 인덱스가 생성되면 YEAR 값이 "foo"인 새 파티션 생성이 실패합니다.

인덱스가 사용되면 U\$10000, U\$100001 및 U\$10002 문자가 있는 인덱스 키 값이 있는 파티션 추가가 실패하기 시작합니다.

**테이블 업데이트**  
테이블에 파티션 인덱스가 생성되면 기존 파티션 키의 파티션 키 이름을 수정할 수 없으며 인덱스에 등록된 키의 유형이나 순서를 변경할 수 없습니다.

## 최적화된 GetPartitions 호출에 인덱스 사용
<a name="partition-index-getpartitions"></a>

인덱스가 있는 테이블에서 `GetPartitions`를 호출할 때 표현식을 포함할 수 있으며 해당하는 경우 Data Catalog는 가능한 경우 인덱스를 사용합니다. 인덱스의 첫 번째 키는 필터링에 사용할 인덱스에 대한 표현식에 전달되어야 합니다. 필터링의 인덱스 최적화는 최선의 노력으로 적용됩니다. Data Catalog는 가능한 한 인덱스 최적화를 사용하려고 시도하지만 인덱스가 누락되거나 지원되지 않는 연산자의 경우 모든 파티션을 로드하는 기존 구현으로 폴백합니다.

위의 *sales\$1data* 테이블에 대해 인덱스 [Country, Category, Year]를 추가합니다. 표현식에 "Country"가 전달되지 않으면 등록된 인덱스가 인덱스를 사용하여 파티션을 필터링할 수 없습니다. 다양한 쿼리 패턴을 지원하기 위해 최대 3개의 인덱스를 추가할 수 있습니다.

몇 가지 예제 표현식을 사용하여 인덱스가 어떻게 작동하는지 살펴보겠습니다.


| Expressions | 인덱스 사용 방법 | 
| --- | --- | 
|  Country = 'US'  |  파티션을 필터링하는 데 인덱스가 사용됩니다.  | 
|  Country = 'US' 및 Category = 'Shoes'  |  파티션을 필터링하는 데 인덱스가 사용됩니다.  | 
|  Category = 'Shoes'  |  표현식에 "country"가 제공되지 않으므로 인덱스는 사용되지 않습니다. 응답을 반환하기 위해 모든 파티션이 로드됩니다.  | 
|  Country = 'US', Category = 'Shoes' 및 Year > '2018'  |  파티션을 필터링하는 데 인덱스가 사용됩니다.  | 
|  Country = 'US', Category = 'Shoes', Year > '2018' 및 month = 2  |  country = "US", category = "shoes", year > 2018인 모든 파티션을 가져오는 데 인덱스가 사용됩니다. 그런 다음 월 표현식에 대한 필터링이 수행됩니다.  | 
|  Country = 'US' AND Category = 'Shoes' OR Year > '2018'  |  표현식에 `OR` 연산자가 있으므로 인덱스가 사용되지 않습니다.  | 
|  Country = 'US' AND Category = 'Shoes' AND (Year = 2017 OR Year = '2018')  |  country = "US" 및 category = "shoes"인 모든 파티션을 가져오는 데 인덱스가 사용된 다음 연도 표현식에 대한 필터링이 수행됩니다.  | 
|  Country in ('US', 'UK') AND Category = 'Shoes'  |  `IN` 연산자는 현재 지원되지 않으므로 필터링에 인덱스가 사용되지 않습니다.  | 
|  Country = 'US' AND Category in ('Shoes', 'Books')  |  country = "US"인 모든 파티션을 가져오는 데 인덱스가 사용된 다음 범주 표현식에 대한 필터링이 수행됩니다.  | 
|  Country = 'US' AND Category in ('Shoes', 'Books') AND (creationDate > '2023-9-01'  |  country = "US" 및 creationDate > '2023-9-01'인 모든 파티션을 가져오는 데 인덱스가 사용된 다음 범주 표현식에 대한 필터링이 수행됩니다.  | 

## 엔진과의 통합
<a name="partition-index-integration-engines"></a>

Redshift Spectrum, Amazon EMR 및 AWS Glue ETL Spark DataFrames는 인덱스가 AWS Glue에서 ACTIVE 상태인 후 파티션을 가져 오기 위해 인덱스를 사용할 수 있습니다. [Athena](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index) 및 [AWS Glue ETL 동적 프레임](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-cat-predicates)에서 쿼리 개선을 위해 인덱스를 활용하려면 추가 단계를 따라야 합니다.

### 파티션 필터링 사용 설정
<a name="enable-partition-filtering-athena"></a>

Athena에서 파티션 필터링을 사용하려면 다음과 같이 테이블 속성을 업데이트해야 합니다.

1. AWS Glue 콘솔의 **데이터 카탈로그**에서 **테이블**을 선택합니다.

1.  테이블을 선택합니다.

1. **작업**에서 **테이블 편집**을 선택합니다.

1. **테이블 속성**에서 다음을 추가합니다.
   + 키 - `partition_filtering.enabled`
   + 값 - `true`

1. **Apply(적용)**를 선택합니다.

또는 Athena에서 [ALTER TABLE SET PROPERTIES](https://docs.aws.amazon.com/athena/latest/ug/alter-table-set-tblproperties.html) 쿼리를 실행하여 이 파라미터를 설정할 수도 있습니다.

```
ALTER TABLE partition_index.table_with_index
SET TBLPROPERTIES ('partition_filtering.enabled' = 'true')
```

## 크롤러를 사용하여 수동으로 생성된 Data Catalog 테이블 업데이트
<a name="update-manual-tables"></a>

AWS Glue Data Catalog 테이블을 수동으로 생성한 다음 AWS Glue 크롤러를 사용하여 업데이트된 상태로 유지할 수 있습니다. 일정에 따라 실행되는 크롤러는 새 파티션을 추가하고 스키마 변경 내용으로 테이블을 업데이트할 수 있습니다. 이는 Apache Hive 메타스토어에서 마이그레이션된 테이블에도 적용됩니다.

이렇게 하려면 크롤러를 정의할 때 하나 이상의 데이터 스토어를 크롤의 원본으로 지정하는 대신 하나 이상의 기존 Data Catalog 테이블을 지정합니다. 그런 다음 크롤러는 카탈로그 테이블에 지정된 데이터 스토어를 크롤합니다. 이 경우 새 테이블이 생성되지 않습니다. 대신 수동으로 생성된 테이블이 업데이트됩니다.

카탈로그 테이블을 수동으로 생성하고 카탈로그 테이블을 크롤러 원본으로 지정할 수 있는 다른 이유는 다음과 같습니다.
+ 카탈로그 테이블 이름을 선택하고 카탈로그 테이블 이름 지정 알고리즘을 사용하지 않습니다.
+ 파티션 감지를 방해할 수 있는 형식의 파일이 데이터 원본 경로에 잘못 저장되는 경우 새 테이블이 생성되지 않도록 합니다.

자세한 내용은 [2단계: 데이터 소스 및 분류자 선택](define-crawler-choose-data-sources.md) 섹션을 참조하세요.

## 데이터 카탈로그 테이블 속성
<a name="table-properties"></a>

 AWS CLI에 알려진 테이블 속성 또는 매개 변수는 검증되지 않은 키 및 값 문자열입니다. 테이블에서 사용자 고유의 속성을 설정하여 AWS Glue 외부에서 데이터 카탈로그를 사용할 수 있도록 지원할 수 있습니다. 데이터 카탈로그를 사용하는 다른 서비스도 마찬가지일 수 있습니다. AWS Glue는 작업 또는 크롤러를 실행할 때 일부 테이블 속성을 설정합니다. 달리 설명하지 않는 한 이러한 속성은 내부용이므로 현재 형태로 계속 존재하도록 지원하지 않으며, 이러한 속성을 수동으로 변경하는 경우 제품 작동을 지원하지 않습니다.

 AWS Glue 크롤러가 설정하는 테이블 속성에 대한 자세한 내용은 [크롤러가 데이터 카탈로그 테이블에 설정한 파라미터](table-properties-crawler.md)을 참조하세요.

# Amazon S3 Tables와 통합
<a name="glue-federation-s3tables"></a>

AWS Glue Data Catalog와 Amazon S3 Tables 통합을 통해 단일 카탈로그를 사용하여 S3 Tables를 검색 및 쿼리하고 Amazon S3 데이터 레이크의 데이터와 조인할 수 있습니다. S3 Tables를 Data Catalog와 통합하면 서비스는 S3 Tables 리소스를 카탈로그 객체에 매핑하는 페더레이션 AWS Glue 카탈로그 구조를 생성합니다.
+ S3 테이블 버킷은 Data Catalog에서 카탈로그가 됩니다.
+ S3 네임스페이스는 AWS Glue 데이터베이스가 됨
+ S3 테이블은 AWS Glue 테이블이 됨

## 액세스 제어
<a name="s3-tables-access-controls"></a>

Data Catalog는 S3 Tables 통합을 위해 두 가지 액세스 제어 모드를 지원합니다.
+ **IAM 액세스 제어** - IAM 정책을 사용하여 S3 Tables와 Data Catalog에 대한 액세스를 제어합니다. 이 접근 방식에서는 리소스에 액세스하려면 S3 Tables 리소스와 Data Catalog 객체 모두에 대한 IAM 권한이 필요합니다.
+ **AWS Lake Formation 액세스 제어** - AWS Glue IAM 권한 외에도 AWS Lake Formation 권한 부여를 사용하여 Data Catalog를 통해 S3 Tables에 대한 액세스를 제어합니다. 이 모드에서는 위탁자가 Data Catalog와 상호 작용하기 위해 IAM 권한이 필요하며, AWS Lake Formation 권한 부여를 통해 위탁자가 액세스할 수 있는 카탈로그 리소스(데이터베이스, 테이블, 열, 행)가 결정됩니다. 이 모드는 대략적인 액세스 제어(데이터베이스 수준 및 테이블 수준 권한 부여)와 세밀한 액세스 제어(열 수준 및 행 수준 보안) 모두 지원합니다. 등록된 역할이 구성되고 자격 증명 벤딩이 활성화된 경우 AWS Lake Formation이 등록된 역할을 사용하여 위탁자를 대신해 자격 증명을 벤딩하므로 위탁자에 대한 S3 Tables IAM 권한이 필요하지 않습니다. AWS Lake Formation 액세스 제어는 타사 분석 엔진에 대한 자격 증명 벤딩도 지원합니다. 자세한 내용은 *AWS Lake Formation 개발자 안내서*의 [S3 Tables 카탈로그 생성](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html)을 참조하세요.

요구 사항이 변화함에 따라 액세스 제어 모드 간 마이그레이션이 가능합니다.

## 자동 탑재를 위한 카탈로그 계층 구조
<a name="s3-tables-catalog-hierarchy"></a>

Amazon S3 관리 콘솔을 사용하여 S3 Tables를 Data Catalog와 통합하면 콘솔은 해당 AWS 리전의 계정 내 Data Catalog에 `s3tablescatalog`라는 페더레이션 카탈로그를 생성합니다. 이 페더레이션 카탈로그는 해당 계정과 리전의 모든 기존 및 향후 S3 테이블 버킷에 대한 상위 카탈로그 역할을 합니다. 이 통합은 Amazon S3 테이블 버킷 리소스를 다음 계층 구조로 매핑합니다.
+ **페더레이션 카탈로그** - `s3tablescatalog`(자동으로 생성됨)
+ **하위 카탈로그** - 각 S3 테이블 버킷이 `s3tablescatalog` 아래의 하위 카탈로그가 됩니다.
+ **데이터베이스** - 테이블 버킷 내의 각 S3 네임스페이스가 데이터베이스가 됩니다.
+ **테이블** - 네임스페이스 내의 각 S3 테이블이 테이블이 됩니다.

예를 들어, ‘sales’ 네임스페이스에 ‘transactions’ 테이블이 포함된 ‘analytics-bucket’이라는 S3 테이블 버킷이 있는 경우 Data Catalog에서의 전체 경로는 `s3tablescatalog/analytics-bucket/sales/transactions`입니다.

이 4단계 계층 구조는 S3 Tables와 Data Catalog가 동일한 AWS 계정에 있는 동일한 계정 시나리오에 적용됩니다. 교차 계정 시나리오의 경우 Data Catalog에 개별 S3 테이블 버킷을 수동으로 탑재하면 3단계 계층 구조가 생성됩니다.

## 지원되는 리전:
<a name="s3-tables-supported-regions"></a>

다음 AWS 리전에서 Data Catalog와 S3 Tables 통합을 사용할 수 있습니다.


| 리전 코드 | 리전 이름 | 
| --- | --- | 
| us-east-1 | 미국 동부(버지니아 북부) | 
| us-east-2 | 미국 동부(오하이오) | 
| us-west-1 | 미국 서부(캘리포니아 북부) | 
| us-west-2 | 미국 서부(오리건) | 
| af-south-1 | 아프리카(케이프타운) | 
| ap-east-1 | 아시아 태평양(홍콩) | 
| ap-east-2 | 아시아 태평양(타이베이) | 
| ap-northeast-1 | 아시아 태평양(도쿄) | 
| ap-northeast-2 | 아시아 태평양(서울) | 
| ap-northeast-3 | 아시아 태평양(오사카) | 
| ap-south-1 | 아시아 태평양(뭄바이) | 
| ap-south-2 | 아시아 태평양(하이데라바드) | 
| ap-southeast-1 | 아시아 태평양(싱가포르) | 
| ap-southeast-2 | 아시아 태평양(시드니) | 
| ap-southeast-3 | 아시아 태평양(자카르타) | 
| ap-southeast-4 | 아시아 태평양(멜버른) | 
| ap-southeast-5 | 아시아 태평양(말레이시아) | 
| ap-southeast-6 | 아시아 태평양(뉴질랜드) | 
| ap-southeast-7 | 아시아 태평양(태국) | 
| ca-central-1 | 캐나다(중부) | 
| ca-west-1 | 캐나다 서부(캘거리) | 
| eu-central-1 | 유럽(프랑크푸르트) | 
| eu-central-2 | 유럽(취리히) | 
| eu-north-1 | 유럽(스톡홀름) | 
| eu-south-1 | 유럽(밀라노) | 
| eu-south-2 | 유럽(스페인) | 
| eu-west-1 | 유럽(아일랜드) | 
| eu-west-2 | 유럽(런던) | 
| eu-west-3 | 유럽(파리) | 
| il-central-1 | 이스라엘(텔아비브) | 
| mx-central-1 | 멕시코(중부) | 
| sa-east-1 | 남아메리카(상파울루) | 

**Topics**
+ [액세스 제어](#s3-tables-access-controls)
+ [자동 탑재를 위한 카탈로그 계층 구조](#s3-tables-catalog-hierarchy)
+ [지원되는 리전:](#s3-tables-supported-regions)
+ [사전 조건](s3tables-catalog-prerequisites.md)
+ [Data Catalog와 S3 Tables 통합 활성화](enable-s3-tables-catalog-integration.md)
+ [S3 Tables 카탈로그에 데이터베이스 및 테이블 추가](create-databases-tables-s3-catalog.md)
+ [S3 Tables 카탈로그 객체 공유](share-s3-tables-catalog.md)
+ [S3 Tables 통합 관리](manage-s3-tables-catalog-integration.md)

# 사전 조건
<a name="s3tables-catalog-prerequisites"></a>

AWS Glue Data Catalog에서 S3 Tables에 대한 페더레이션 카탈로그를 생성하기 전에 IAM 위탁자(사용자 또는 역할)에게 필요한 권한이 있는지 확인합니다.

## 필수 IAM 권한
<a name="s3tables-required-iam-permissions"></a>

S3 Tables 통합을 활성화하려면 IAM 위탁자에게 다음 권한이 필요합니다.

**AWS Glue 권한**:
+ `glue:CreateCatalog` - `s3tablescatalog` 페더레이션 카탈로그를 생성하는 데 필요합니다.
+ `glue:GetCatalog` - 카탈로그 세부 정보를 보는 데 필요합니다.
+ `glue:GetDatabase` - S3 네임스페이스를 데이터베이스로 보는 데 필요합니다.
+ `glue:GetTable` - S3 테이블을 보는 데 필요합니다.
+ `glue:passConnection` - 직접적으로 호출하는 위탁자에게 AWS Glue 서비스에 대한 `aws:s3tables` 연결을 위임할 수 있는 권한을 부여합니다.

**S3 Tables 권한**(IAM 액세스 제어용):
+ `s3tables:CreateTableBucket`
+ `s3tables:GetTableBucket`
+ `s3tables:CreateNamespace`
+ `s3tables:GetNamespace`
+ `s3tables:ListNamespaces`
+ `s3tables:CreateTable`
+ `s3tables:GetTable`
+ `s3tables:ListTables`
+ `s3tables:UpdateTableMetadataLocation`
+ `s3tables:GetTableMetadataLocation`
+ `s3tables:GetTableData`
+ `s3tables:PutTableData`

## IAM 정책 예시
<a name="s3tables-iam-policy-example"></a>

다음 IAM 정책은 IAM 모드에서 Data Catalog와의 S3 Tables 통합을 활성화하는 데 필요한 최소 권한을 제공합니다.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GlueDataCatalogPermissions",
      "Effect": "Allow",
      "Action": [
        "glue:CreateCatalog",
        "glue:GetCatalog",
        "glue:GetDatabase",
        "glue:GetTable"
      ],
      "Resource": [
        "arn:aws:glue:region:account-id:catalog/s3tablescatalog",
        "arn:aws:glue:region:account-id:database/s3tablescatalog/*/*",
        "arn:aws:glue:region:account-id:table/s3tablescatalog/*/*/*"
      ]
    },
    {
      "Sid": "S3TablesDataAccessPermissions",
      "Effect": "Allow",
      "Action": [
        "s3tables:GetTableBucket",
        "s3tables:GetNamespace",
        "s3tables:GetTable",
        "s3tables:GetTableMetadataLocation",
        "s3tables:GetTableData"
      ],
      "Resource": [
        "arn:aws:s3tables:region:account-id:bucket/*",
        "arn:aws:s3tables:region:account-id:bucket/*/table/*"
      ]
    }
  ]
}
```

# Data Catalog와 S3 Tables 통합 활성화
<a name="enable-s3-tables-catalog-integration"></a>

Amazon S3 관리 콘솔이나 AWS CLI를 사용하여 AWS Glue Data Catalog와 S3 Tables 통합을 활성화할 수 있습니다. 콘솔을 사용하여 통합을 활성화하면 AWS는 AWS 계정 및 리전의 모든 S3 테이블 버킷을 자동으로 검색하고 탑재하는 `s3tablescatalog`라는 페더레이션 카탈로그를 생성합니다.

## Amazon S3 관리 콘솔을 사용하여 S3 Tables 통합 활성화
<a name="enable-s3-tables-console"></a>

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **테이블 버킷**을 선택합니다.

1. **테이블 버킷 생성**을 선택합니다.

1. **테이블 버킷 이름**을 입력하고 **통합 활성화** 확인란이 선택되어 있는지 확인합니다.

1. **테이블 버킷 생성**을 선택합니다.

Amazon S3는 해당 리전에서 테이블 버킷을 자동으로 통합합니다. 어떤 리전에서든 테이블 버킷을 처음 통합할 때 Amazon S3는 해당 리전의 Data Catalog에 `s3tablescatalog`를 생성합니다.

카탈로그가 생성된 후 계정과 리전의 모든 S3 테이블 버킷이 하위 카탈로그로 자동 탑재됩니다. Data Catalog에서 카탈로그로 이동하여 데이터베이스(네임스페이스)와 테이블을 볼 수 있습니다.

## AWS CLI를 사용하여 S3 Tables 통합 활성화
<a name="enable-s3-tables-cli"></a>

`s3tablescatalog` 명령을 사용하여 `glue create-catalog` 카탈로그를 생성합니다.

```
aws glue create-catalog \
  --name "s3tablescatalog" \
  --catalog-input '{
    "Description": "Federated catalog for S3 Tables",
    "FederatedCatalog": {
      "Identifier": "arn:aws:s3tables:region:account-id:bucket/*",
      "ConnectionName": "aws:s3tables"
    },
    "CreateDatabaseDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }],
    "CreateTableDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }]
  }'
```

*region*을 AWS 리전으로 바꾸고 *account-id*를 AWS 계정 ID로 바꿉니다.

## 통합 확인
<a name="verify-s3-tables-integration"></a>

카탈로그를 생성한 후 하위 카탈로그를 나열하여 S3 테이블 버킷이 탑재되었는지 확인할 수 있습니다.

```
aws glue get-catalogs \
  --parent-catalog-id s3tablescatalog
```

# S3 Tables 카탈로그에 데이터베이스 및 테이블 추가
<a name="create-databases-tables-s3-catalog"></a>

리전의 Data Catalog에 카탈로그, 데이터베이스 및 테이블을 나열하고 생성하는 데 필요한 권한이 있는지 확인합니다. AWS 계정 및 리전에서 S3 Tables 통합이 활성화되어 있는지 확인합니다.

## S3 Tables 카탈로그에 데이터베이스 추가
<a name="add-database-s3-tables-catalog"></a>

### 데이터베이스 추가(콘솔)
<a name="add-database-s3-tables-console"></a>

1. [https://console.aws.amazon.com/glue/home](https://console.aws.amazon.com/glue/home)에서 AWS Glue 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **데이터베이스**를 선택합니다.

1. **데이터베이스 추가**를 선택합니다.

1. **S3 Tables 페더레이션 카탈로그에서 Glue 데이터베이스**를 선택합니다.

1. 데이터베이스의 고유한 이름을 입력합니다.

1. S3 Tables의 테이블 버킷에 매핑되는 대상 카탈로그를 선택합니다.

1. **데이터베이스 생성**을 선택합니다.

### 데이터베이스 추가(AWS CLI)
<a name="add-database-s3-tables-cli"></a>

```
aws glue create-database \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-input '{"Name": "my-database"}'
```

## S3 Tables 카탈로그에 테이블 추가
<a name="add-table-s3-tables-catalog"></a>

### 테이블 추가(콘솔)
<a name="add-table-s3-tables-console"></a>

1. [https://console.aws.amazon.com/glue/home](https://console.aws.amazon.com/glue/home)에서 AWS Glue 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **테이블**을 선택합니다.

1. 카탈로그 드롭다운에서 적절한 S3 Tables 카탈로그를 선택합니다.

1. **테이블 추가**를 선택합니다.

1. 테이블의 고유한 이름을 입력합니다.

1. 카탈로그 드롭다운에서 올바른 S3 Tables 카탈로그가 선택되어 있는지 확인합니다.

1. 데이터베이스 드롭다운에서 데이터베이스를 선택합니다.

1. JSON을 입력하거나 각 열을 개별적으로 추가하여 테이블 스키마를 입력합니다.

1. **테이블 생성**을 선택합니다.

### 테이블 추가(AWS CLI)
<a name="add-table-s3-tables-cli"></a>

```
aws glue create-table \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-name "my-database" \
  --table-input '{
    "Name": "my-table",
    "Parameters": {
      "classification": "",
      "format": "ICEBERG"
    },
    "StorageDescriptor": {
      "Columns": [
        {"Name": "id", "Type": "int", "Parameters": {}},
        {"Name": "val", "Type": "string", "Parameters": {}}
      ]
    }
  }'
```

# S3 Tables 카탈로그 객체 공유
<a name="share-s3-tables-catalog"></a>

IAM 액세스 제어를 사용하는 경우 동일 계정 공유를 위한 AWS Glue 리소스 링크를 사용하여 다른 사용자와 S3 Tables 카탈로그 객체를 공유할 수 있습니다. 교차 계정 공유의 경우 다른 AWS 계정과 S3 테이블 버킷을 공유할 수 있으며 수신자 계정의 IAM 역할 또는 사용자는 공유 테이블 버킷을 사용하여 AWS Glue 카탈로그 객체를 생성할 수 있습니다.

## 리소스 링크를 사용하여 동일한 계정 내에서 공유
<a name="share-s3-tables-resource-links"></a>

리소스 링크를 사용하여 AWS Glue 기본 카탈로그에 표시되는 `s3tablescatalog`의 AWS Glue 데이터베이스 및 테이블에 대한 참조를 생성할 수 있습니다. 이는 데이터 액세스를 구성하거나 테이블의 논리적 그룹을 생성하는 데 유용합니다.

### 리소스 링크 생성(콘솔)
<a name="share-s3-tables-resource-link-console"></a>

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 엽니다.

1. 탐색 창에서 **카탈로그**를 선택합니다.

1. **카탈로그** 목록에서 **s3tablescatalog**를 선택합니다.

1. `s3tablescatalog`에서 공유하려는 테이블을 선택합니다.

1. **작업**을 선택하고 **리소스 링크 생성**을 선택합니다.

1. **리소스 링크 이름**에서 리소스 링크의 이름을 입력합니다.

1. **대상 데이터베이스**에서 리소스 링크를 생성하려는 데이터베이스를 선택합니다.

1. (선택 사항) **설명**에 설명을 입력합니다.

1. **생성(Create)**을 선택합니다.

리소스 링크가 대상 데이터베이스에 표시되며 `s3tablescatalog`에 있는 원본 테이블을 가리킵니다.

### 리소스 링크 생성(AWS CLI)
<a name="share-s3-tables-resource-link-cli"></a>

데이터베이스 리소스 링크 생성:

```
aws glue create-database \
  --database-name "my-database-resource-link" \
  --database-input '{
    "Name": "sales_data_link",
    "TargetDatabase": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales"
    }
  }'
```

테이블 리소스 링크 생성:

```
aws glue create-table \
  --table-name "my-table-resource-link" \
  --table-input '{
    "Name": "sales_data_link",
    "TargetTable": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales",
      "Name": "transactions"
    }
  }'
```

# S3 Tables 통합 관리
<a name="manage-s3-tables-catalog-integration"></a>

## AWS Lake Formation 활성화
<a name="manage-s3-tables-enable-lf"></a>

데이터 거버넌스 요구 사항을 확장하려는 경우 S3 Tables 카탈로그에 대해 AWS Lake Formation을 활성화할 수 있습니다. AWS Lake Formation은 데이터베이스 스타일 권한 부여를 제공하여 세밀한 액세스를 관리하고, 태그 기반 액세스를 사용하여 권한 규모를 조정하고, S3 Tables의 테이블에 대한 그룹 연결과 같은 사용자 속성을 기반으로 권한을 부여합니다.

AWS Lake Formation 관리 콘솔로 이동하여 AWS Glue에서 S3 Tables 카탈로그에 대해 AWS Lake Formation을 활성화합니다. 자세한 내용은 *AWS Lake Formation 개발자 안내서*의 [S3 Tables 카탈로그 생성](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html)을 참조하세요.

## S3 Tables 통합 삭제
<a name="manage-s3-tables-delete-integration"></a>

Data Catalog에서 카탈로그 통합을 삭제하여 S3 Tables 통합을 삭제할 수 있습니다. 이 작업은 Data Catalog의 메타데이터만 삭제하며 S3 Tables의 리소스는 삭제하지 않습니다.

AWS Glue에서 카탈로그 객체를 나열, 편집 및 삭제하는 데 필요한 권한이 있는지 확인합니다.

### 통합 삭제(콘솔)
<a name="delete-s3-tables-console"></a>

1. [https://console.aws.amazon.com/glue/home](https://console.aws.amazon.com/glue/home)에서 AWS Glue 콘솔을 엽니다.

1. 탐색 창에서 **카탈로그**를 선택합니다.

1. **카탈로그** 목록에서 **s3tablescatalog**를 선택합니다.

1. **삭제**를 선택합니다.

1. 카탈로그를 삭제하면 Data Catalog의 연결된 카탈로그 객체도 모두 삭제되는지 확인합니다.

1. **삭제**를 선택합니다.

### 통합 삭제(AWS CLI)
<a name="delete-s3-tables-cli"></a>

```
aws glue delete-catalog \
  --region region \
  --catalog-id "s3tablescatalog"
```

# 다른 AWS 서비스와 통합
<a name="populate-dc-other-services"></a>

 AWS Glue 크롤러를 사용하여 AWS Glue Data Catalog를 채울 수 있지만 데이터 카탈로그와 자동으로 통합되어 채울 수 있는 여러 AWS 서비스가 있습니다. 다음 섹션에서는 AWS 서비스가 지원하며 데이터 카탈로그를 채울 수 있는 특정 사용 사례에 대한 자세한 정보를 제공합니다.

**Topics**
+ [AWS Lake Formation](#lf-dc)
+ [Amazon Athena](#ate-dc)

## AWS Lake Formation
<a name="lf-dc"></a>

 AWS Lake Formation은 AWS에서 안전한 데이터 레이크를 더 쉽게 설정할 수 있게 해주는 서비스입니다. Lake Formation은 AWS Glue에 기반하며, Lake Formation과 AWS Glue는 동일한 AWS Glue Data Catalog를 공유합니다. Amazon S3 데이터 위치를 Lake Formation에 등록하고, Lake Formation 콘솔을 사용하여 AWS Glue 데이터 카탈로그에 데이터베이스 및 테이블을 생성하고, 데이터 액세스 정책을 정의하고, 중앙에서 데이터 레이크 전체의 데이터 액세스를 감사할 수 있습니다. Lake Formation의 세분화된 액세스 제어를 사용하여 기존 데이터 카탈로그 리소스와 Amazon S3 데이터 위치를 관리할 수 있습니다.

Lake Formation에 데이터를 등록하면 IAM 보안 주체, AWS 계정, AWS 조직 및 조직 단위 간에서 데이터 카탈로그 리소스를 안전하게 공유할 수 있습니다.

 Lake Formation을 사용하여 데이터 카탈로그 리소스를 생성하는 방법에 대한 자세한 내용은 AWS Lake Formation 개발자 안내서의 [데이터 카탈로그 테이블 및 데이터베이스 생성](https://docs.aws.amazon.com/lake-formation/latest/dg/populating-catalog.html)을 참조하세요.

## Amazon Athena
<a name="ate-dc"></a>

 Amazon Athena는 데이터 카탈로그를 사용하여 AWS 계정의 Amazon S3 데이터에 대한 테이블 메타데이터를 저장하고 검색합니다. Athena 쿼리 엔진은 데이블 메타데이터를 통해 쿼리하려는 데이터를 찾고, 읽고, 처리할 방법을 파악합니다.

 Athena `CREATE TABLE` 문을 직접 사용하여 AWS Glue Data Catalog를 채울 수 있습니다. 크롤러를 실행할 필요 없이 데이터 카탈로그에서 스키마 및 파티션 메타데이터를 수동으로 정의하고 채울 수 있습니다.

1. Athena 콘솔에서 데이터 카탈로그에 테이블 메타데이터를 저장할 데이터베이스를 생성합니다.

1. `CREATE EXTERNAL TABLE` 문을 사용하여 데이터 소스의 스키마를 정의합니다.

1. 데이터가 분할된 경우 `PARTITIONED BY` 절을 사용하여 파티션 키를 정의합니다.

1. `LOCATION` 절을 사용하여 실제 데이터 파일이 저장되는 Amazon S3 경로를 지정합니다.

1. `CREATE TABLE` 문을 실행하세요.

    이 쿼리는 데이터를 실제로 크롤링하지 않고 정의된 스키마와 파티션을 기반으로 데이터 카탈로그에 테이블 메타데이터를 생성합니다.

이제 Athena에서 이 테이블을 쿼리하면 데이터 카탈로그의 메타데이터를 사용하여 Amazon S3의 데이터 파일에 액세스하고 쿼리합니다.

 자세한 내용은 Amazon Athena 사용 설명서의 [데이터베이스 및 테이블 생성](https://docs.aws.amazon.com/athena/latest/ug/work-with-data.html)을 참조하세요.

# 데이터 카탈로그 설정
<a name="console-data-catalog-settings"></a>

 데이터 카탈로그 설정에는 계정의 데이터 카탈로그에 대한 암호화 및 사용 권한 옵션을 설정하는 옵션이 있습니다.

![\[스크린샷은 데이터 카탈로그 설정 모달을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/data_catalog_settings.png)


**Data Catalog의 세분화된 액세스 제어를 변경하려면**

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

1.  암호화 옵션을 선택합니다.
   +  **메타데이터 암호화** - 이 확인란을 선택하여 데이터 카탈로그의 메타데이터를 암호화합니다. 메타데이터는 지정된 AWS Key Management Service(AWS KMS) 키를 사용하여 암호화됩니다. 자세한 내용은 [데이터 카탈로그 암호화](encrypt-glue-data-catalog.md) 섹션을 참조하세요.
   +  **연결 암호 암호화** - 이 확인란을 선택하여 연결이 생성되거나 업데이트될 때 AWS Glue 연결 객체의 암호를 암호화할 수 있습니다. 암호는 지정한 AWS KMS 키를 사용하여 암호화됩니다. 암호가 반환될 때 암호화됩니다. 이 옵션은 Data Catalog의 모든 AWS Glue 연결에 대한 전역 설정입니다. 이 확인란을 선택 취소하면 이전에 암호화된 암호가 생성되었거나 업데이트되었을 때 사용된 키를 사용하여 암호화된 상태로 유지됩니다. AWS Glue 연결에 대한 자세한 정보는 [데이터에 연결](glue-connections.md) 섹션을 참조하세요.

     이 옵션을 활성화하는 경우 AWS KMS 키를 선택하거나 **Enter a key ARN(키 ARN 입력)**을 선택하고 키에 대한 Amazon 리소스 이름(ARN)을 제공합니다. ` arn:aws:kms:region:account-id:key/key-id ` 형식에 ARN 이름을 입력합니다. 또한 ` arn:aws:kms:region:account-id:alias/alias-name ` 같은 키 별칭으로 ARN을 제공할 수도 있습니다.
**중요**  
 이 옵션이 선택되어 있는 경우 연결을 생성하거나 업데이트하는 사용자 또는 역할에 지정된 KMS 키에 대한 `kms:Encrypt` 권한이 있어야 합니다.

     자세한 내용은 [연결 암호 암호화](encrypt-connection-passwords.md) 섹션을 참조하세요.

1.  [**설정(Settings)**]을 선택하고 [**권한(Permissions)**] 편집기에서 계정에 대한 Data Catalog의 세분화된 액세스 제어를 변경할 정책 설명을 추가합니다. 한 번에 정책 하나만 Data Catalog에 연결할 수 있습니다. JSON 리소스 정책을 이 컨트롤에 붙여 넣을 수 있습니다. 자세한 내용은 [AWS Glue 내의 리소스 기반 정책](security_iam_service-with-iam.md#security_iam_service-with-iam-resource-based-policies) 섹션을 참조하세요.

1.  [**저장(Save)**]을 선택하여 변경 사항으로 Data Catalog를 업데이트합니다.

 또한 AWS Glue API 작업을 사용하여 리소스 정책을 설정하고, 가져오고, 삭제할 수 있습니다. 자세한 내용은 [AWS Glue의 보안 API](aws-glue-api-jobs-security.md) 섹션을 참조하세요.