크롤러 속성 - AWS Glue

크롤러 속성

AWS Glue 콘솔 또는 AWS Glue API를 사용하여 크롤러를 정의할 경우 다음 정보를 지정합니다.

크롤러 이름, 선택적 설명자 및 설정

설정에는 태그, 보안 구성 및 사용자 지정 분류자가 포함됩니다. 크롤러를 정의하기 전에 사용자 지정 분류자를 정의합니다. 자세한 내용은 다음 자료를 참조하세요.

크롤러 소스 유형

크롤러는 크롤의 원본으로 데이터 스토어에 직접 액세스하거나 Data Catalog의 기존 테이블을 원본으로 사용할 수 있습니다. 크롤러가 기존 카탈로그 테이블을 사용하면 해당 카탈로그 테이블에 지정된 데이터 스토어가 크롤됩니다. 자세한 정보는 크롤러 소스 유형을 참조하십시오.

S3 데이터 원본에 대한 새 폴더만 크롤링

설정 시 마지막 크롤러 실행 이후에 추가된 Amazon S3 폴더만 크롤링됩니다. 자세한 정보는 AWS Glue의 증분 크롤링을 참조하십시오.

크롤러 소스: 데이터 스토어 또는 카탈로그 테이블

다음 중에서 선택합니다.

  • 하나 이상의 데이터 스토어

    크롤러는 서로 다른 유형(Amazon S3, JDBC 등)의 여러 데이터 스토어를 크롤할 수 있습니다.

  • Data Catalog 테이블 목록

    카탈로그 테이블은 크롤할 데이터 스토어를 지정합니다. 크롤러는 단일 실행으로 카탈로그 테이블만 크롤할 수 있습니다. 다른 원본 유형에서는 혼합할 수 없습니다.

한 번에 하나의 데이터 스토어만 구성할 수 있습니다. 연결 정보를 제공하고 경로를 포함하고 패턴을 제외하면 다른 데이터 스토어를 추가할 수 있습니다.

자세한 정보는 크롤러 소스 유형을 참조하십시오.

추가 크롤러 소스 파라미터

소스 유형마다 다른 추가 파라미터 집합이 필요합니다. 다음은 불완전한 목록입니다.

연결

AWS Glue 연결을 선택하거나 추가합니다. 연결에 관한 자세한 내용은 AWS Glue Data Catalog에서 연결 정의 단원을 참조하십시오.

데이터 샘플링 사용(Amazon DynamoDB, MongoDB 및 Amazon DocumentDB 데이터 스토어만 해당)

데이터 샘플만 크롤링할지 여부를 선택합니다. 선택하지 않으면 전체 테이블이 크롤링됩니다. 테이블이 높은 처리량 테이블이 아닌 경우 모든 레코드를 스캔하는 데 시간이 오래 걸릴 수 있습니다.

쓰기 매니페스트 사용(Delta Lake 데이터 스토어에만 해당)

Delta Lake 트랜잭션 로그에서 테이블 메타데이터 또는 스키마 변경 사항을 감지할지 여부를 선택합니다. 해당 항목은 매니페스트 파일을 다시 생성합니다. Delta Lake SET TBLPROPERTIES에서 자동 매니페스트 업데이트를 구성한 경우에는 이 옵션을 선택해서는 안 됩니다.

스캔 속도(DynamoDB 데이터 스토어에만 해당)

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

참고

DynamoDB 데이터 스토어의 경우, 테이블의 읽기 및 쓰기 처리를 위한 프로비저닝된 용량 모드를 설정합니다. AWS Glue 크롤러는 온디맨드 용량 모드와 함께 사용하지 않아야 합니다.

샘플 크기(선택 사항)(Amazon S3 데이터 스토어만 해당)

데이터 집합의 샘플 파일을 크롤링할 때 크롤링할 각 리프 폴더의 파일 수를 지정합니다. 이 기능이 설정되어 있으면 이 데이터 집합의 모든 파일을 크롤링하는 대신 크롤러가 크롤링할 각 리프 폴더의 일부 파일을 무작위로 선택합니다.

샘플링 크롤러는 데이터 포맷에 대한 사전 지식이 있고 폴더의 스키마가 변경되지 않는다는 것을 알고 있는 고객에게 가장 적합합니다. 이 기능을 설정하면 크롤러 런타임이 크게 감소합니다.

유효한 값은 1~249의 정수입니다. 지정하지 않으면 모든 파일이 크롤링됩니다.

포함 경로
Amazon S3 데이터 스토어의 경우

사용자 계정에서 경로를 지정할지 혹은 다른 계정에서 경로를 지정할지 선택한 다음 Amazon S3 경로 선택을 위해 찾아봅니다.

Delta Lake 데이터 스토어의 경우

s3://bucket/prefix/object와 같이 Delta 테이블에 대한 Amazon S3 경로를 하나 이상 지정합니다.

JDBC 데이터 스토어의 경우

데이터베이스 제품에 따라 <database>/<schema>/<table> 또는 <database>/<table>을 입력합니다. Oracle Database 및 MySQL은 경로의 스키마를 지원하지 않습니다. <schema> 또는 <table> 대신에 백분율 문자(%)를 사용할 수 있습니다. 예를 들어 시스템 식별자(SID)가 orcl인 Oracle Database의 경우 orcl/%를 입력하여 연결에 이름이 지정된 사용자가 액세스할 수 있는 모든 테이블을 가져옵니다.

중요

이 필드는 대/소문자를 구분합니다.

MongoDB 또는 Amazon DocumentDB 데이터 스토어의 경우

database/collection을 입력합니다.

자세한 정보는 패턴 포함 및 제외을 참조하십시오.

제외 패턴

이렇게 하면 크롤에서 특정 파일이나 테이블을 제외할 수 있습니다. 자세한 정보는 패턴 포함 및 제외을 참조하십시오.

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:region:account-id:table/table-name*" ] } ] }

자세한 정보는 2단계: AWS Glue에 대한 IAM 역할 생성AWS Glue 리소스에 대한 액세스 권한 관리 섹션을 참조하세요.

크롤러 예약

필요에 따라 크롤러를 실행하거나 크롤러의 자동 실행 일정을 정의할 수 있습니다. 자세한 정보는 AWS Glue 크롤러 일정 관리을 참조하십시오.

생성된 카탈로그 테이블에 대한 Data Catalog 내의 대상 데이터베이스

자세한 정보는 AWS Glue 데이터베이스을 참조하십시오.

출력 구성 옵션

옵션에는 크롤러가 감지된 스키마 변경 사항, 데이터 스토어에서 삭제된 객체 등을 처리하는 방법이 포함됩니다. 자세한 정보는 크롤러 구성 옵션 설정을 참조하십시오.

재크롤링 정책

첫 번째 크롤링이 완료된 후 Amazon S3 데이터 원본을 크롤링할 때 전체 데이터 집합을 다시 크롤링할지 아니면 마지막 크롤러 실행 이후에 추가된 폴더만 크롤링할지 선택합니다. 자세한 정보는 AWS Glue의 증분 크롤링을 참조하십시오.

크롤러 소스 유형

크롤러는 크롤의 원본으로 데이터 스토어에 직접 액세스하거나 기존 카탈로그 테이블을 원본으로 사용할 수 있습니다. 크롤러가 기존 카탈로그 테이블을 사용하면 해당 카탈로그 테이블에 지정된 데이터 스토어가 크롤됩니다.

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

기존 테이블을 크롤러 원본 유형으로 지정하면 다음 조건이 적용됩니다.

  • 데이터베이스 이름은 선택 사항입니다.

  • Amazon S3 또는 Amazon DynamoDB 데이터 스토어를 지정하는 카탈로그 테이블만 허용됩니다.

  • 크롤러가 실행되면 새 카탈로그 테이블이 생성되지 않습니다. 기존 테이블은 새 파티션을 추가하는 등 필요에 따라 업데이트됩니다.

  • 데이터 스토어에서 찾은 삭제된 객체는 무시됩니다. 카탈로그 테이블은 삭제되지 않습니다. 대신 크롤러는 로그 메시지를 작성합니다. (SchemaChangePolicy.DeleteBehavior=LOG)

  • 각 Amazon S3 경로에 대해 단일 스키마를 생성하는 크롤러 구성 옵션은 기본적으로 사용되며 사용 중지할 수 없습니다. (TableGroupingPolicy=CombineCompatibleSchemas) 자세한 내용은 각 Amazon S3 포함 경로에 대해 단일 스키마를 생성하는 방법 섹션을 참조하십시오.

  • 다른 원본 유형(예: Amazon S3 또는 Amazon DynamoDB)과 원본으로 카탈로그 테이블을 혼합할 수 없습니다.

패턴 포함 및 제외

크롤러에 무엇을 포함하거나 제외할 것인지 평가할 때 크롤러는 필요한 포함 경로를 평가하는 것으로 시작합니다. Amazon S3, MongoDB, Amazon DocumentDB(MongoDB 호환) 및 관계형 데이터 스토어의 경우 포함 경로를 지정해야 합니다.

Amazon S3 데이터 스토어의 경우 경로 포함 구문은 bucket-name/folder-name/file-name.ext입니다. 버킷에 있는 모든 객체를 크롤하려면 추가 경로에서 버킷 이름을 지정합니다. 제외 패턴은 포함 경로와 상대적입니다.

MongoDB 및 Amazon DocumentDB(MongoDB와 호환)의 경우 구문은 database/collection입니다.

JDBC 데이터 스토어의 구문은 database-name/schema-name/table-name 혹은 database-name/table-name입니다. 구문은 데이터베이스 엔진이 데이터베이스 내에서 스키마를 지원할지 여부에 따라 다릅니다. 예를 들어, MySQL 또는 Oracle과 같은 데이터베이스는 추가 경로에서 schema-name를 지정할 필요가 없습니다. 퍼센트 표시(%)를 추가 경로 내 스키마 또는 테이블로 바꿔 데이터베이스 내 모든 스키마 혹은 모든 테이블을 나타냅니다. 퍼센트 표시(%)를 추가 경로 내 데이터베이스로 바꿀 수 없습니다. 제외 경로는 포함 경로와 상대적입니다. 예를 들어 테이블에서 JDBC 데이트 스토어에서 테이블을 제외하기 위해서 테이블 이름을 제외 경로에 입력합니다.

크롤러는 JDBC URI 연결 문자열을 포함한 AWS Glue를 사용하여 JDBC 데이터 스토어에 연결합니다. 크롤러는 AWS Glue 연결의 JDBC 사용자 이름 및 비밀번호를 사용하여 데이터베이스 엔진의 객체에 액세스만 합니다. 크롤러는 JDBC 연결을 통한 액세스할 수 있는 테이블을 생성만 합니다. JDBC URI로 데이터베이스 엔진에 크롤러가 액세스한 후, 추가 경로는 Data Catalog에 생성된 데이터베이스 엔진의 테이블을 결정하는데 사용됩니다. 예를 들어 MySQL의 경우, MyDatabase/%의 추가 경로를 지정하면 MyDatabase 내 모든 테이블은 Data Catalog에 생성됩니다. Amazon Redshift에 액세스할 경우, MyDatabase/%의 추가 경로를 지정하면 데이터베이스 MyDatabase의 모든 스키마 내 모든 테이블은 Data Catalog에 생성됩니다. MyDatabase/MySchema/%의 추가 경로를 지정하면 MyDatabase 데이터베이스의 모든 테이블과 MySchema 스키마가 생성됩니다.

추가 경로를 지정한 후, 크롤러에서 객체를 제외합니다. 그렇지 않으면 추가 경로는 하나 이상의 Unix 스타일 glob이 패턴을 제외하는 것을 지정하여 객체를 추가합니다. 이런 패턴은 추가 경로에 적용되어 어떤 객체가 제외되어야 하는지 결정합니다. 또한 이런 패턴은 크롤러가 생성한 테이블의 속성으로 저장됩니다. AWS Glue create_dynamic_frame.from_catalog 등의 PySpark 확장은 테이블 속성을 읽고 제외 패턴이 정의한 객체를 제외합니다.

AWS Glue는 제외 패턴에서 glob 패턴의 다음 종류를 지원합니다.

제외 패턴 설명
*.csv .csv로 끝나는 현재 폴더의 객체 이름을 나타내는 Amazon S3 경로에 해당합니다.
*.* 점을 포함한 모든 객체 이름과 해당합니다.
*.{csv,avro} .csv 또는 .avro로 끝나는 객체 이름과 해당합니다.
foo.? 하나의 문자 확장에 따라 foo.으로 시작하는 객체 이름과 해당합니다.
myfolder/* /myfolder/mysource와 같은 myfolder에서 하위 폴더의 한 수준의 객체와 해당합니다.
myfolder/*/* /myfolder/mysource/data와 같은 myfolder에서 하위 폴더의 두 가지 수준의 객체와 해당합니다.
myfolder/** /myfolder/mysource/mydata/myfolder/mysource/data와 같은 myfolder의 모든 하위 폴더의 객체와 해당합니다.
myfolder** myfolder 아래 파일뿐만 아니라 하위 폴더 myfolder도 일치시킵니다(예: /myfolder/myfolder/mydata.txt).
Market* Market_usMarket_fr와 같은 Market으로 시작하는 이름의 JDBC 데이터베이스에 있는 테이블과 해당합니다.

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에 해당하는 패턴을 제외합니다.

예 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/에 따르면 다음 예는 패턴을 제외한 결과입니다.

제외 패턴 결과
departments/** departments 아래에 있는 모든 파일 및 폴더를 제외하고 employees 폴더 및 하위 폴더를 포함합니다.
departments/market* market-us.json, market-emea.jsonmarket-ap.json을 제외합니다.
**.csv .csv로 끝나는 이름을 갖는 myfolder의 모든 하위 객체를 제외합니다.
employees/*.csv employees 폴더 내 모든 .csv 파일을 제외합니다
예 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으로 시작하지 않는 모든 일자를 제외합니다. "**"는 일수 형식의 접미사로 사용된다는 것을 기억하고 폴더 경계를 더 낮은 수준의 폴더로 지나갑니다. "*"가 사용되면 하위 폴더 수준은 제외되지 않습니다.

두 번째 부분인 2015/0[2-9]/**는 2015년 중 02월에서 09월까지의 일자를 제외합니다.

세 번째 부분인 2015/1[0-2]/**는 2015년 중 10월, 11월 및 12월의 일자를 제외합니다.

예 JDBC 제외 패턴

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

MyDatabase/MySchema/ HR_us HR_fr Employees_Table Finance Market_US_Table Market_EMEA_Table Market_AP_Table

추가 경로 MyDatabase/MySchema/%에 따르면 다음 예는 패턴을 제외한 결과입니다.

제외 패턴 결과
HR* HR로 이름이 시작되는 테이블을 제외합니다.
Market_* Market_로 이름이 시작되는 테이블을 제외합니다.
**_Table _Table로 이름이 끝나는 모든 테이블을 제외합니다.