REST API에서 읽기
REST API ConnectionType을 등록하고 AWS Glue 연결을 생성한 후 AWS Glue ETL 작업에서 REST API로부터 데이터를 읽을 수 있습니다. 이 연결을 사용하면 동일한 작업에서 다른 소스와 함께 외부 REST API 데이터를 처리할 수 있습니다. 데이터를 읽으려면 연결 이름과 엔터티 이름이 필요합니다.
다음 예제에서는 Python을 사용하여 REST API 데이터 소스에서 읽는 방법을 보여줍니다.
rest_read = glueContext.create_dynamic_frame.from_options( connection_type="rest", connection_options={ "connectionName": "connection-name", "ENTITY_NAME": "entity-name", "CONNECTION_TYPE": "REST-connection-type" } )
데이터 필터링
필터 조건자를 소스 REST API로 푸시다운하여 전송되는 데이터의 양을 줄일 수 있습니다. REST API 커넥터는 두 가지 필터 모드를 지원합니다.
QUERY_PARAMS – 각 필터가 별도의 URL 쿼리 파라미터가 됩니다. 예:
?created[gte]=1704067200&created[lte]=1717200000FILTER_STRING – 모든 필터가 단일 쿼리 파라미터로 결합됩니다. 예:
?search=status eq "ACTIVE" and lastUpdated gt "2024-01-01"
AWS Glue ETL 작업에 필터 조건자를 적용하려면 FILTER_PREDICATE 연결 옵션을 사용합니다.
rest_read = glueContext.create_dynamic_frame.from_options( connection_type="rest", connection_options={ "connectionName": "connection-name", "ENTITY_NAME": "entity-name", "CONNECTION_TYPE": "REST-connection-type", "FILTER_PREDICATE": "status = \"ACTIVE\" AND lastUpdated >= \"2024-01-01T00:00:00.000Z\"" } )
FilterConfiguration 속성
FilterConfiguration 객체를 사용하여 ConnectionType 등록에서 필터링 동작을 구성합니다. 다음 표에서는 사용 가능한 속성을 설명합니다.
속성 |
유형 |
설명 |
|---|---|---|
|
문자열 |
필수 사항. |
|
맵 |
논리적 연산자를 API별 구문에 매핑합니다. |
|
문자열 |
DateTime 형식 패턴 또는 |
|
부울 |
입력 값에서 묶는 따옴표를 제거할지 여부를 지정합니다. 기본값: |
|
객체 |
기본 BETWEEN 처리 구성입니다. |
|
객체 |
|
FilterStringConfiguration 속성
다음 표에서는 FILTER_STRING 모드의 속성을 설명합니다.
속성 |
유형 |
설명 |
|---|---|---|
|
문자열 |
필수입니다. 쿼리 파라미터 키(예: 'search' 또는 'filter')입니다. |
|
부울 |
문자열 및 DateTime 값을 따옴표로 묶을지 여부를 지정합니다. |
|
문자열 |
인용 문자입니다. 기본값: |
BetweenConfiguration 속성
다음 표에서는 BETWEEN 처리 속성을 설명합니다.
속성 |
Mode |
설명 |
|---|---|---|
|
QUERY_PARAMS |
하한에 대한 키 템플릿입니다. |
|
QUERY_PARAMS |
상한에 대한 키 템플릿입니다. 상한을 삭제하려면 생략합니다. |
|
FILTER_STRING |
|
지원되는 연산자
필터 조건자에서 다음 연산자가 지원됩니다. EQUAL_TO, GREATER_THAN, LESS_THAN, GREATER_THAN_OR_EQUAL_TO, LESS_THAN_OR_EQUAL_TO, NOT_EQUAL_TO, CONTAINS, BETWEEN, AND, OR.
필드 수준 재정의
스키마 정의에서 FilterOverrides를 사용하여 필드별 필터 동작을 구성할 수 있습니다. 다음 재정의 속성들을 사용할 수 있습니다.
FieldName– 필터 출력에 사용되는 필드 이름을 재정의합니다.OperatorMappings– 필드 수준 연산자 재정의.BetweenConfiguration– 필드별 BETWEEN 재정의.DateTimeFormat– 필드별 DateTime 형식 재정의.
예: QUERY_PARAMS 모드
다음 예제에서는 연산자에 대한 대괄호 표기법, 날짜 값에 대한 에포크 타임스탬프와 함께 쿼리 파라미터를 사용하는 REST API의 FilterConfiguration을 보여줍니다.
"FilterConfiguration": { "FilterMode": "QUERY_PARAMS", "OperatorMappings": { "EQUAL_TO": "{FIELD}", "GREATER_THAN_OR_EQUAL_TO": "{FIELD}[gte]", "LESS_THAN_OR_EQUAL_TO": "{FIELD}[lte]" }, "DateTimeFormat": "EPOCH_SECONDS", "BetweenConfiguration": { "LowBoundKey": "{FIELD}[gte]", "HighBoundKey": "{FIELD}[lte]" } }
이 구성을 사용하면 created >= 2024-01-01 AND created <= 2024-06-01의 입력 필터가 URL 쿼리 문자열을 생성합니다. ?created[gte]=1704067200&created[lte]=1717200000
예: FILTER_STRING 모드
다음 예제에서는 공백으로 패딩된 연산자와 함께 단일 필터 문자열 파라미터를 사용하는 REST API의 FilterConfiguration를 보여줍니다.
"FilterConfiguration": { "FilterMode": "FILTER_STRING", "OperatorMappings": { "EQUAL_TO": " eq ", "GREATER_THAN": " gt ", "GREATER_THAN_OR_EQUAL_TO": " ge ", "LESS_THAN": " lt ", "AND": " and ", "OR": " or " }, "DateTimeFormat": "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "BetweenConfiguration": { "Template": "{FIELD} ge {LOW} and {FIELD} le {HIGH}" }, "FilterStringConfiguration": { "FilterStringKey": "search", "QuoteStringValues": true, "QuoteCharacter": "\"" } }
이 구성을 사용하면 status = "ACTIVE" AND lastUpdated > 2024-01-01T00:00:00.000Z의 입력 필터가 URL 쿼리 문자열을 생성합니다. ?search=status eq "ACTIVE" and lastUpdated gt "2024-01-01T00:00:00.000Z"
쿼리 파티셔닝
데이터 읽기를 Spark 워커 간에 병렬 파티션으로 분할하여 처리량을 개선할 수 있습니다. REST API 커넥터는 지정된 필드를 기반으로 데이터를 범위로 분할하는 필드 기반 파티셔닝을 지원합니다.
Spark 작업 파라미터
다음 연결 옵션은 파티셔닝 동작을 제어합니다.
PARTITION_FIELD– 분할할 필드입니다. 스키마에서IsPartitionable: true로 표시되어야 합니다.LOWER_BOUND– 파티션 범위의 하한(포함)입니다.UPPER_BOUND– 파티션 범위의 상한입니다. 중간 파티션은 이 값을 제외합니다. 마지막 파티션은 이 값을 포함합니다.NUM_PARTITIONS– 병렬 파티션 수입니다.
필드 기반 분할
필드 기반 파티셔닝은 지정된 필드를 기반으로 데이터를 범위로 분할합니다. 다음 예제에서는 lastUpdated 필드의 데이터를 분할합니다.
rest_read = glueContext.create_dynamic_frame.from_options( connection_type="rest", connection_options={ "connectionName": "connection-name", "ENTITY_NAME": "entity-name", "CONNECTION_TYPE": "REST-connection-type", "PARTITION_FIELD": "lastUpdated", "LOWER_BOUND": "2024-01-01T00:00:00.000Z", "UPPER_BOUND": "2024-12-31T00:00:00.000Z", "NUM_PARTITIONS": "4" } )
lastUpdated 필드에 파티션이 4개인 경우 작업은 다음과 같이 분배됩니다.
워커 1:
lastUpdated >= "2024-01-01" AND lastUpdated < "2024-04-01"워커 2:
lastUpdated >= "2024-04-01" AND lastUpdated < "2024-07-01"워커 3:
lastUpdated >= "2024-07-01" AND lastUpdated < "2024-10-01"워커 4:
lastUpdated >= "2024-10-01" AND lastUpdated <= "2024-12-31"
RegisterConnectionType에서 파티션 지원 구성
필드 기반 파티셔닝을 활성화하려면 스키마 정의에서 필드를 파티션 가능으로 표시합니다.
"Schema": { "lastUpdated": { "FieldDataType": "TIMESTAMP", "IsPartitionable": true } }
파티셔닝에 대해 다음 FieldDataType 값이 지원됩니다.
TIMESTAMP– DateTime 파티셔닝. 범위를 시간 창으로 분할합니다.INTEGER– 정수 파티셔닝. 범위를 숫자 창으로 분할합니다.
참고
커넥터는 AND를 사용하여 파티션 필터를 사용자 필터와 결합합니다. 필터에 LIMIT 절이 포함된 경우 커넥터는 파티셔닝을 건너맙니다. 파티션 생성에 실패하면 커넥터가 단일 파티션으로 폴백되며 작업은 계속 완료됩니다.