요약데이터 레이크 테이블을 쿼리하고, MergeTree로 성능을 높이며, 결과를 Iceberg에 다시 쓰는 과정을 실습으로 안내합니다. 모든 단계는 공개 데이터셋을 사용하며 Cloud와 OSS 모두에서 작동합니다.
1
Iceberg 데이터 직접 쿼리하기
가장 빠르게 시작하는 방법은icebergS3() 테이블 함수를 사용하는 것입니다. S3의 Iceberg 테이블을 가리키기만 하면 별도 설정 없이 바로 쿼리할 수 있습니다.스키마를 확인합니다:deltaLake(), hudi(), paimon()에도 적용됩니다.자세히 알아보기: 오픈 테이블 포맷 직접 쿼리하기에서는 네 가지 포맷 모두와 분산 읽기를 위한 클러스터 변형, 그리고 스토리지 백엔드 옵션(S3, Azure, HDFS, 로컬)을 다룹니다.2
3
카탈로그에 연결
대부분의 조직은 테이블 메타데이터를 중앙에서 관리하고 데이터를 쉽게 찾기 위해 데이터 카탈로그를 통해 Iceberg 테이블을 관리합니다. ClickHouse는DataLakeCatalog 데이터베이스 엔진을 사용해 카탈로그에 연결할 수 있으며, 카탈로그의 모든 테이블을 ClickHouse 데이터베이스로 노출합니다. 이 방식이 더 확장성이 높으므로 새 Iceberg 테이블이 생성되더라도 추가 작업 없이 항상 ClickHouse에서 액세스할 수 있습니다.다음은 AWS Glue에 연결하는 예시입니다:ClickHouse는 네이티브로 둘 이상의 네임스페이스를 지원하지 않으므로
<database>.<table>에는 백틱이 필요합니다.4
쿼리 실행
위에서 어떤 방법을 사용했든 — 테이블 함수(table function), 테이블 엔진(table engine), 카탈로그(catalog) — 모두에 동일한 ClickHouse SQL을 사용할 수 있습니다:FROM 절만 변경됩니다. 데이터 소스와 관계없이 모든 ClickHouse SQL 함수, 조인, 집계는 동일하게 작동합니다.5
ClickHouse에 일부 데이터 로드하기
Iceberg를 직접 쿼리하는 것은 편리하지만, 성능은 네트워크 처리량과 파일 레이아웃에 따라 제한됩니다. 분석 워크로드의 경우 데이터를 네이티브 MergeTree 테이블로 로드하십시오.먼저, 기준 성능을 파악하기 위해 Iceberg 테이블에 필터링된 쿼리를 실행합니다:counterid 필터를 인식하지 못하므로 S3의 전체 데이터셋을 스캔합니다. 실행에 몇 초 정도 걸릴 수 있습니다.이제 MergeTree 테이블을 생성하고 데이터를 로드합니다:counterid가 ORDER BY 키의 첫 번째 컬럼이므로, ClickHouse의 희소 프라이머리 인덱스는 관련 그래뉼로 바로 건너뛰어 1억 개 행 전체를 스캔하지 않고 counterid = 38에 해당하는 행만 읽습니다. 그 결과 속도가 크게 향상됩니다.분석 가속화 가이드에서는 LowCardinality 타입, 전문 검색 인덱스, 최적화된 정렬 키를 사용해 이를 더 발전시키며, 2억 8,300만 행 데이터셋에서 약 40배 개선을 보여줍니다.자세히 알아보기: MergeTree를 사용한 분석 가속화에서는 스키마 최적화, 전문 검색 인덱싱, 그리고 성능의 전후 비교를 전체적으로 다룹니다.6
Iceberg로 다시 쓰기
ClickHouse는 Iceberg 테이블에 데이터를 다시 쓸 수도 있으므로, 역방향 ETL 워크플로를 구현할 수 있습니다. 즉, 집계 결과나 데이터 하위 집합을 게시해 다른 도구(Spark, Trino, DuckDB 등)에서 활용할 수 있습니다.출력용 Iceberg 테이블을 생성합니다:다음 단계
- 직접 쿼리하기 — 4가지 포맷 모두, 클러스터 변형, 테이블 엔진, 캐싱
- 카탈로그 연결 — Delta 및 Iceberg를 포함한 Unity Catalog 전체 안내
- 분석 가속화 — 스키마 최적화, 인덱싱, 약 40배 속도 향상 데모
- 데이터 레이크에 쓰기 — 원시 데이터 쓰기, 집계 데이터 쓰기, 타입 매핑
- 지원 매트릭스 — 포맷과 스토리지 백엔드 전반의 기능 비교