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
제약 조건 추가 실패 시 해결 방안
- 불량 레코드 삭제 후 제약 조건을 추가한다
- Bronze Table에서 데이터 적재 전에 필터링 로직 적용한다
데이터 품질 제어는 초기 레이어부터 신중히 적용해야 한다.
Delta Lake의 제약 조건은 데이터 품질을 보장하고, 트랜잭션 롤백 및 자동 검증을 제공한다.
제약 조건 삭제
ALTER TABLE orders_silver DROP CONSTRAINT timestamp_within_range;
'Data Engineering > Databricks' 카테고리의 다른 글
[databricks] 테이블 복사(CTAS , Shallow Clone, Deep Clone) (1) | 2025.06.09 |
---|---|
[databricks]Change Data Capture(CDC), Change Data Feed(CDF) (1) | 2025.06.05 |
[databricks] Slowly Changing Dimensions(SCD) (2) | 2025.06.05 |
[databricks] Struct Streaming Deduplication (1) | 2025.06.05 |
[databricks] Singleplex , Multiplex (0) | 2025.06.05 |