Delta Lake Generated Columns — 파티션 필터를 자동으로 유도한다
Delta Lake Generated Columns 및 Spark 다중 워터마크 정책 공식 문서 종합 (웹 리서치, 2026) — Databricks 공식 문서(delta/generated-columns), Apache Spark 공식문서(Structured Streaming Programming Guide — multiple watermarks) Databricks 공식문서 Delta Lake generated columns
이 모듈을 다 읽으면
- Generated Column이 spark-learn-73의 CHECK 제약과 같은 GENERATED 문법을 쓰면서도 목적이 어떻게 다른지 설명할 수 있다
- spark-learn-35의 파티션 프루닝이 Generated Column을 통해 어떻게 자동으로 일어나는지 설명할 수 있다
spark-learn-35에서 다룬 파티션 프루닝(파티션 키 컬럼으로 필터링해 스캔 범위를 줄임)을 전제로, 사용자가 파티션 키를 직접 필터링하지 않아도 다른 컬럼의 표현식만으로 그 프루닝이 자동으로 일어나게 하는 Generated Column을 정리한다.
GENERATED ALWAYS AS — 다른 컬럼에서 값을 유도한다
GENERATED [ALWAYS | BY DEFAULT] AS (표현식) 문법으로 다른 컬럼의 값에서 자동으로 계산되는 컬럼을 정의할 수 있다 — 표현식은 같은 테이블의 다른 컬럼을 참조할 수 있지만, 다른 테이블을 참조하거나 비결정적(nondeterministic) 함수를 쓸 수는 없다. spark-learn-73에서 다룬 CHECK 제약이 '값이 조건을 만족하는지 검증'하는 목적이었다면, Generated Column은 '값 자체를 다른 컬럼으로부터 자동으로 만들어내는' 목적이라는 점에서 다르다 — 같은 GENERATED 문법을 공유하지만 용도가 다른 기능이다.
핵심 포인트
- GENERATED [ALWAYS|BY DEFAULT] AS (표현식): 같은 테이블의 다른 컬럼에서 값을 자동 계산 — 다른 테이블 참조·비결정적 함수 불가
- spark-learn-73의 CHECK 제약(값 검증)과 같은 문법을 공유하지만, Generated Column은 '값 생성'이 목적이라는 점에서 용도가 다름
이걸 파티션 키로 쓰면 — spark-learn-35의 프루닝이 자동으로 유도된다
이 기능의 가장 강력한 용도는 파티션 키다 — 예를 들어 eventDate 컬럼을 GENERATED ALWAYS AS (CAST(eventTime AS DATE))로 정의해 파티션 키로 쓰면, 사용자가 실제 쿼리에서 eventDate를 직접 필터링하지 않고 eventTime으로만 조건(WHERE eventTime >= '2020-10-01 00:00:00' AND eventTime <= '2020-10-01 12:00:00')을 걸어도, Delta Lake가 그 조건으로부터 date=2020-10-01이라는 파티션 필터를 자동으로 유도해 spark-learn-35의 파티션 프루닝을 그대로 적용한다. CAST(...AS DATE), YEAR/MONTH/DAY/HOUR 조합, SUBSTRING, 특정 패턴의 DATE_FORMAT 같은 표현식들이 이 자동 유도를 지원한다.
핵심 포인트
- eventDate = GENERATED ALWAYS AS (CAST(eventTime AS DATE))를 파티션 키로 쓰면, eventTime 조건만 걸어도 파티션 필터를 자동 유도해 프루닝 적용
- 자동 유도를 지원하는 표현식: CAST(...AS DATE), YEAR/MONTH/DAY/HOUR 조합, SUBSTRING, 특정 패턴의 DATE_FORMAT 등