하는 일/데이터엔지니어링

[ 따라잡기 ] DuckDB + DBT 데이터 파이프라인 만들기 (3) - DBT Models

yeznable 2025. 2. 7. 17:31
728x90

아래 두 링크의 글을 매우 많이 참고하고 따라하면서 많이 배웠음을 밝힌다.

첨부한 링크 뿐만 아니라 블로그에 있는 글들이 모두 많은 도움이 된다.

 

DuckDB 사용법(DuckDB Python + Jupyter Lab)

이 글은 DuckDB 사용법을 작성한 글입니다 예상 독자 DuckDB가 궁금하신 분 데이터 분석가 : Pandas가 느리다고 생각해서 다른 대안을 찾고 있는 분 데이터 엔지니어 : 데이터 엔지니어링의 Transform 영

zzsza.github.io

 

로컬 초경량 프로젝트 (DBT, DuckDB)

DBT를 배웠으니, 이제 로컬에서 한번 가볍게 데이터 파이프라인을 만들어보겠습니다. 물론, 스케줄링이 붙지않아 자동화되지 않겠지만, 추후에 에어플로우와 함께 프로젝트를 진행해보겠습니다

velog.io


DBT에서 다루는 모델들에 대해 궁금한 점이 있었고 그것에 대해 알아가는 과정을 따로 정리하는게 좋겠다 싶어서 남긴다.

 

dbt run 명령어로 실행을 하면 모든 모델들이 다시 실행이 된다.

데이터를 읽어오라는 모델이 있으면 데이터를 다시 읽어온다.

데이터 이름이 달라지거나 하면 완전 다른 모델(테이블)이 될 수 있다.

 

예를 들어서 다음과 같은 데이터가 있다.

 

그리고 다음과 같은 모델이 있다면 같은 이름의 테이블에 2월 1일에 dbt run을 했을 때의 결과와 2월 2일에 dbt run을 했을 때 결과가 다를 것이다.

{{ config(
    schema='stg',
    materialized='table'
) }}

WITH source_data AS (
    select *
	from concat('D:\\DBT_DuckDB\\data\\새폴더\\dataType1_',strftime(current_date,'%Y%m%d'),'_*.json')
)
SELECT *
FROM source_data

 

데이터 파일에서 바로 쿼리할 수 있기 때문에 항상 모든 데이터를 DB에 올릴 필요가 없어 위와 같은 경우가 저장 공간 관리에 유용할 것 같다.

 

테이블마다 데이터 누적이 필요한 경우가 있는데 그럴 때는 config에서 materialized를 table이 아닌 incremental로 설정하면 된다.

이때는 unique_key를 같이 설정해줘야 하는데 한개 필드를 설정할 수도 있고 여러개의 필드를 설정할 수도 있다.

 

이를 활용한 모델의 예시는 다음과 같다.

{{ config(
    schema='mid',
    materialized='incremental',
    unique_key='sincedate'
) }}

WITH mid_yelping_since AS (
    select strftime(yelping_since,'%Y-%m-%d') as sincedate
        , count(user_id) as userCnt
        , count(distinct user_id) as uidCnt
        , sum(review_count) as reviewCnt_sum
        , sum(useful) as usefull_sum
        , sum(funny) as funny_sum
        , sum(cool) as cool_sum
    from {{ ref('stg_user') }}
    {% if is_incremental() %}
        WHERE sincedate not in (SELECT sincedate FROM {{ this }})
    {% endif %}
    group by sincedate
    order by sincedate
)
SELECT *
FROM mid_yelping_since

 

위의 개념은 내가 활용할 때 이러면 좋겠다고 정리해서 남겨놓는 것 뿐으로 다음 링크에 더 자세히 다양한 경우에 대해 정리되어있다.

 

dbt 사용법과 기본 개념

이 글은 dbt 사용법(Data Build Tool)을 작성한 글입니다 예상 독자 dbt가 궁금하신 분 마트 모델링을 해야 하는 데이터 분석가, 데이터 엔지니어 키워드 : dbt 사용법, dbt(data build tool), dbt 사용법, dbt 설

zzsza.github.io

 

728x90