Linux Foundation Delta Lake 테이블 쿼리 - Amazon Athena

Linux Foundation Delta Lake 테이블 쿼리

Linux Foundation Delta Lake는 빅 데이터 분석을 위한 테이블 형식입니다. Amazon Athena를 사용하면 매니페스트 파일을 생성하거나 MSCK REPAIR 문을 실행할 필요 없이 Amazon S3에 저장된 Delta Lake 테이블을 직접 읽을 수 있습니다.

Delta Lake 형식은 각 데이터 파일의 열당 최소값과 최대값을 저장합니다. Athena 구현에서는 이 정보를 사용하여 조건자에 대한 파일 건너뛰기를 활성화하여 원치 않는 파일이 고려되지 않도록 합니다.

고려 사항 및 제한

Athena의 Delta Lake 지원에는 다음과 같은 고려 사항 및 제한 사항이 있습니다.

  • AWS Glue 카탈로그를 포함하는 테이블만 - 기본 Delta Lake 지원은 AWS Glue에 등록된 테이블을 통해서만 지원됩니다. 다른 메타스토어에 등록된 Delta Lake 테이블이 있는 경우 해당 테이블을 그대로 유지하고 기본 메타스토어로 처리할 수 있습니다. Delta Lake 메타데이터는 메타스토어가 아닌 파일 시스템(예: Amazon S3)에 저장되므로 Athena에서는 AWS Glue에 위치 속성만 있으면 Delta Lake 테이블에서 읽을 수 있습니다.

  • V3 engine only(V3 엔진 전용) - Delta Lake 쿼리는 Athena 엔진 버전 3에서만 지원됩니다. 생성된 작업 그룹이 Athena 엔진 버전 3을 사용하도록 구성되어 있는지 확인해야 합니다.

  • Delta Lake 리더 버전 - Delta Lake 리더 프로토콜은 최대 버전 3까지 지원됩니다.

  • 열 매핑 및 타임스탬프Ntz - Delta 테이블 열과 기본 Parquet 파일 열이 서로 다른 이름을 사용할 수 있도록 하는 Delta 열 매핑과 시간대가 없는 타임스탬프(timestampNtz)가 지원됩니다.

  • No time travel support(시간 이동 지원 안 함) - Delta Lake의 시간 이동 기능을 사용하는 쿼리는 지원되지 않습니다.

  • Read only(읽기 전용) - DML 문(예: UPDATE, INSERT 또는 DELETE)을 쓸 수 없습니다.

  • Lake Formation 지원 - Lake Formation 통합은 AWS Glue와 스키마가 동기화된 Delta Lake 테이블에 사용할 수 있습니다. 자세한 내용은 AWS Lake Formation 개발자 안내서Using AWS Lake Formation with Amazon AthenaSet up permissions for a Delta Lake table을 참조하세요.

  • Limited DDL support(제한된 DDL 지원) - CREATE EXTERNAL TABLE, SHOW COLUMNS, SHOW TBLPROPERTIES, SHOW PARTITIONS, SHOW CREATE TABLE, DESCRIBE DDL 문이 지원됩니다. CREATE EXTERNAL TABLE 문 사용에 대한 자세한 내용은 시작하기 단원을 참조하세요.

  • S3 Glacier 객체 건너뛰기 미지원 – Linux Foundation Delta Lake 테이블의 객체가 Amazon S3 Glacier 스토리지 클래스에 있는 경우 read_restored_glacier_objects 테이블 속성을 false로 설정해도 효과가 없습니다.

    예를 들어 다음과 같은 명령을 실행한다고 가정하겠습니다.

    ALTER TABLE table_name SET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')

    Iceberg 및 Delta Lake 테이블의 경우 이 명령은 지원되지 않는 테이블 속성 키: read_restored_glacier_objects 오류를 생성합니다. Hudi 테이블의 경우 ALTER TABLE 명령은 오류를 생성하지 않지만 여전히 Amazon S3 Glacier 객체를 건너뛰지 않습니다. ALTER TABLE 명령 후에 SELECT 쿼리를 실행하면 계속해서 모든 개체가 반환됩니다.

지원되는 비분할 열 데이터 형식

비분할 열의 경우 CHAR를 제외하고 Athena에서 지원하는 모든 데이터 형식이 지원됩니다(CHAR는 Delta Lake 프로토콜 자체에서 지원되지 않음). 지원되는 데이터 형식은 다음과 같습니다.

boolean tinyint smallint integer bigint double float decimal varchar string binary date timestamp array map struct

지원되는 파티션 열 데이터 형식

파티션 열의 경우 Athena에서는 다음과 같은 데이터 형식을 포함하는 테이블을 지원합니다.

boolean integer smallint tinyint bigint decimal float double date timestamp varchar

Athena의 데이터 형식에 대한 자세한 내용은 Amazon Athena의 데이터 형식 단원을 참조하세요.

시작하기

쿼리가 가능하려면 Delta Lake 테이블이 AWS Glue에 있어야 합니다. 테이블이 Amazon S3에 있지만 AWS Glue에 없는 경우 다음 구문을 사용하여 CREATE EXTERNAL TABLE 문을 실행합니다. 테이블이 이미 AWS Glue에 있는 경우(예: AWS Glue에서 Apache Spark 또는 다른 엔진을 사용 중인 경우) 이 단계를 건너뛰어도 됩니다.

CREATE EXTERNAL TABLE [db_name.]table_name LOCATION 's3://DOC-EXAMPLE-BUCKET/your-folder/' TBLPROPERTIES ('table_type' = 'DELTA')

열 정의, SerDe 라이브러리 및 기타 테이블 속성의 생략에 유의하세요. 기존 Hive 테이블과 달리 Delta Lake 테이블 메타데이터는 Delta Lake 트랜잭션 로그에서 추론되고 AWS Glue에 직접 동기화됩니다.

참고

Delta Lake 테이블의 경우 LOCATIONtable_type 속성보다 많은 항목이 포함된 CREATE TABLE 문은 허용되지 않습니다.

Delta Lake 테이블 읽기

Delta Lake 테이블을 쿼리하려면 표준 SQL SELECT 구문을 사용하세요.

[ WITH with_query [, ...] ]SELECT [ ALL | DISTINCT ] select_expression [, ...] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ] [ HAVING condition ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ] [ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ] [ OFFSET count [ ROW | ROWS ] ] [ LIMIT [ count | ALL ] ]

SELECT 구문에 대한 자세한 내용은 Athena 설명서의 SELECT 단원을 참조하세요.

Delta Lake 형식은 각 데이터 파일의 열당 최소값과 최대값을 저장합니다. Athena에서는 이 정보를 사용하여 조건자에 대한 파일 건너뛰기를 활성화하여 불필요한 파일이 고려되지 않도록 합니다.

Delta Lake 메타데이터 동기화

Athena를 사용하여 Delta Lake 테이블을 생성하는 경우 Athena에서는 스키마, 파티션 열 및 테이블 속성을 비롯한 테이블 메타데이터를 AWS Glue에 동기화합니다. 시간이 경과함에 따라 이 메타데이터와 트랜잭션 로그 내 기본 테이블 메타데이터의 동기화가 손실될 수 있습니다. 테이블을 최신 상태로 유지하기 위해 다음 옵션 중 하나를 선택할 수 있습니다.

다음 기능을 사용하려면 AWS Glue 스키마가 항상 트랜잭션 로그와 동일한 스키마를 보유해야 합니다.

  • Lake Formation

  • 보기

  • 행 및 열 필터

워크플로에 이 기능이 필요하지 않고 이러한 호환성을 유지 관리하고 싶지 않은 경우 Athena에서 CREATE TABLE DDL을 사용한 후 AWS Glue에서 Amazon S3 경로를 SerDe 파라미터로 추가하면 됩니다.

Athena 및 AWS Glue 콘솔을 사용하여 Delta Lake 테이블을 생성하려면
  1. https://console.aws.amazon.com/athena/에서 Athena 콘솔을 엽니다.

  2. Athena 쿼리 편집기에서 다음 DDL을 사용하여 Delta Lake 테이블을 생성합니다. 이 방법을 사용하는 경우 TBLPROPERTIES의 값이 'table_type' = 'delta'가 아닌 'spark.sql.sources.provider' = 'delta'여야 합니다.

    Apache Spark(Athena for Apache Spark) 또는 대부분의 다른 엔진을 사용하여 테이블을 생성하는 경우 이 동일한 스키마(열 이름이 col이고 유형이 array<string>인 단일 열)가 삽입됩니다.

    CREATE EXTERNAL TABLE [db_name.]table_name(col array<string>) LOCATION 's3://DOC-EXAMPLE-BUCKET/your-folder/' TBLPROPERTIES ('spark.sql.sources.provider' = 'delta')
  3. https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

  4. 탐색 창의 데이터 카탈로그에서 테이블을 선택합니다.

  5. 테이블 목록에서 테이블에 대한 링크를 선택합니다.

  6. 테이블 페이지에서 작업, 테이블 편집을 선택합니다.

  7. Serde 파라미터 섹션에서 값이 s3://DOC-EXAMPLE-BUCKET/your-folder/path 키를 추가합니다.

  8. Save(저장)를 선택합니다.

추가적인 리소스

AWS Glue에서 Delta Lake 테이블을 사용하고 Athena에서 해당 테이블을 쿼리하는 방법에 대한 설명은 AWS 빅 데이터 블로그Handle UPSERT data operations using open-source Delta Lake and AWS Glue를 참조하세요.