Do you know DBT?�- DBT로 쉽게 모델링하기
김도진 | 당근
발표자 소개
김도진
오늘 전달드릴 이야기
이런 분들이 들으면 좋아요
이런 내용들은 다루지 않아요
오늘 전달드릴 이야기
당근 데이터 가치화팀이 어떤 문제의식에서 출발하여 DBT를 도입하게 된 배경과 그 과정, 그리고 앞으로의 계획을 공유하려고 합니다.
용어
DBT에 대한 간단한 설명
: DBT는 ETL에서 T를 SQL과 Yaml만으로 할 수 있게 해주는 워크플로우 툴입니다. 데이터 테스트나 모듈화 등 소프트웨어 엔지니어링적인 역량을 갖추게 해줍니다.
참고: DBT 공식 문서
당근 소개
당근 소개
당근에서의 지표 (당근 지표 플랫폼 Karrotmetrics)
당근에서의 실험 (당근 실험플랫폼)
Part 1 - 당근이 겪은 문제와 DBT 도입 배경
문제 의식
데이터 보는 것이 어려워요
문제 의식
데이터 보는 것이 어려워요
보고 싶은 데이터가 있는데 무엇을 봐야할지 모르겠어요
문제 의식
데이터 보는 것이 어려워요
보고 싶은 데이터가 있는데 무엇을 봐야할지 모르겠어요
다른 팀의 데이터를 보고 있는데 무슨 의미인지 모르겠어요
문제 의식
데이터 보는 것이 어려워요
보고 싶은 데이터가 있는데 무엇을 봐야할지 모르겠어요
다른 팀의 데이터를 보고 있는데 무슨 의미인지 모르겠어요
이 데이터는 신뢰할 수 있나요?
문제 의식
데이터 보는 것이 어려워요
보고 싶은 데이터가 있는데 무엇을 봐야할지 모르겠어요
다른 팀의 데이터를 보고 있는데 무슨 의미인지 모르겠어요
이 데이터는 신뢰할 수 있나요?
A,B,C 데이터 중에 어떤걸 사용해야 해요? �: A는 이제 사용안한다고요!?
문제 의식
데이터 보는 것이 어려워요
보고 싶은 데이터가 있는데 무엇을 봐야할지 모르겠어요
다른 팀의 데이터를 보고 있는데 무슨 의미인지 모르겠어요
이 데이터는 신뢰할 수 있나요?
X 정보를 얻기 위해 1000줄 쿼리를 만들고 관리해야 해요
A,B,C 데이터 중에 어떤걸 사용해야 해요? �: A는 이제 사용안한다고요!?
문제 의식 - 시나리오
A
B
C
D
방문한 유저의 1/3이 A피드를 보고 결제를 했어요!
요리조리, 이런저런 로직
문제 의식 - 시나리오
A
B
C
D
방문한 유저의 1/3이 A피드를 보고 결제를 했어요!
요리조리, 이런저런 로직
팀장님: �그러면 B피드를 보고 결제한 유저는 얼마나 되나요?
문제 의식 - 시나리오
A
B
C
D
방문한 유저의 1/3이 A피드를 보고 결제를 했어요!
요리조리, 이런저런 로직
팀장님: �그러면 B피드를 보고 결제한 유저는 얼마나 되나요?
나:
잠시만요 (방문한 유저 JOIN, B 피드 본 유저 JOIN, 결제한 유저 JOIN…) 1/6이네요!
문제 의식 - 시나리오
A
B
C
D
방문한 유저의 1/3이 A피드를 보고 결제를 했어요!
요리조리, 이런저런 로직
팀장님: �그러면 B피드를 보고 결제한 유저는 얼마나 되나요?
나:
잠시만요 (방문한 유저 JOIN, B 피드 본 유저 JOIN, 결제한 유저 JOIN…) 1/6이네요!
팀장님:
어떤 로직으로 계산하신거죠?
문제 의식 - 시나리오
A
B
C
D
방문한 유저의 1/3이 A피드를 보고 결제를 했어요!
요리조리, 이런저런 로직
팀장님: �그러면 B피드를 보고 결제한 유저는 얼마나 되나요?
나:
잠시만요 (방문한 유저 JOIN, B 피드 본 유저 JOIN, 결제한 유저 JOIN…) 1/6이네요!
팀장님:
어떤 로직으로 계산하신거죠?
나:
A JOIN B LEFT JOIN C LEFT JOIN D WHERE A.type = “A”
문제 의식 - 시나리오
A
B
C
D
방문한 유저의 1/3이 A피드를 보고 결제를 했어요!
요리조리, 이런저런 로직
팀장님: �그러면 B피드를 보고 결제한 유저는 얼마나 되나요?
나:
잠시만요 (방문한 유저 JOIN, B 피드 본 유저 JOIN, 결제한 유저 JOIN…) 1/6이네요!
팀장님:
어떤 로직으로 계산하신거죠?
나:
A JOIN B LEFT JOIN C LEFT JOIN D WHERE A.type = “A”
팀장님:
A.type이 아니고 B.type으로 필터해야할 것 같은데요? B 데이터가 원래 그래요…
문제 의식
데이터 보는 것이 어려워요 쉬워요
문제 의식
데이터 보는 것이 어려워요 쉬워요
=> 잘 만들어진 정보가 있어야 한다
문제 의식
원하는 데이터 만드는 것이 어려워요…!
문제 의식
쉽게 데이터를 볼 수 있으려면…
신뢰할 수 있는 정보들이 �지속적으로 만들어지고 관리되어야 하고,
정보를 만드는 것이 쉬워야 해요
DBT 도입 배경
신뢰할 수 있는 정보들이 지속적으로 만들어지고 관리되기 위해서는
DBT 도입 배경
DBT 도입 배경
2. 사용자들에 대한 정보를 정의하고 이해할 수 있는 도메인 지식
DBT 도입 배경
데이터 엔지니어 역량 갖춘 사람 + 도메인 지식
VS
도메인 지식 갖춘 사람 + 데이터 엔지니어링 역량
DBT 도입 배경
현실
DBT 도입 배경
도메인 지식을 가지고 있는 구성원이 �데이터 엔지니어링 역량을 발휘할 수 있도록 도와주는 것이 더 확장성 있는 방안
Part 2 - DBT 도입 과정
DBT - Are you 만병통치약?
DBT with Airflow가 모든 회사의 모든 문제를 해결해 줄 수 있는 �Silver Bullet은 아닙니다.
데이터의 형태, 적재된 장소, 도메인, 비즈니스 니즈, 데이터 리터러시, 데이터 문화, 회사의 일하는 방식에 따라서 문제를 해결하는 방법은 달라질 수 있습니다. 그리고, DBT가 있기 전에 이미 사내에 비슷한 플랫폼을 구축하고 이미 잘 사용하고 있었더라면 더더욱 DBT를 꼭 도입해야할지 두번 고민하시길 바랍니다.
DBT 도입 과정
Why DBT & Airflow?
: yaml과 sql만으로 원하는 곳에 원하는 정의, 방식대로 데이터를 가공해서 저장할 수 있음
: DBT 모델간 의존성 기능을 통해 특정 모델이 실행되고 나서 다음 모델이 실행되게 할 수 있음. 가공된 DBT 모델
데이터에 대해 테스트 할 수 있음 (ex. NOT NULL, UNIQUE…)
: 모델의 정의와 각 컬럼들에 대한 정의 및 설명을 통해 모델에 대한 도큐먼트화가 자동으로 됨
: 반복되는 로직을 재사용성 있는 포맷으로 만들 수 있음
: 주기적인 스케줄링을 통해 최신 데이터가 모델에 반영될 수 있음
: 모델이 실제로 실행되었는지, 실패된 경우가 있는지 모니터링 가능. 실패했을 때 빠르게 인지 가능.
DBT 도입 과정
Why DBT & Airflow?
: yaml과 sql만으로 원하는 곳에 원하는 정의, 방식대로 데이터를 가공해서 저장할 수 있음
: DBT 모델간 의존성 기능을 통해 특정 모델이 실행되고 나서 다음 모델이 실행되게 할 수 있음. 가공된 DBT 모델
데이터에 대해 테스트 할 수 있음 (ex. NOT NULL, UNIQUE…)
: 모델의 정의와 각 컬럼들에 대한 정의 및 설명을 통해 모델에 대한 도큐먼트화가 자동으로 됨
: 반복되는 로직을 재사용성 있는 포맷으로 만들 수 있음
: 주기적인 스케줄링을 통해 최신 데이터가 모델에 반영될 수 있음
: 모델이 실제로 실행되었는지, 실패된 경우가 있는지 모니터링 가능. 실패했을 때 빠르게 인지 가능.
user_id | status | created_at |
1 | STATUS1 | 2024-04-10 |
2 | DEFAULT | 2024-04-29 |
3 | STATUS3 | 2024-04-01 |
DBT 도입 과정
Why DBT & Airflow?
2. Data Quality
: DBT 모델간 의존성 기능을 통해 특정 모델이 실행되고 나서 다음 모델이 실행되게 할 수 있음. 가공된 DBT 모델
데이터에 대해 테스트 할 수 있음 (ex. NOT NULL, UNIQUE…)
DBT 도입 과정
Why DBT & Airflow?
3. Documentation
: 모델의 정의와 각 컬럼들에 대한 정의 및 설명을 통해 모델에 대한 도큐먼트화가 자동으로 됨
: 반복되는 로직을 재사용성 있는 포맷으로 만들 수 있음
: 주기적인 스케줄링을 통해 최신 데이터가 모델에 반영될 수 있음
: 모델이 실제로 실행되었는지, 실패된 경우가 있는지 모니터링 가능. 실패했을 때 빠르게 인지 가능.
DBT 도입 과정
Why DBT & Airflow?
4. Reusability
: 반복되는 로직을 재사용성 있는 포맷으로 만들 수 있음
. 실패했을 때 빠르게 인지 가능.
user model
a model
b model
c model
macros
DBT 도입 과정
Why DBT & Airflow?
5. Data Freshness
: 주기적인 스케줄링을 통해 최신 데이터가 모델에 반영될 수 있음
. 실패했을 때 빠르게 인지 가능.
DBT 도입 과정
Why DBT & Airflow?
6. Observability
: 모델이 실제로 실행되었는지, 실패된 경우가 있는지 모니터링 가능. 실패했을 때 빠르게 인지 가능.
. 실패했을 때 빠르게 인지 가능.
DBT 도입 과정
DBT 도입 과정
DBT x Airflow를 사용하면 데이터를 만드는 것은 쉬워지지만…구조나 규칙이 없다면?
DBT 도입 과정
DBT x Airflow를 사용하면 데이터를 만드는 것은 쉬워지지만…구조나 규칙이 없다면?
DBT 도입 과정
그 중에서 “직관적이고 쉬운 형태의 구조화"가 있어야 도메인 지식을 아는 구성원이 데이터 엔지니어링 역량을 쉽게 갖출 수 있을 것이라고 생각했습니다.�
DBT 도입 과정 - 구조화
그렇다면 사용자에 대해 평소에 알아가는 과정은 어떻게 되지?
DBT 도입 과정 - 구조화
그렇다면 사용자에 대해 평소에 알아가는 과정은 어떻게 되지?
DBT 도입 과정 - 구조화
그렇다면 사용자에 대해 평소에 알아가는 과정은 어떻게 되지?
DBT 도입 과정 - 구조화
그렇다면 사용자에 대해 평소에 알아가는 과정은 어떻게 되지?
DBT 도입 과정 - 구조화
그렇다면 사용자에 대해 평소에 알아가는 과정은 어떻게 되지?
DBT 도입 과정 - 구조화
그렇다면 사용자에 대해 평소에 알아가는 과정은 어떻게 되지?
DBT 도입 과정 - 구조화
그렇다면 사용자에 대해 평소에 알아가는 과정은 어떻게 되지?
DBT 도입 과정 - 구조화
그렇다면 사용자에 대해 평소에 알아가는 과정은 어떻게 되지?
보통 3) > 6) 으로 때 중간 단계들을 따로 만들지 않고 6)에 해당하는 데이터를 만들어두거나, 따로 저장하지 않고 일회성으로 사용하고 있는 경우가 많다.
DBT 도입 과정 - 구조화
데이터로 정보를 만들기 위한 과정을 살펴보고 이를 구조화했습니다
DBT 도입 과정 - 개발
DBT로 Base, Fact, Dimension 형태로 모델링하고, 이를 Airflow가 주기적으로 실행할 수 있게 하기
DBT 도입 과정 - 개발
HOW?
| 하나의 Airflow Operator에서�dbt run >> dbt test | 특정 단위로 묶어서 Airflow Operator에서 �dbt run >> dbt test | 모든 dbt model들을 각각의 Airflow Operator에서 �dbt run >> dbt test |
좋은 점 👍 |
|
|
|
아쉬운 점 👎 |
|
|
|
DBT 도입 과정 - 개발
HOW?
| 하나의 Airflow Operator에서�dbt run >> dbt test | 특정 단위로 묶어서 Airflow Operator에서 �dbt run >> dbt test | 모든 dbt model들을 각각의 Airflow Operator에서 �dbt run >> dbt test |
좋은 점 👍 |
|
|
|
아쉬운 점 👎 |
|
|
|
DBT 도입 과정 - 개발
HOW?
| 하나의 Airflow Operator에서�dbt run >> dbt test | 특정 단위로 묶어서 Airflow Operator에서 �dbt run >> dbt test | 모든 dbt model들을 각각의 Airflow Operator에서 �dbt run >> dbt test |
좋은 점 👍 |
|
|
|
아쉬운 점 👎 |
|
|
|
DBT 도입 과정 - 개발
: DBT 모델들을 의존성대로 Airflow task로 만들어주는 패키지
DBT 도입 과정 - 개발
DBT로 Base, Fact, Dimension 형태로 모델링하고, �이를 Astronomer Comos를 활용해서 Airflow task로 만들고,�Airflow가 scheduling interval, 타임존 등에 따라 주기적으로 실행할 수 있게 하기
DAILY - Asia
DAILY - North America
HOURLY…
…
DBT 도입 과정 - 개발
Astronomer Cosmos는 Silver Bullet이 아닙니다.
DBT 도입 과정 - 개발
그래도 계속 발전중 …
Part 3 - DBT 사용
DBT 사용 - 구조화
: 데이터 인프라가 Data Warehouse에 적재한 원천 데이터를 의미해요
: 원천 데이터를 한 번 가공한 기본 데이터 (DBT의 staging이라고도 볼 수 있음). 여기서 가공은 “필요한 컬럼들 SELECT, 문제 있는 데이터의 수정, 데이터 타입의 Casting” 등을 의미해요.
: User, Product와 같은 특정 개체의 속성값을 갖고 있는 계층이예요.
: “어떠한 X가 Y했다”를 반드시 담고 있는 레이어이며, 여기에는 사용자 행동 데이터, 객체의 생성 및 변화 이벤트가 포함될 수 있어요. 이전 예제에서 “유저가 피드를 보고 결제했다"와 같은 행동을 예시로 들 수 있어요.
DBT 사용 - 규칙
Base Layer
DBT 사용 - 규칙
Dimension Layer
DBT 사용 - 규칙
Fact Layer
DBT 사용 - sql
ㅍ
reference
ㅍ
macros
DBT 사용 - macros
snapshot으로 저장하는 macros
bigquery query에 custom label추가하는 macros
DBT 사용 - yaml
materialization
partitioning, clustering
versioning
ㅍ
DBT 사용 - Airflow 주기적 적재 - 테스트
DBT 사용 - Airflow 주기적 적재 - 테스트
DBT 사용 - Airflow 관측성
DBT 사용 - 개발
DBT 사용 - Docs
DBT 사용 - Docs
DBT 사용 - Docs
DBT 사용 - Good Points
SELECT
a.userId AS user_id
…
FROM table_a AS a
LEFT JOIN table_b AS b
ON a.userId = b.user_id
WHERE deleted IS NULL
AND a.userId IS NOT NULL
AND status = “SOMETHING”
AND type IN (“A”, “B”)
…
SELECT
*
FROM users_bought_something
+) 복잡한 쿼리를 많이 할 필요가 없어 비용 효율성도 증가
DBT 사용 - Good Points
+) 도메인 지식을 갖춘 구성원이 직접 만든 SQL 로직 + 데이터 테스트
+) 모델의 변경사항이 필요하면 원천 데이터를 업데이트 하지 않고 모델을 변경하면 됨.
DBT 사용 - Good Points
+) Documentation을 통해 각 모델들에 대한 정의와 설명, 비즈니스 로직을 볼 수 있음
DBT 사용 - Good Points
솔직히 어려운 부분 🙏 �데이터 가치화팀도 노력하고 있는 부분
Part 4 - 앞으로의 계획
앞으로의 계획
쉬운 정보 생산
앞으로의 계획
쉬운 정보 사용
채용 + Q&A