Parquet은 2013년에 Twitter와 Cloudera가 협력하여 개발한 오픈소스 프로젝트로 시작되었다. Google의 Dremel 논문(2010년)에서 영감을 받아 컬럼 저장 방식으로 설계되어 기존의 Apache Avro와 RCFile (Record Columnar File) 포맷의 단점을 보완하고자 만들어졌다.
이후 Apache Hadoop의 서브 프로젝트로 편입되면서, 현재는 빅데이터 분석 및 데이터 엔지니어링 분야에서 널리 사용되는 파일 포맷 중 하나가 되고있다.
Delta Lake는 2019년 Databricks에서 오픈소스로 공개한 프로젝트로, 기존의 Parquet 기반 데이터 레이크의 단점을 보완하기 위해 개발되었다. 전통적인 데이터 레이크는 Schema Enforcement(스키마 강제), ACID 트랜잭션, 데이터 품질 보장 등의 기능이 부족했으며, 이를 해결하기 위해 Delta Lake가 등장했다.
현재는 Linux Foundation의 프로젝트로 관리되며, Apache Iceberg, Apache Hudi와 함께 데이터 레이크의 발전을 이끄는 대표적인 솔루션이 되었다.
Delta Lake는 트랜잭션 로그에 메타 데이터를 저장하고 Parquet 파일에 테이블 데이터를 저장한다.


ACID 트랜잭션 지원
ACID 트랜잭션
ACID 트랜잭션은 데이터베이스 관리 시스템(DBMS)에서 데이터의 일관성과 무결성을 보장하기 위한 핵심 원칙이다. 네 가지 특성을 의미하며, 데이터의 신뢰성을 유지하는 데 필수적인 개념이다.
- Atomicity(원자성)
- Consistency(일관성)
- Isolation(고립성)
- Durability(지속성)
파일 목록 조회 최적화
메타데이터 관리
데이터 스키핑 및 Z-Ordering
Z-Ordering
Z-Ordering은 데이터 정렬 및 클러스터링 기법으로, 쿼리 성능을 최적화하기 위해 관련된 데이터를 물리적으로 가깝게 저장하는 방식이다. 특히, Delta Lake에서 데이터 파일을 효율적으로 정리하고, 특정 컬럼을 기준으로 쿼리 성능을 향상시키는 데 사용된다.
- Z-Ordering의 원리
Z-Ordering은 Z-Curve(지그재그 곡선) 정렬 방식을 기반으로 한다. 일반적인 정렬 방식은 단일 컬럼 기준으로 데이터를 정렬하지만, Z-Ordering은 다중 컬럼을 기준으로 데이터를 정렬하여 저장한다.
예를 들어, 국가(나라)와 도시 데이터를 포함하는 테이블을 생각해보자.
- 기본적으로 국가별 정렬을 하면 같은 나라의 데이터는 가깝게 배치되지만, 도시는 랜덤하게 섞일 수 있다.
- 반대로, 도시별로 정렬하면 같은 도시의 데이터는 가까워지지만, 국가별로는 섞일 수 있다.
- Z-Ordering을 적용하면 "국가 → 도시" 순서로 데이터를 정렬하면서도, 같은 나라의 도시는 서로 가까운 위치에 저장된다.
- Z-Ordering을 사용하는 이유
Delta Lake에서 데이터를 저장할 때, 일반적인 정렬 방식만 적용하면 쿼리 성능이 떨어질 수 있다.
예를 들어, 특정 컬럼을 기준으로 데이터를 필터링할 때, 해당 데이터가 여러 파일에 분산되어 있으면 불필요한 파일 스캔이 많아지고 성능이 저하된다.
Z-Ordering을 적용하면 관련된 데이터를 같은 블록(파일)에 배치하여 스캔해야 할 파일 개수를 줄일 수 있다.
행 수준의 삭제 및 업데이트 지원
변경 데이터 피드(Change Data Feed) 제공