← 학습 카테고리

Learn

Spark

84개 모듈 · 현재 69번째

Spark 모듈 69/84 spark-learn-69

Delta Lake Schema Enforcement vs Schema Evolution — 기본은 거부, 옵션으로 허용

Delta Lake Schema Enforcement/Evolution 및 PySpark pandas_udf 타입 공식 문서 종합 (웹 리서치, 2026) — Delta Lake 공식 블로그(schema-enforcement, schema-evolution) + Apache Spark 공식문서(pyspark.sql.functions.pandas_udf) Delta Lake 공식 블로그 Schema Enforcement, Schema Evolution

이 모듈을 다 읽으면

  • Delta Lake가 기본적으로 스키마가 안 맞는 쓰기를 거부(schema enforcement)한다는 것과 그 이유를 설명할 수 있다
  • mergeSchema/autoMerge/overwriteSchema 세 옵션이 각각 어떤 다른 상황에 쓰이는지 구분할 수 있다

spark-learn-24에서 다룬 일반 Parquet의 mergeSchema(여러 버전 스키마를 읽을 때 병합)와 달리, 이 모듈은 Delta Lake 고유의 '쓰기 시점 기본 거부'라는 스키마 강제(schema enforcement) 철학과, 그 기본값을 의도적으로 완화하는 세 가지 옵션을 정리한다.

기본값은 '거부' — Schema Enforcement

Delta Lake는 기본적으로 쓰기 시점에 스키마를 강제한다 — 쓰려는 데이터의 스키마가 대상 테이블 스키마와 맞지 않으면, Delta는 테이블을 조용히 바꿔버리는 대신 그 쓰기 자체를 거부한다. 이는 spark-learn-24에서 다룬 일반 Parquet의 스키마 진화(자동은 아니지만 읽을 때 mergeSchema로 여러 버전을 관대하게 병합)와 결이 다르다 — Delta Lake는 '쓰기' 시점에 기본적으로 엄격하게 막아서, 예상 못 한 컬럼이 조용히 섞여 들어가는 사고를 원천 차단하는 쪽을 기본값으로 택한 것이다.

핵심 포인트

  • Delta Lake는 쓰기 시점에 스키마가 안 맞으면 기본적으로 쓰기 자체를 거부(schema enforcement) — 테이블을 조용히 바꾸지 않음
  • spark-learn-24의 일반 Parquet 스키마 진화(읽을 때 관대하게 병합)와 대비되는, '쓰기 시점 기본 엄격'이라는 Delta 고유의 철학

그 기본값을 완화하는 세 옵션 — mergeSchema/autoMerge/overwriteSchema

mergeSchema는 소스에는 있지만 대상 테이블에는 없는 컬럼을 추가하는 용도다 — 기존 컬럼은 지우지도, 타입을 바꾸지도 않는 순수 추가(additive)만 지원해서, 계속 진화하는 소스를 수집하는 ETL 파이프라인에 가장 흔히 쓰인다. autoMerge(spark.databricks.delta.schema.autoMerge.enabled)는 이 스키마 진화를 그 테이블에 대한 모든 쓰기에 자동으로 켜두는 설정으로, 편리하지만 매 쓰기마다 스키마 변경을 암묵적으로 허용한다는 위험도 함께 켜는 것이다. overwriteSchema는 완전히 다른 목적이다 — 기존 테이블 정의를 아예 새 DataFrame의 스키마로 통째로 교체하는 것이라, 컬럼을 지우거나 타입을 바꿀 수도 있고 그만큼 옛 스키마를 기대하는 다운스트림 소비자를 깨뜨릴 위험이 mergeSchema보다 훨씬 크다.

핵심 포인트

  • mergeSchema: 소스에만 있는 컬럼을 추가(순수 additive, 기존 컬럼 삭제·타입변경 없음) — ETL 파이프라인에서 가장 흔히 쓰임
  • autoMerge(spark.databricks.delta.schema.autoMerge.enabled): 스키마 진화를 테이블의 모든 쓰기에 자동 적용(편리하지만 암묵적 허용의 위험)
  • overwriteSchema: 테이블 스키마를 새 DataFrame 스키마로 통째로 교체 — 컬럼 삭제·타입변경 가능, 다운스트림을 깨뜨릴 위험이 셋 중 가장 큼