공부를 하다/Databricks

Day 05. Delta Live Tables — 파이프라인을 선언만 하면 알아서 실행되는 구조

Banaaan 2026. 8. 1. 07:28

Airflow를 써봤다면 익숙한 패턴이 있다. 태스크 순서, 의존성, 재시도, 모니터링을 전부 코드로 직접 관리해야 했다. DLT는 그걸 선언만 하면 알아서 해준다.


기존 방식 vs DLT

# 기존 방식 - 직접 다 관리
df = spark.read.table("raw_orders")
df_clean = df.filter(col("amount") > 0)
df_clean.write.format("delta").saveAsTable("clean_orders")

# DLT 방식 - 선언만
@dlt.table
def clean_orders():
    return dlt.read("raw_orders").filter(col("amount") > 0)
  기존 방식 DLT
실행 순서 직접 관리 의존성 자동 파악
Delta Table 생성 직접 생성 자동 생성
에러 처리 직접 구현 자동 모니터링
데이터 품질 검사 직접 구현 Expectations로 선언

Bronze → Silver → Gold 패턴

DLT는 데이터를 3단계로 나눠서 관리한다.

[원천 데이터]
     ↓
[Bronze] 원본 그대로 저장
     ↓
[Silver] 필터링, 정제, 변환
     ↓
[Gold] 집계, 비즈니스 로직
     ↓
[분석가 / 대시보드]
단계 역할 예시
Bronze 원본 그대로 Kafka에서 받은 JSON 그대로
Silver 정제 amount > 0, null 제거
Gold 집계 일별 매출 합계

분석가로 일하면서 쿼리하던 테이블이 대부분 Gold 단계다.


Expectations (데이터 품질 검사)

@dlt.table
@dlt.expect("amount는 양수", "amount > 0")             # 위반해도 저장, 기록만
@dlt.expect_or_drop("id는 null 아님", "id IS NOT NULL") # 위반하면 행 제거
@dlt.expect_or_fail("치명적 오류", "date IS NOT NULL")  # 위반하면 파이프라인 중단
def silver_orders():
    return dlt.read("bronze_orders")
Expectation 위반 시
expect 기록만 남김
expect_or_drop 해당 행 제거
expect_or_fail 파이프라인 중단

실습 결과

원본 데이터 4행 중 amount가 음수인 행, order_date가 null인 행을 Silver에서 자동으로 걸러냈다.

단계 행 수 내용
Bronze 4행 원본 그대로 (잘못된 데이터 포함)
Silver 2행 조건 미충족 2행 제거
Gold 1행 2026-08-01 총 매출 47,000

카탈로그 구조

Databricks는 데이터를 3단계로 관리한다.

Catalog (databricks_practice)
└── Schema (default)
    ├── bronze_orders
    ├── silver_orders
    └── gold_daily_sales

테이블 풀네임: databricks_practice.default.silver_orders


DLT 실행 방법

DLT 코드는 일반 노트북에서 직접 실행하면 안 된다. Jobs & Pipelines에서 Pipeline을 만들고, 노트북을 소스로 연결해서 실행해야 한다.

1. Jobs & Pipelines → Pipeline 생성
2. Source code에 DLT 노트북 연결
3. Run pipeline으로 실행
4. Bronze → Silver → Gold 그래프 확인

DLT는 코드 디테일보다 개념이 중요하다. 어떤 상황에서 쓰는지, Expectations 중 어떤 걸 써야 하는지를 이해하는 것이 핵심이다. 다음은 Workflows다.