크롤러 동작 사용자 지정 - AWS Glue

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

크롤러 동작 사용자 지정

크롤러가 실행되면 이전 크롤러와 다른 스키마와 파티션을 초래하는 데이터 스토어의 변화가 발생합니다. AWS Management Console 또는 AWS Glue API를 사용하여 크롤러가 특정 변화에 따라 어떤 절차를 밟는지 알아봅니다.

Console

AWS Glue 콘솔을 사용하여 크롤러를 정의하면 크롤러의 행태를 구성할 수 있는 몇 가지 옵션이 있습니다. AWS Glue 콘솔을 사용하여 크롤러를 추가하는 방법에 대한 자세한 내용은 크롤러 구성 단원을 참조하십시오.

이전에 크롤된 데이터 스토어에 반해 크롤러가 실행되면 스키마가 변했거나 데이터 스토어의 어떤 객체가 삭제되었다는 점을 알게 됩니다. 크롤러 로그는 스키마로 변합니다. 크롤러의 원본 유형에 따라 스키마 변경 정책과 상관없이 새 테이블과 파티션이 생성될 수 있습니다.

스키마가 변하면 크롤러가 무엇을 하는지 지정하기 위해서 콘솔의 다음 작업 중 하나를 선택할 수 있습니다.

  • Data Catalog에서 테이블 정의 업데이트 - 새로운 열을 추가하고 누락 열을 제거한 다음 AWS Glue Data Catalog의 기존 열 정의를 수정합니다. 크롤러가 설정하지 않은 메타데이터를 제거합니다. 이것이 기본 설정입니다.

  • 새 열만 추가 – Amazon S3 데이터 스토어의 매핑인 테이블을 위해 새로운 열이 검색되면 추가하지만 Data Catalog에 존재하는 열의 유형을 제거하거나 변형하지 않습니다. Data Catalog의 현재 열이 올바르고 크롤러가 기존 열의 유형을 제거하거나 변하지 않기 원한다면 이 옵션을 선택합니다. 분류, 요약 유형, CSV 구분자 등 기본 Amazon S3 테이블 속성이 변한다면 테이블이 사용되지 않음이라고 표시합니다. Data Catalog에 존재하는 입력 및 출력 포맷을 유지합니다. 크롤러에 설정된 피라미터이면 SerDe 파라미터를 업데이트합니다. 다른 모든 데이터 스토어는 기존 열 정의를 변경합니다.

  • 변경 사항을 무시하고, 에서 테이블을 업데이트하지 않음 – 새로운 테이블과 파티션만이 생성됩니다.

    증분 크롤링에 대한 기본 설정입니다.

크롤러는 새롭고 변한 파티션을 발견할 수 있습니다. 기본적으로 새 파티션이 추가되고 기존 파티션이 변했다면 업데이트됩니다. 또한 AWS Glue 콘솔에서 크롤러 구성 옵션을 [테이블의 메타데이터로 모든 신규 및 기존 파티션 업데이트(Update all new and existing partitions with metadata from the table)]로 설정할 수 있습니다. 이 옵션이 설정되면 파티션은 상위 테이블에서 분류, 입력 포맷, 출력 포맷, SerDe 정보, 스키마 등의 메타데이터 속성을 상속합니다. 테이블 속성의 모든 변경 사항은 파티션으로 전파됩니다. 이 구성 옵션이 기존 크롤러에 설정되면 기존 파티션은 크롤러가 그 다음번에 실행될 때 상위 테이블의 속성과 일치하기 위해서 업데이트됩니다.

삭제된 객체가 데이터 스토어에 존재한다면 크롤러가 무엇을 하는지 지정하기 위해서 다음 작업 중 하나를 선택할 수 있습니다.

  • Data Catalog에서 테이블 및 파티션 삭제

  • 변경 사항을 무시하고 Data Catalog에서 테이블을 업데이트하지 않음

    증분 크롤링에 대한 기본 설정입니다.

  • Data Catalog에서 사용되지 않는 테이블로 표시(Mark the table as deprecated in the Data Catalog) – 이것은 기본 설정입니다.

AWS CLI
aws glue create-crawler \ --name "your-crawler-name" \ --role "your-iam-role-arn" \ --database-name "your-database-name" \ --targets 'S3Targets=[{Path="s3://your-bucket-name/path-to-data"}]' \ --configuration '{"Version": 1.0, "CrawlerOutput": {"Partitions": {"AddOrUpdateBehavior": "InheritFromTable"}, "Tables": {"AddOrUpdateBehavior": "MergeNewColumns"}}}'
API

AWS Glue API를 사용하여 크롤러를 정의하면 크롤러를 구성할 수 있는 몇 가지 필드 중에서 선택할 수 있습니다. 크롤러 API의 SchemaChangePolicy는 스키마가 변하고 객체가 삭제되면 크롤러는 무엇을 할지 결정합니다. 크롤러 로그 스키마가 실행되면서 변합니다.

크롤러 구성 옵션을 보여주는 샘플 Python 코드

import boto3 import json # Initialize a boto3 client for AWS Glue glue_client = boto3.client('glue', region_name='us-east-1') # Replace 'us-east-1' with your desired AWS region # Define the crawler configuration crawler_configuration = { "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }, "Tables": { "AddOrUpdateBehavior": "MergeNewColumns" } } } configuration_json = json.dumps(crawler_configuration) # Create the crawler with the specified configuration response = glue_client.create_crawler( Name='your-crawler-name', # Replace with your desired crawler name Role='crawler-test-role', # Replace with the ARN of your IAM role for Glue DatabaseName='default', # Replace with your target Glue database name Targets={ 'S3Targets': [ { 'Path': "s3://your-bucket-name/path/", # Replace with your S3 path to the data }, ], # Include other target types like 'JdbcTargets' if needed }, Configuration=configuration_json, # Include other parameters like Schedule, Classifiers, TablePrefix, SchemaChangePolicy, etc., as needed ) print(response)a

크롤러가 실행되면 새로운 테이블과 파티션은 스키마 변화 정책과 무관하게 항상 생성됩니다. SchemaChangePolicy 구조의 UpdateBehavior 필드에서 다음 작업 중 하나를 선택하여 크롤러가 변경된 테이블 스키마를 찾았을 때 수행할 작업을 결정할 수 있습니다.

  • UPDATE_IN_DATABASE - AWS Glue Data Catalog에서 테이블을 업데이트합니다. 새로운 열을 추가하고 누락 열을 제거하며 기존 열의 정의를 수정합니다. 크롤러가 설정하지 않은 메타데이터를 제거합니다.

  • LOG – 변경 사항을 무시하고 Data Catalog에서 테이블을 업데이트하지 않습니다.

    증분 크롤링에 대한 기본 설정입니다.

크롤러 API Configuration 필드에 제공된 JSON 객체를 사용하여 SchemaChangePolicy 구조를 재정의할 수도 있습니다. JSON 객체는 키값 페어를 포함하여 정책을 설정하고 기존 열을 업데이트하지 않으면서 새로운 열만 추가합니다. 예를 들어, 문자열로써 다음 JSON 객체를 제공합니다.

{ "Version": 1.0, "CrawlerOutput": { "Tables": { "AddOrUpdateBehavior": "MergeNewColumns" } } }

이 옵션은 AWS Glue 콘솔의 [새 열만 추가(Add new columns only)] 옵션에 해당합니다. Amazon S3 데이터 스토어만 크롤링하여 생성된 테이블의 SchemaChangePolicy 구조를 재정의합니다. Data Catalog(사실 원본)에 메타데이터가 존재하고 유지하고자 한다면 이 옵션을 선택합니다. 중첩된 데이터 유형을 포함하여 새로운 열에 맞닥뜨리면 이 새로운 열을 추가합니다. 하지만 기존 열은 제거되지 않고 유형도 변하지 않습니다. Amazon S3 테이블 속성이 크게 변하면 테이블의 사용 중지를 표시하고 비호환성 문제를 해결하라는 경고문을 실행합니다. 이 옵션은 증분 크롤러에는 적용할 수 없습니다.

이전에 크롤된 데이터 스토어에 반해 크롤러가 실행되면 새롭거나 변한 파티션을 발견하게 됩니다. 기본적으로 새 파티션이 추가되고 기존 파티션이 변했다면 업데이트됩니다. 또한 크롤러 구성 옵션을 InheritFromTable(AWS Glue 콘솔의 [테이블의 메타데이터로 모든 신규 및 기존 파티션 업데이트(Update all new and existing partitions with metadata from the table)] 옵션에 해당)로 설정할 수 있습니다. 이 옵션이 설정되면 파티션은 분류, 입력 포맷, 출력 포맷, SerDe 정보, 스키마 등 등 상위 테이블에서 메타데이터 속성을 물려받습니다. 모든 상위 테이블 속성의 변경 사항은 파티션으로 전파됩니다.

이 구성 옵션이 기존 크롤러에 설정되면 기존 파티션은 크롤러가 그 다음번에 실행될 때 상위 테이블의 속성과 일치하기 위해서 업데이트됩니다. 이 행동은 크롤러 API Configuration 필드에 설정됩니다. 예를 들어, 문자열로써 다음 JSON 객체를 제공합니다.

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

크롤러 API Configuration 필드는 다양한 구성 옵션을 설정할 수 있습니다. 예를 들어, 파티션과 테이블 모두의 크롤러 출력을 구성하기 위해서 다음 JSON 객체를 나타내는 문자열을 제공할 수 있습니다.

{ "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }, "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" } } }

삭제된 객체가 데이터 스토어에 존재한다면 크롤러가 무엇을 할지 결정하기 위해서 다음 행동 중 하나를 선택할 수 있습니다. 크롤러 API의 SchemaChangePolicy 구조에 있는 DeleteBehavior 필드는 크롤러가 삭제된 객체를 검색할 때의 동작을 설정합니다.

  • DELETE_FROM_DATABASE – Data Catalog에서 테이블 및 파티션을 삭제합니다.

  • LOG - 변경 사항을 무시합니다. Data Catalog를 업데이트하지 않습니다. 대신 로그 메시지를 작성합니다.

  • DEPRECATE_IN_DATABASE – Data Catalog에서 해당 테이블을 사용 중지로 표시합니다. 이것이 기본 설정입니다.