dbt Model을 사용해 입력 데이터들을 transform해보자
dbt에서 Model 이란?
- ELT 테이블을 만듦에 있어 기본이 되는 빌딩 블록
- 테이블이나 뷰(View)나 CTE의 형태로 존재
- 입력, 중간, 최종 테이블을 정의하는 곳
- 티어 (raw, staging, core 등)
- raw→ staging(src 뷰형태) →core(최종 테이블 형태)
여기서 View란?!
SELECT 결과를 기반으로 만들어지는 가상 테이블 형태!
CREATE VIEW 이름 AS SELECT … 형태로 코딩
- View의 장점
- 원본 테이터를 따로 알 필요 없이 view 데이터로만 데이터에 접근
- 복잡한 쿼리의 간소화 : SQL(view)를 사용하면 복잡한 쿼리를 단순화
- View의 단점
- 매번 쿼리가 실행되므로 시간이 걸릴 수 있다.
- 원본 데이터의 업데이트 내용을 잘 파악해야 됨.
Model 구성 요소
- 입력(raw)과 중간(staging, src) 데이터 정의
- raw는 CTE(WITH 구문)로 정의
- staging는 View로 정의
Output
- 최종(core) 데이터 정의
- core는 Table로 정의
이 모두는 models 폴더 밑에 sql 파일로 존재
- 기본적으로는 SELECT + Jinja 템플릿과 매크로
- 다른 테이블들을 사용 가능 (reference)
데이터 빌딩 프로세스 시각화
- Raw Data의 데이터를
- Staging에 그대로 copy 또는 정제후 적재
- Staging는 Table, View, CTE, Append 등의 타입으로 존재할 수 있다.
- Staging테이블을 최종적으로 Core 테이블에 적재 후 Model을 추출(Output)!

Staging 예시 코드
CTE형태로 데이터를 뽑아 온 뒤 쿼리문 적용
- models/src - src_user_event.sql
WITH src_user_event AS (
SELECT * FROM raw_data.user_event
)
SELECT
user_id,
datestamp,
item_id,
clicked,
purchased,
paidamount
FROM
src_user_event
- models/src - src_user_variant.sql
WITH src_user_variant AS (
SELECT * FROM raw_data.user_variant
)
SELECT
user_id,
variant_id
FROM
src_user_variant
- models/src - src_user_metadata.sql
WITH src_user_metadata AS (
SELECT * FROM raw_data.user_metadata
)
SELECT
user_id,
age,
gender,
updated_at
FROM
src_user_metadata
Model 빌딩: dbt run
dbt run이라는 명령어를 실행하면 모델링이 실행 되면서
아래와 같은 화면이 나온다.
이는 위에서 작성한 코드를 통해 만든 3개의 Model을 View Model의 형태로 만들어 줌.

Model 빌딩 확인
빌딩이 완료되면 Redshift 툴에 테이블이 생성 되었을 것이다.
주요 테이블은 갈색
View 테이블은 파란색으로 생성
