← 학습 카테고리

Learn

Spark

84개 모듈 · 현재 73번째

Spark 모듈 73/84 spark-learn-73

Delta Lake CHECK/NOT NULL 제약 — 스키마를 넘어 값 자체를 검증한다

Delta Lake CHECK/NOT NULL 제약 및 Spark DataSource V2 API 공식 문서 종합 (웹 리서치, 2026) — Databricks 공식 문서(ALTER TABLE ADD CONSTRAINT), Apache Spark 공식문서(Data Source V2) Databricks 공식문서 ALTER TABLE ADD CONSTRAINT

이 모듈을 다 읽으면

  • CHECK 제약이 spark-learn-69의 Schema Enforcement(형태만 검증)와 어떻게 다른 층위의 검증인지 설명할 수 있다
  • 제약을 위반하는 쓰기가 어떻게 처리되는지 설명할 수 있다

spark-learn-69에서 다룬 Delta Lake의 Schema Enforcement가 '컬럼 이름·타입이 맞는가'를 검증했다면, 이 모듈은 '그 안의 값 자체가 조건을 만족하는가'까지 검증하는 CHECK/NOT NULL 제약을 정리한다.

Schema Enforcement의 다음 층위 — 형태가 아니라 값을 검증한다

spark-learn-69의 Schema Enforcement는 쓰려는 데이터의 컬럼 이름·타입이 테이블 스키마와 맞는지를 검증했다 — 이건 '형태(shape)' 검증이다. CHECK 제약은 여기서 한 단계 더 나아가 '그 값 자체가 특정 조건을 만족하는가'를 검증한다. ALTER TABLE ... ADD CONSTRAINT 구문으로 추가하며, 예를 들어 ALTER TABLE my_table ADD CONSTRAINT age_less_than CHECK (age < 100) 같은 임의의 불리언 표현식을 조건으로 걸 수 있다. NOT NULL 제약은 CHECK의 특수한 경우로, 특정 컬럼에 NULL 값이 들어오는 것 자체를 막는다.

핵심 포인트

  • Schema Enforcement(spark-learn-69): 컬럼 이름·타입이 맞는지(형태) 검증 → CHECK 제약: 그 값 자체가 조건을 만족하는지(내용) 검증
  • ALTER TABLE ... ADD CONSTRAINT로 임의의 불리언 표현식 조건 추가(예: age < 100), NOT NULL은 CHECK의 특수 케이스

위반 시 동작 — 쓰기 자체가 거부된다

제약이 테이블에 추가되고 나면, 그 조건을 위반하는 데이터를 append(추가)하려는 시도는 에러를 던지며 실패한다 — spark-learn-69의 Schema Enforcement가 형태가 안 맞는 쓰기를 거부했던 것과 정확히 같은 '기본은 거부' 철학이 값 검증에도 이어지는 것이다. 이 제약 정보는 테이블 메타데이터(설정) 안에 delta.constraints.<제약이름> 형태의 키로 저장돼, 이후 그 테이블에 쓰는 모든 쓰기 경로(배치·스트리밍 모두)에 일관되게 적용된다.

핵심 포인트

  • 제약을 위반하는 append는 에러로 즉시 거부 — Schema Enforcement와 같은 '기본은 거부' 철학이 값 검증에도 적용
  • 제약은 테이블 메타데이터에 delta.constraints.<이름>으로 저장돼 배치·스트리밍 모든 쓰기 경로에 일관 적용