Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 블로그 게시물
Amazon Redshift에서 Iceberg 테이블 참조
Amazon Redshift는 데이터 레이크에 저장된 Apache Iceberg 테이블을 참조하는 다양한 방법을 제공합니다. 외부 스키마를 사용하여 Iceberg 테이블이 포함된 데이터 카탈로그 데이터베이스에 대한 참조를 생성하거나, 세 부분으로 구성된 주석을 사용하여 자동 마운트된 카탈로그에 직접 액세스할 수 있습니다.
외부 스키마를 사용하여 Iceberg 테이블 참조
외부 스키마는 Amazon Redshift 내에서 데이터 카탈로그의 테이블을 참조하는 방법을 제공합니다. 외부 스키마를 생성할 때 Amazon Redshift 데이터베이스와 Iceberg 테이블이 포함된 특정 데이터 카탈로그 데이터베이스 간에 연결을 설정합니다.
Iceberg 테이블에 대한 외부 스키마를 생성하려면:
CREATE EXTERNAL SCHEMAschema_nameFROM DATA CATALOG DATABASE 'glue_database_name' IAM_ROLE 'arn:aws:iam::account-id:role/role-name';
외부 스키마를 생성한 후 두 부분으로 구성된 주석을 사용하여 Iceberg 테이블을 쿼리할 수 있습니다.
SELECT * FROMschema_name.iceberg_table_name;
Iceberg 테이블을 로컬 Amazon Redshift 테이블과 조인할 수도 있습니다.
SELECT r.customer_id, i.order_date, r.customer_name FROM local_customers r JOINschema_name.iceberg_ordersi ON r.customer_id = i.customer_id;
자동 마운트된 카탈로그에서 세 부분으로 구성된 주석 사용
세 부분으로 구성된 주석을 사용하면 외부 스키마를 생성하지 않고도 자동 마운트된 카탈로그의 테이블을 직접 참조할 수 있습니다. 이 방법은 AWS Lake Formation과 페더레이션된 Amazon S3 테이블 버킷으로 작업할 때 특히 유용합니다. 데이터 카탈로그의 자동 마운트 설정에 대한 자세한 내용은 AWS Glue Data Catalog의 자동 탑재를 사용하여 Amazon Redshift에서 외부 객체 액세스 간소화
세 부분으로 구성된 주석의 구문은 다음과 같습니다.
"catalog_name".database_name.table_name
예를 들어, 자동 마운트된 Amazon S3 테이블 카탈로그에서 Iceberg 테이블을 쿼리하려면 다음을 수행합니다.
SELECT * FROM "my_table_bucket@s3tablescatalog".my_database.my_iceberg_table;
Amazon S3 테이블 버킷을 Amazon Redshift와 통합하는 방법에 대한 자세한 내용은 Amazon S3 사용 설명서의 S3 Tables를 Amazon Redshift와 통합을 참조하세요.
자동 마운트된 루트 카탈로그 awsdatacatalog 아래의 테이블을 참조할 수도 있으며, 이를 통해 AWS Glue Data Catalog에 등록된 데이터베이스 및 테이블에 직접 액세스할 수 있습니다.
SELECT * FROM awsdatacatalog.my_database.my_iceberg_table;
awsdatacatalog 루트 카탈로그 사용에 대한 자세한 내용은 Amazon Redshift 관리 안내서의 AWS Glue Data Catalog 쿼리 및 AWS Lake Formation 개발자 안내서의 데이터 카탈로그 네임스페이스 관리를 참조하세요.
USE 문을 사용하여 Amazon S3 테이블 버킷의 기본 카탈로그 및 데이터베이스를 설정할 수도 있습니다.
USE "my_table_bucket@s3tablescatalog".my_database; SELECT * FROMmy_iceberg_table;
Amazon S3 테이블 버킷에서 스키마 확인을 위한 검색 경로를 설정하려면 다음과 같이 하세요.
USE "my_table_bucket@s3tablescatalog"; SET search_path TOmy_database; SELECT * FROMmy_iceberg_table;
참고
USE 문과 search_path는 s3tablescatalog에서만 지원됩니다. awsdatacatalog에서는 사용할 수 없습니다. awsdatacatalog의 테이블을 참조하려면 전체 3부분 표기법을 사용해야 합니다.
Iceberg 테이블 참조 모범 사례
Apache Iceberg 테이블은 루트 메타데이터 파일(metadata.json), 매니페스트 목록, 매니페스트 파일, 데이터 파일(일반적으로 .parquet) 등 여러 파일로 구성된 단일 논리적 엔터티입니다. 루트 메타데이터 파일은 진입점 역할을 하며 테이블을 구성하는 다른 모든 파일에 대한 참조를 포함합니다. Amazon Redshift에 Iceberg 테이블에 대한 액세스 권한을 부여하면 Amazon Redshift는 루트 메타데이터 파일을 사용하여 참조된 모든 데이터 파일을 검색하고 읽습니다. Amazon Redshift가 루트 메타데이터 파일에 액세스할 수 있는 경우, 하위 데이터 파일에 대한 액세스 권한도 있는 것으로 간주하고 이를 요구합니다. 이는 테이블 수준 액세스를 권한 부여 단위로 사용하는 Iceberg의 설계 원칙과 일치합니다.
쿼리 성능을 개선하기 위해 Amazon Redshift는 Iceberg 메타데이터 파일(루트 메타데이터 파일, 매니페스트 목록 및 매니페스트 파일 포함)을 메모리에 캐시합니다. 루트 메타데이터 파일(metadata.json)은 구성 가능한 간격(TTL)으로 Amazon S3에 대해 재검증됩니다. TTL이 만료되면 Amazon Redshift는 루트 메타데이터 파일에 대해 Amazon S3 HEAD 요청을 수행하여 IAM 역할에 여전히 액세스 권한이 있고 파일이 수정되지 않았는지 확인합니다. 권한 검사에 실패하거나 파일이 변경된 경우 캐시된 항목이 제거되고 Amazon S3에서 메타데이터를 다시 가져옵니다. 루트 메타데이터 파일은 모든 테이블 액세스의 진입점이므로 이 재검증은 전체 테이블에 대한 권한 게이트 역할을 합니다. 매니페스트 목록 및 매니페스트 파일은 독립적인 TTL 재검증 없이 캐시되며, 액세스 유효성은 루트 메타데이터 권한 확인에서 파생됩니다. 즉, Iceberg 테이블에 대한 Amazon S3 권한을 취소하더라도 캐시된 메타데이터를 사용하는 동안에는 최대 2분 동안 쿼리가 계속 성공할 수 있습니다.
중요
Amazon S3를 사용하면 개별 객체 수준에서 권한을 설정할 수 있습니다. 즉, 기술적으로 Iceberg 테이블의 메타데이터에는 액세스 권한을 부여하면서 해당 테이블의 일부 기본 데이터 파일에는 액세스를 제한하는 것이 가능합니다. 이로 인해 권한 불일치가 발생하여 Amazon Redshift에서 쿼리 실패 또는 예기치 않은 액세스 오류가 발생할 수 있습니다.
Amazon Redshift는 캐시된 루트 메타데이터 파일에 대한 액세스를 주기적으로 검증하지만 Amazon S3 버킷 내의 메타데이터 수준과 데이터 파일 수준 권한 간의 일관성을 검증하거나 강제하지는 않습니다. Iceberg 테이블을 구성하는 모든 파일에 일관되게 권한이 적용되도록 하는 것은 고객의 책임입니다.
이러한 문제를 방지하려면 Amazon Redshift에서 Iceberg 테이블을 참조할 때는 다음 모범 사례를 고려하세요.
-
설명형 스키마 이름 사용 - 외부 스키마를 생성할 때
sales_data_lake또는customer_analytics와 같이 데이터의 소스와 목적을 명확하게 나타내는 이름을 사용합니다. -
테이블 통계 활용 - 쿼리 성능을 최적화하기 위해 AWS Glue를 사용하여 Iceberg 테이블에 대한 열 통계가 생성되었는지 확인합니다. Amazon Redshift는 쿼리 계획 및 최적화에 이러한 통계를 사용합니다.
-
최신 데이터 여부 고려 - 쿼리하는 동안 다른 서비스에서 Iceberg 테이블을 업데이트할 수 있습니다. Amazon Redshift는 트랜잭션 일관성을 제공하므로 쿼리 실행 중에 데이터의 일관된 스냅샷을 볼 수 있습니다.
-
적절한 IAM 권한 사용 - Amazon Redshift 클러스터 또는 작업 그룹에 Iceberg 테이블이 저장된 Amazon S3 위치와 데이터 카탈로그 메타데이터에 액세스하는 데 필요한 IAM 권한이 있는지 확인합니다.
-
테이블 수준 권한 - 개별 파일 수준이 아닌 테이블 수준에서 권한을 부여합니다.
-
균일한 권한 - 모든 메타데이터, 매니페스트 및 데이터 파일을 포함하여 Iceberg 테이블의 전체 Amazon S3 경로에 걸쳐 균일한 액세스를 보장합니다.
-
제한적인 객체 수준 정책 방지 - Iceberg 테이블 접두사 내의 개별 Parquet 파일에 대해 제한적인 객체 수준 정책을 설정하지 마세요.
-
권한 변경에 대한 TTL 캐싱 이해 - Iceberg 테이블의 Amazon S3 권한을 취소해도 구성된 TTL 기간(기본값: 2분) 동안 캐시된 루트 메타데이터를 사용하여 쿼리가 계속 성공할 수 있습니다.
-
쿼리 성능 모니터링 - Amazon Redshift 쿼리 모니터링 기능을 사용하여 Iceberg 테이블에 대한 쿼리 성능을 추적하고 필요에 따라 최적화합니다.
일반적인 참조 패턴
다음 예제에서는 Iceberg 테이블을 참조하기 위한 일반적인 패턴을 보여줍니다.
여러 Iceberg 테이블에서 데이터 집계:
SELECT region, SUM(sales_amount) as total_sales, COUNT(*) as transaction_count FROM data_lake.sales_transactions WHERE transaction_date >= '2024-01-01' GROUP BY region ORDER BY total_sales DESC;
Iceberg 테이블을 로컬 Amazon Redshift 테이블과 조인:
SELECT c.customer_name, c.customer_tier, SUM(o.order_amount) as total_orders FROM customers c JOIN data_lake.order_history o ON c.customer_id = o.customer_id WHERE o.order_date >= CURRENT_DATE - INTERVAL '30 days' GROUP BY c.customer_name, c.customer_tier;
복잡한 쿼리와 함께 세 부분으로 구성된 주석 사용:
WITH recent_orders AS ( SELECT customer_id, order_date, order_amount FROM "analytics_bucket@s3tablescatalog".ecommerce.orders WHERE order_date >= CURRENT_DATE - INTERVAL '7 days' ) SELECT customer_id, COUNT(*) as order_count, AVG(order_amount) as avg_order_value FROM recent_orders GROUP BY customer_id HAVING COUNT(*) > 1;