[databricks] Delta Table 제약 조건 추가 및 위반처리
A A
728x90

 

 Delta 테이블에 제약 조건 추가
ALTER TABLE orders_silver 
ADD CONSTRAINT timestamp_within_range 
CHECK (order_timestamp >= '2020-01-01');
  • 제약 조건 이름: timestamp_within_range
  • 조건: 2020년 이후의 타임스탬프만 허용
 제약 조건 확인
DESCRIBE EXTENDED orders_silver;

 

테이블 속성에 아래와 같은 내용이 포함된다.

Table Properties: 
[delta.constraints.timestamp_within_range=order_timestamp >= '2020-01-01']

 

 조건을 위반하는 데이터 삽입 시도
INSERT INTO orders_silver 
VALUES 
  ('1', '2022-02-01 00:00:00.000', 'C00001', 0, 0, NULL),
  ('2', '2019-05-01 00:00:00.000', 'C00001', 0, 0, NULL), -- 위반
  ('3', '2023-01-01 00:00:00.000', 'C00001', 0, 0, NULL)

결과: 전체 쓰기 실패 (트랜잭션 롤백)

com.databricks.sql.transaction.tahoe.schema.DeltaInvariantViolationException

ACID 트랜잭션 보장이 이루어진다.

 추가 제약 조건 예시 (수량 > 0)
ALTER TABLE orders_silver 
ADD CONSTRAINT positive_quantity 
CHECK (quantity > 0);

실패 이유: 기존 테이블 내 일부 레코드가 조건을 위반하기 때문이다

AnalysisException: Constraint 'positive_quantity' violated by existing data

 

제약 조건 추가 실패 시 해결 방안
  1. 불량 레코드 삭제 후 제약 조건을 추가한다
  2. Bronze Table에서 데이터 적재 전에 필터링 로직 적용한다

 데이터 품질 제어는 초기 레이어부터 신중히 적용해야 한다.

Delta Lake의 제약 조건은 데이터 품질을 보장하고, 트랜잭션 롤백 및 자동 검증을 제공한다.

 

제약 조건 삭제
ALTER TABLE orders_silver DROP CONSTRAINT timestamp_within_range;
Copyright 2024. GRAVITY all rights reserved