dbt from scratch

성숙한 dbt 프로젝트를 어떻게 만들어가는지에 대한 동영상을 리뷰해 봅니다.

2023-04-23

소개

본 글은 다음 동영상의 내용을 정리 합니다.

dbt에 대한 소개글은 다음의 링크를 참고 부탁 드립니다.

dbt 프로젝트에서 성숙도(maturity)란

  • Feature completeness
    • 데이터 모델 테스트, 문서화 같은 dbt의 모든 기능를 사용하고 있는가?
  • Feature depth
    • dbt 기능의 모든 장점을 활용하고 있는가?
    • dbt 기능을 적절하게 사용하고 있는가?
    • dbt 기능을 보다 효율적으로 사용하고 있는가?

대상 환경

예시로 설명할 전자 의료 기록 회사는 다음의 raw 데이터를 가지고 있습니다.

doc_specialties, doctors, patients, claims, claim_notes, claim_diagnosis

Level 1: Infancy, Baby's first model

https://github.com/dbt-labs/dbt-project-maturity/tree/main/1-infancy

최소한의 dbt 기능을 사용하는 단계 입니다.

한개 또는 그 이상의 sql 구문만 있고 dbt run 명령만 실행하는 단계 입니다.

Level 2: Toddlerhood

https://github.com/dbt-labs/dbt-project-maturity/tree/main/2-toddlerhood

models/source.yml 파일을 사용하여 warehouse의 데이터를 기술합니다. 모든 raw 데이터는 source 매크로를 사용하여 참조합니다.

models/schema.yml 파일을 사용하여 transform 결과 테이블을 기술합니다. 모든 transform 테이블은 ref 매크로를 사용하여 참조합니다.

{{ ref() }}, {{ source() }} 매크로를 사용하여 lineage를 파악할 수 있습니다. 모듈화와 테스트, 문서화를 시작 합니다.

dbt seed, dbt run, dbt test, dbt docs 등의 명령을 사용합니다.

Level 3: Childhood

https://github.com/dbt-labs/dbt-project-maturity/tree/main/3-childhood

Staging(stg), Intermediate(int), Final(fact, fct) 레이어로 모델을 나눕니다.

Staging 레이어는 가벼운 transformation 이나 cleansing을 수행합니다. Intermediate는 aggregation 등과 같이 해상도를 높이는 변형을 수행합니다. Final에서는 join 등과 같이 각 테이블을 조합한 결과를 얻습니다.

관련하여 더 깊이있는 설명은 다음 포스팅을 참고 합니다.

Data modeling techniques for more modularity

이렇게 함으로서 다음 단계로 가기위한, 확장 가능한 기반 구조를 만듦니다. 확장 중에도 퀄리티를 보장할 수 있으며, 이렇게 하지 않을 경우 기술 부채가 늘어납니다.

Level 4: Adolescence

https://github.com/dbt-labs/dbt-project-maturity/tree/main/4-adolescence

dbt deps 등의 명령을 활용하여 dbt 커뮤니티에서 제공하는 오픈소스 패키지들을 활용합니다. 유사하고 비슷한 문제를 해결하기위해 커뮤니티와 협업할 수 있습니다.

macro를 활용하여 sql 구문의 재 사용성하여 모델 개발 속도를 높입니다.

퍼포먼스 향상을 위해 incremental model을 적용합니다.

다음과 같은 freshness 테스트를 적용하여 깊이있는 정보를 전달합니다.

Source freshness | dbt Developer Hub

다른 참여자들을 위해 풍부한 정보를 가지는 테이블(dim)을 만들어 dbt 사용 접접을 늘려 조직내의 영향력을 넓힘니다. 자연스럽게 프로젝트의 영역도 넓어집니다.

이렇게 하지 않을 경우, dbt 프로젝트의 참여자를 늘리기 어렵습니다.

Level 5: Adulthood

https://github.com/dbt-labs/dbt-project-maturity/tree/main/5-adulthood

macro를 hook, 운영 스크립팅, testing 활용하여 dbt 프로젝트를 하나의 제품으로 향상시킬 수 있습니다.

exposures.yaml을 사용하여 외부 참조를 기술하여 풍부한 메타데이터 구성하고 다른 툴들과 연동합니다.

Loading script...