오픈 테이블 형식에 데이터 쓰기
이전 가이드에서는 오픈 테이블 형식을 제자리에서 쿼리하고, 빠른 분석을 위해 데이터를 MergeTree에 로드했습니다. 많은 아키텍처에서는 데이터가 반대 방향으로도 흘러야 합니다. 즉, ClickHouse에서 다시 오픈 테이블 형식으로 데이터를 내보내야 합니다. 일반적으로 이는 다음 두 가지 시나리오에서 필요합니다.
- 장기 스토리지로 오프로드 - 데이터는 실시간 분석 계층으로 ClickHouse에 유입되어 대시보드와 운영 보고를 지원합니다. 데이터가 실시간 활용 구간을 지나면, 상호 운용 가능한 형식으로 내구성 있게 그리고 비용 효율적으로 보관할 수 있도록 객체 스토리지의 Iceberg에 기록할 수 있습니다.
- 리버스 ETL - ClickHouse 내부에서 수행한 변환, 집계, 보강을 통해 파생 데이터세트가 생성되며, 이를 다운스트림 도구와 다른 팀에서 활용해야 합니다. 이러한 결과를 Iceberg 테이블에 기록하면 더 넓은 데이터 생태계 전반에서 사용할 수 있습니다.
두 경우 모두 INSERT INTO SELECT를 사용하면 ClickHouse 테이블의 데이터를 객체 스토리지에 저장된 Iceberg 테이블로 이동할 수 있습니다.
오픈 테이블 형식에 대한 쓰기는 현재 Iceberg 테이블만 지원합니다. Delta Lake 테이블에 대한 부분 지원은 현재 개발 중입니다. 테이블은 catalog에서 관리되지 않아야 합니다.
소스 데이터셋 준비
이 가이드에서는 UK Price Paid 데이터셋을 사용합니다. 이 데이터셋은 잉글랜드와 웨일스의 모든 주거용 부동산 거래를 담은 공개 기록입니다.
MergeTree 테이블 생성 및 데이터 삽입
공개 CSV 소스에서 테이블에 직접 데이터를 채우세요:
Iceberg 테이블에 데이터 쓰기
Iceberg 테이블 생성
Iceberg에 데이터를 쓰려면 IcebergS3 테이블 엔진을 사용해 테이블을 생성하십시오.
스키마는 MergeTree 소스보다 더 단순해야 합니다. ClickHouse는 Iceberg와 기반 Parquet 파일보다 더 풍부한 타입 시스템을 지원하므로 Enum, LowCardinality, UInt8와 같은 타입은 Iceberg에서 지원되지 않으며, 호환되는 타입으로 매핑해야 합니다.
데이터의 일부를 삽입합니다
INSERT INTO SELECT를 사용하여 MergeTree 테이블의 데이터를 Iceberg 테이블에 삽입합니다. 이 예제에서는 런던 거래만 삽입합니다:
Iceberg 테이블 쿼리
이제 데이터는 객체 스토리지에 Iceberg 형식으로 저장되며, ClickHouse 또는 Iceberg를 읽을 수 있는 다른 도구에서 쿼리할 수 있습니다:
집계 결과 저장
Iceberg 테이블은 원시 행만 저장하는 데 그치지 않습니다. 집계 및 변환의 출력, 즉 ClickHouse 내부에서 수행된 ETL 프로세스의 결과도 저장할 수 있습니다. 이는 사전 계산된 요약을 레이크하우스에 게시하여 후속 시스템에서 활용할 수 있도록 하는 데 유용합니다.
집계용 Iceberg 테이블 생성
집계 데이터 삽입
지역별 평균 부동산 가격을 계산하고 결과를 Iceberg에 직접 기록합니다:
집계된 테이블 쿼리하기
이제 다른 도구와 다른 ClickHouse 인스턴스에서 이 사전 계산된 데이터세트를 읽을 수 있습니다: