본문 바로가기

데이터엔지니어링

[10주차] Airflow 고급 기능, DBT와 Data Catalog (4)

🙂 DBT

Data Build Tool

✔ dbt 구성 컴포넌트

  • 데이터 모델 (models)
    • 테이블을 몇 개의 티어로 관리
      • 일종의 CTAS, Lineage 트래킹
    • Table, View, CTE 등
  • 데이터 품질 검증 (tests)
  • 스냅샷 (snapshots)

✔ dbt 사용 시나리오

  • 데이터 변경 사항을 이해하기 쉽고 필요하다면 롤백
  • 데이터간 Lineage 확인 가능
  • 데이터 품질 테스트 및 에러 보고
  • Fact 테이블의 증분 로드 (Incremental Update)
  • Dimension 테이블 변경 추적 (히스토리 테이블)
  • 용이한 문서 작성

보통 사용하는 테크 스택


✔ dbt Models: Input

🍦 Model

  • ELT 테이블을 만듦에 있어 기본이 되는 빌딩블록
    • 테이블이나 뷰나 CTE의 형태로 존재
  • 입력, 중간, 최종 테이블을 정의하는 곳
    • raw => staging (src) => core

🍦 View

  • Select 결과를 기반으로 만들어진 가상 테이블
    • 기존 테이블의 일부 혹은 여러 테이블을 조인한 결과를 제공
    • CREATE VIEW 이름 AS SELECT ...
  • 장점
    • 데이터의 추상화: 사용자는 View를 통해 필요 데이터에 직접 접근. 원본 데이터를 알 필요 X
    • 데이터 보안: View를 통해 사용자에게 필요한 데이터만 제공. 원본 데이터 접근 불필요
    • 복잡한 쿼리의 간소화: SQL(View)을 사용하면 복잡한 쿼리 단순화
  • 단점
    • 매번 쿼리가 실행되므로 시간 소요
    • 원본 데이터의 변경을 모르면 실행 실패

🍦 Model 구성요소

  • Input
    • 입력(raw)과 중간(staging, src) 데이터 정의
    • raw는 CTE로 정의
    • staging은 View로 정의
  • Output
    • 최종(core) 데이터 정의
    • core은 Table로 정의
  • 이 모두는 models 폴더 밑에 sql 파일로 존재
    • 기본적으로는 SELECT + Jinja 템플릿과 매크로
    • 다른 테이블 사용 가능 (reference)

✔ dbt Models: Output

🍦 Materialization

  • 입력 데이터(테이블)를 연결해서 새로운 데이터(테이블) 생성하는 것
    • 추가 transformation이나 데이터 클린업 수행
  • 4가지의 내장 materialization 제공
    • View: 데이터를 자주 사용하지 않는 경우
    • Table: 데이터를 반복해서 자주 사용하는 경우
    • Incremental (Table Appends): 과거 레코드를 수정할 필요가 없는 경우
    • Ephemeral (CTE): 한 SELECT에서 자주 사용되는 데이터를 모듈화하는데 사용
  • 파일이나 프로젝트 레벨에서 가능
  • dbt run을 기타 파라미터를 가지고 실행