데이터 파티셔닝 - AWS Glue

데이터 파티셔닝

데이터 파티셔닝이란 무엇인가요?

데이터 파티셔닝은 대규모 데이터세트를 파티션이라고 하는 더 작고 관리하기 쉬운 세그먼트로 나누는 기법입니다. AWS Glue 제로 ETL 통합의 컨텍스트에서 파티셔닝은 특정 열 값 또는 해당 값의 변환을 기반으로 대상 위치에서 데이터를 구성합니다.

데이터 파티셔닝의 이점

효과적인 데이터 파티셔닝은 분석 워크로드에 몇 가지 주요 이점을 제공합니다.

  • 쿼리 성능 향상: 쿼리는 관련 없는 파티션을 건너뛸 수 있으므로(파티션 정리) 스캔해야 하는 데이터의 양이 줄어듭니다.

  • 비용 절감: 스캔하는 데이터가 줄어들면 분석 쿼리에 대한 컴퓨팅 및 I/O 비용을 절감할 수 있습니다.

  • 확장성 향상: 파티셔닝을 통해 데이터 세그먼트를 병렬 처리할 수 있으므로 분석 워크로드를 더 효율적으로 확장할 수 있습니다.

  • 간소화된 데이터 수명 주기 관리: 파티션 수준에서 보존 정책을 관리할 수 있으므로 이전 데이터를 더 간편하게 보관하거나 삭제할 수 있습니다.

주요 파티셔닝 개념

파티션 열

레코드가 파티션으로 구성되는 방식을 결정하는 데 사용되는 데이터의 열입니다. 효과적인 파티션 열은 일반적인 쿼리 패턴과 일치해야 하며 적절한 카디널리티가 있어야 합니다.

파티션 함수

파티션 열 값에 변환을 적용하여 실제 파티션 경계를 생성합니다. 예를 들어 자격 증명(원시 값 사용), 시간 기반 함수(year, month, day, hour)가 있습니다.

파티션 정리

쿼리 엔진이 쿼리와 관련된 데이터가 포함되지 않은 파티션을 식별하고 건너뛰어 성능을 개선하는 프로세스입니다.

분할 영역 세분성

데이터가 파티셔닝되는 세부 수준입니다. 더 세밀한 세분화(파티션 수가 많을수록)는 쿼리 성능을 개선할 수 있지만 메타데이터 오버헤드가 증가할 수 있습니다. 덜 세밀한(파티션 수가 적을수록) 메타데이터 오버헤드는 줄어들지만 필요 이상으로 많은 데이터를 스캔하게 될 수 있습니다.

AWS Glue 제로 ETL 통합의 파티셔닝

AWS Glue 제로 ETL 통합은 고급 파티셔닝 기능을 제공하는 Apache Iceberg 테이블 형식을 사용합니다. 제로 ETL 통합을 생성하면 다음을 수행할 수 있습니다.

  • 데이터 소스에 최적화된 기본 파티셔닝 전략 사용

  • 쿼리 패턴에 맞는 사용자 지정 파티셔닝 사양 정의

  • 파티션 열에 변환 적용(타임스탬프 기반 파티셔닝에 특히 유용)

  • 다중 수준 파티셔닝을 위한 여러 파티션 전략 결합

파티셔닝 구성은 제로 ETL 통합을 설정할 때 CreateIntegrationTableProperty API를 통해 지정됩니다. 구성이 완료되면 AWS Glue는 이러한 파티셔닝 전략을 자동으로 적용하여 대상 위치에서 데이터를 구성합니다.

파티셔닝 사양 API 참조

CreateIntegrationTableProperties API에서 다음 파라미터를 사용하여 파티셔닝을 구성합니다.

PartitionSpec

대상 위치에서 데이터를 파티셔닝하는 방법을 정의하는 파티션 사양의 배열입니다.

{ "partitionSpec": [ { "fieldName": "timestamp_col", "functionSpec": "month", "conversionSpec": "epoch_milli" }, { "fieldName": "category", "functionSpec": "identity" } ] }
FieldName

파티셔닝에 사용할 열 이름을 지정하는 UTF-8 문자열(1~128바이트)입니다.

FunctionSpec

파티셔닝 함수를 지정합니다. 유효한 값:

  • identity - 변환 없이 소스 값을 직접 사용

  • year - 타임스탬프 값에서 연도 추출(예: 2023)

  • month - 타임스탬프 값에서 월 추출(예: 2023-01)

  • day - 타임스탬프 값에서 날짜 추출(예: 2023-01-15)

  • hour - 타임스탬프 값에서 시간 추출(예: 2023-01-15-14)

참고

시간 기반 함수(year, month, day, hour)는 소스 타임스탬프 형식을 지정하는 데 ConversionSpec 파라미터가 필요합니다.

ConversionSpec

소스 데이터의 타임스탬프 형식을 지정하는 UTF-8 문자열입니다. 유효한 값은 다음과 같습니다.

  • epoch_sec - 초 단위의 Unix 에포크 타임스탬프

  • epoch_milli - 밀리초 단위의 Unix 에포크 타임스탬프

  • iso - ISO 8601 형식의 타임스탬프

파티셔닝 전략

기본 파티셔닝

파티션 열을 지정하지 않으면 AWS Glue 제로 ETL은 데이터 소스에 최적화된 기본 파티셔닝 전략을 적용합니다.

  • 프라이머리 키 기반 파티셔닝: 프라이머리 키가 있는 소스(예: DynamoDB 테이블)의 경우 AWS Glue 제로 ETL은 파티션 폭발을 방지하기 위해 버킷팅이 있는 프라이머리 키를 사용하여 데이터를 자동으로 파티셔닝합니다.

기본 파티셔닝은 수동으로 구성할 필요 없이 일반적인 쿼리 패턴에 잘 작동하도록 설계되었습니다. 그러나 특정 쿼리 패턴 또는 성능 요구 사항의 경우 사용자 지정 파티셔닝 전략을 정의할 수 있습니다.

사용자 정의 파티셔닝 전략

AWS Glue 제로 ETL을 사용하면 PartitionSpec 파라미터를 사용하여 사용자 지정 파티셔닝 전략을 정의할 수 있습니다. 하나 이상의 파티션 열을 지정하고 각 열에 서로 다른 파티셔닝 함수를 적용할 수 있습니다.

자격 증명 파티셔닝은 열의 원시 값을 사용하여 파티션을 생성합니다. 이 전략은 범주, 리전 또는 상태 필드와 같이 카디널리티가 낮거나 중간 정도인 열에 유용합니다.

예 자격 증명 파티셔닝 예제
{ "partitionSpec": [ { "fieldName": "category", "functionSpec": "identity" } ] }

이렇게 하면 "category" 열의 각 고유 값에 대해 별도의 파티션이 생성됩니다.

주의

카디널리티가 높은 열(예: 프라이머리 키 또는 타임스탬프)에서 자격 증명 파티셔닝을 사용하면 파티션 폭발로 인해 성능이 저하되고 메타데이터 오버헤드가 증가할 수 있으므로 자격 증명 파티셔닝을 사용하지 마세요.

시간 기반 파티셔닝은 다양한 세부 수준(연도, 월, 일 또는 시간)의 타임스탬프 값을 기반으로 데이터를 구성합니다. 이 전략은 시계열 데이터에 이상적이며 효율적인 시간 범위 쿼리를 지원합니다.

시간 기반 파티셔닝을 사용하는 경우 AWS Glue 제로 ETL은 파티션 함수를 적용하기 전에 다양한 타임스탬프 형식을 표준화된 형식으로 자동 변환할 수 있습니다. 이 변환은 ConversionSpec 파라미터를 사용하여 지정됩니다.

예 시간 기반 파티셔닝 예제
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "epoch_milli" } ] }

이렇게 하면 Unix 에포크 타임스탬프를 포함하는 "created_at" 열을 기반으로 데이터를 월별로 파티셔닝합니다.

AWS Glue 제로 ETL은 다음과 같은 시간 기반 파티션 함수를 지원합니다.

  • 연도: 데이터를 연도별로 파티셔닝(예: 2023, 2024)

  • 월: 데이터를 월별로 파티셔닝(예: 2023-01, 2023-02)

  • 일: 데이터를 일별로 파티셔닝(예: 2023-01-01, 2023-01-02)

  • 시간: 데이터를 시간별로 파티셔닝(예: 2023-01-01-01, 2023-01-01-02)

AWS Glue 제로 ETL은 ConversionSpec 파라미터를 통해 다음과 같은 타임스탬프 형식을 지원합니다.

  • epoch_sec: Unix 에포크 타임스탬프(초 단위)

  • epoch_milli: Unix 에포크 타임스탬프(밀리초 단위)

  • iso: ISO 8601 형식의 타임스탬프

참고

원본 열 값은 소스 데이터에서 변경되지 않습니다. AWS Glue는 대상 데이터베이스 테이블에서 파티션 열 값만 타임스탬프 유형으로 변환합니다. 변환은 파티셔닝 프로세스에만 적용됩니다.

다중 수준 파티셔닝은 여러 파티션 전략을 결합하여 계층 기반 파티셔닝 체계를 생성합니다. 이는 동일한 데이터세트에 대해 서로 다른 유형의 쿼리를 최적화하는 데 유용합니다.

예 다중 수준 파티셔닝 예제
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "iso" }, { "fieldName": "region", "functionSpec": "identity" } ] }

이렇게 하면 먼저 월별로("created_at" 열에서), 그리고 리전별로 2단계 파티셔닝 체계가 생성됩니다. 이를 통해 날짜 범위, 특정 리전, 또는 이러한 차원의 조합을 기준으로 필터링하는 효율적인 쿼리가 가능합니다.

다중 수준 파티셔닝 체계를 설계할 때는 다음 사항을 고려하세요.

  • 파티션 계층 구조에서 선택성이 높은 열을 먼저 배치

  • 파티션 세부 수준과 파티션 수 간 균형 맞추기

  • 파티셔닝 체계를 가장 일반적인 쿼리 패턴에 맞도록 조정

모범 사례

파티션 열 선택

  • identity 파티션 함수에는 카디널리티가 높은 열을 사용하지 마세요. ID 파티셔닝과 함께 높은 카디널리티 열을 사용하면 작은 파티션이 많이 생성되어 수집 성능이 크게 저하될 수 있습니다. 카디널리티가 높은 열에는 다음이 포함될 수 있습니다.

    • 프라이머리 키

    • 타임스탬프 필드(예: LastModifiedTimestamp, CreatedDate)

    • 시스템 생성 타임스탬프

  • 동일한 열에서 여러 타임스탬프 파티션을 선택하지 마세요. 예:

    "partitionSpec": [ {"fieldName": "col1", "functionSpec": "year", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "month", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "day", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "hour", "conversionSpec" : "epoch_milli"} ]

파티션 FunctionSpec/ConversionSpec 선택

  • 타임스탬프 기반 파티셔닝 함수를 사용할 때 타임스탬프 기반 파티셔닝에 대해 선택한 열 값의 형식을 나타내는 올바른 ConversionSpec(epoch_sec | epoch_milli | iso)을 지정합니다. AWS Glue 제로 ETL은 파티셔닝 전에 이 파라미터를 사용하여 소스 데이터를 타임스탬프 형식으로 올바르게 변환합니다.

  • 데이터 볼륨에 따라 적절한 세분화(년/월/일/시간)를 사용합니다.

  • ISO 타임스탬프를 사용할 때 시간대 영향을 고려합니다. AWS Glue 제로 ETL은 선택한 타임스탬프 열의 모든 레코드 값을 UTC 시간대로 채웁니다.

오류 처리

NEEDS_ATTENTION 상태

다음과 같은 경우 통합이 NEEDS_ATTENTION 상태가 됩니다.

  • 지정된 파티션 열이 소스에 없음

  • 파티션 열의 타임스탬프 변환 실패