AWS Glue 크롤러가 여러 테이블을 생성하지 못하도록 하려면 어떻게 해야 하나요?

4분 분량
0

AWS Glue 크롤러가 내 소스 데이터에서 여러 테이블을 생성하고 있으며 이를 방지하고 싶습니다.

간략한 설명

첫 번째 AWS Glue 크롤러가 실행되는 동안 크롤러는 처음 1,000개 레코드 또는 모든 파일의 첫 메가바이트를 읽습니다. 이 작업을 통해 스키마를 추론합니다. 크롤러가 읽는 데이터의 양은 파일 형식과 유효한 레코드의 가용성에 따라 다릅니다.

예를 들어 입력이 JSON 파일인 경우 크롤러는 파일의 처음 1MB를 읽어 스키마를 유추합니다. 크롤러가 파일의 처음 1MB 내에서 유효한 레코드를 읽으면 크롤러는 스키마를 유추합니다. 크롤러가 처음 1MB를 읽은 후 스키마를 유추할 수 없는 경우 최대 10MB의 파일을 읽습니다. 이 작업은 1MB 단위로 수행됩니다.

CSV 파일의 경우 크롤러는 처음 1,000개의 레코드 또는 처음 1MB의 데이터를 읽습니다. Parquet 파일의 경우 크롤러는 파일에서 직접 스키마를 유추합니다.

크롤러는 모든 하위 폴더와 파일에서 유추된 스키마를 비교한 다음 하나 이상의 테이블을 생성합니다.

소스 데이터 파일에서 동일한 구성을 사용하지 않는 경우 AWS Glue 크롤러는 여러 개의 테이블을 생성합니다.

  • 형식(예: CSV, Parquet 또는 JSON)
  • 압축 유형(예: SNAPPY, gzip 또는 bzip2)
  • 스키마
  • Amazon Simple Storage Service(Amazon S3) 파티션의 구조

해결 방법

크롤러 로그 확인

크롤러 로그를 확인하여 크롤러가 여러 테이블을 생성하게 하는 파일을 식별합니다.

1.    AWS Glue 콘솔을 엽니다.

2.    탐색 창에서 Crawlers(크롤러)를 선택합니다.

3.    로그를 검토하려는 크롤러를 선택합니다.

4.    Logs(로그) 링크를 선택하여 Amazon CloudWatch 콘솔에서 로그를 확인합니다.

5.    이전 크롤러 실행 중에 AWS Glue가 여러 테이블을 생성한 경우 로그에 다음 항목과 유사한 항목이 포함됩니다.

[439d6bb5-ce7b-4fb7-9b4d-805346a37f88]
 INFO : Created table 
2_part_00000_24cab769_750d_4ef0_9663_0cc6228ac858_c000_snappy_parquet in
 database glue
[439d6bb5-ce7b-4fb7-9b4d-805346a37f88]
 INFO : Created table 
2_part_00000_3518b196_caf5_481f_ba4f_3e968cbbdd67_c000_snappy_parquet in
 database glue
[439d6bb5-ce7b-4fb7-9b4d-805346a37f88]
 INFO : Created table 
2_part_00000_6d2fffc2_a893_4531_89fa_72c6224bb2d6_c000_snappy_parquet in
 database glue

로그 항목에는 크롤러가 여러 테이블을 만드는 원인이 되는 파일의 이름이 포함됩니다.

여러 테이블 생성 방지

여러 테이블이 생성되지 않도록 하려면 다음 작업 중 하나를 수행합니다.

모든 데이터 파일이 동일한 스키마, 형식, 압축 유형을 사용하는지 확인합니다.

경우에 따라 파일은 서로 다른 스키마를 사용합니다. 예를 들어 스키마 A는 필드 X가 INT 유형이라고 말하고 스키마 B는 필드 X가 BOOL 유형이라고 말할 수 있습니다. 이 사용 사례에서는 다음 작업 중 하나를 수행하세요.

  • AWS Glue 추출, 전환, 적재(ETL) 작업을 실행하여 from_options 함수를 통해 이상치 데이터를 읽습니다. 그런 다음 이상치 데이터 유형을 소스의 올바른 데이터 유형 또는 가장 일반적인 데이터 유형으로 변환합니다.
  • 기존 테이블 DDL을 사용하여 Amazon Athena에서 테이블을 수동으로 생성합니다. 그런 다음 AWS Glue 크롤러를 실행하여 테이블 메타데이터를 업데이트합니다. 크롤러 설정을 사용하여 테이블에서 스키마를 상속합니다.

크롤러를 생성할 때 호환되는 스키마를 결합

크롤러는 폴더 수준에서 스키마를 유추하고 모든 폴더에서 스키마를 비교합니다. 크롤러는 스키마가 일치하고 파티션 임계값이 70%보다 높은지 확인합니다. 일치하는 경우 스키마는 테이블의 파티션으로 표시됩니다. 일치하지 않으면 크롤러가 모든 폴더에 대한 테이블을 생성하여 테이블 수가 더 많아집니다.

데이터의 일부 입력 파일에는 다른 스키마가 있고 다른 파일에는 유사한 스키마가 있을 수 있습니다. 크롤러를 생성할 때 호환되는 스키마를 결합할 수 있습니다. Configure the crawler's output(크롤러 출력 구성) 페이지의 Grouping behavior for S3 data (optional)(S3 데이터에 대한 그룹화 동작(선택 사항))에서 Create a single schema for each S3 path(각 S3 경로에 대한 단일 스키마 생성)를 선택합니다. 이 설정을 활성화하고 데이터가 호환되면 크롤러는 경로에서 Amazon S3 객체를 평가할 때 스키마의 유사성을 무시합니다.

자세한 내용은 각 Amazon S3 포함 경로에 대해 단일 스키마를 생성하는 방법을 참조하세요.

입력 파일에 다른 Amazon S3 경로가 있는지 확인

Amazon S3 접두사 내부의 구조가 일치하지 않는 경우 크롤러는 개별 경로를 개별 테이블로 가정합니다. 그런 다음 크롤러는 여러 테이블을 생성합니다. 입력 파일에 다른 Amazon S3 구조 또는 경로가 있는 경우 크롤러는 여러 테이블을 생성합니다. 이는 크롤러의 기본 동작입니다.

예를 들어 크롤러는 다음 구조와 유사한 파티션 구조로 Amazon S3 경로 s3://doc-example-bucket/doc-example-key/doc-example-table을 크롤링합니다.

  • s3://doc-example-bucket/doc-example-key/doc-example-table/dt=2020-08-20/doc-example-file1.csv
  • s3://doc-example-bucket/doc-example-key/doc-example-table/dt=2020-08-21/dox-example-file2.csv
  • s3://doc-example-bucket/doc-example-key/doc-example-table/dt=2020-08-22/doc-example-file3.csv

이전 세 개의 파일에 다음 추가 파일을 추가합니다.

  • s3://doc-example-bucket/doc-example-key/doc-example-table/dox-example-file4.csv
  • s3:// doc-example-bucket/doc-example-key/doc-example-table/doc-example-file5.csv

그런 다음 크롤러는 또 다른 크롤러 실행에서 5개의 개별 테이블을 생성합니다. 이는 폴더 파티션 구조가 일치하지 않기 때문에 발생합니다.

이 문제를 방지하려면 다음 모범 사례를 검토하세요.

  • 스키마가 수동 또는 프로그래밍 방식으로 일관성이 있는지 확인합니다. 이전 예에서 dt=xxxx-xx-xx 파티션 없이 Amazon S3 파일을 삭제하거나 doc-example-file4.csvdoc-example-file5.csv 파일에 대한 파티션을 추가합니다.
  • exclude pattern(제외 패턴)을 사용하여 원치 않는 파일이나 폴더를 제외합니다.

일관된 헤더 사용

CSV 데이터를 사용할 때는 헤더를 일관되게 사용하세요. 파일 중 일부에는 헤더가 있고 다른 일부는 헤더가 없는 경우 크롤러는 여러 테이블을 생성합니다.


관련 정보

AWS Glue에서 ETL 출력값의 파티션 관리

크롤러 구성 옵션 설정

AWS 공식
AWS 공식업데이트됨 일 년 전