dbt_base
Last updated
Last updated
dbt(Data Build Tool)λ κ°λ°μκ° BigQuery, Snowflake, Redshift λ±κ³Ό κ°μ μ΅μ λ°μ΄ν° μ¨μ΄νμ°μ€μμ λ³νμ μ μ, μ€μΌμ€νΈλ μ΄μ λ° μ€νν μ μλλ‘ νμ¬ λ°μ΄ν° λͺ¨λΈ ꡬμΆμ κ°μννλ Python μ€ν μμ€ λΌμ΄λΈλ¬λ¦¬μ λλ€.
ETL/ELT νλ‘μΈμ€μ Tμ μ΄μ μ λ§μΆ κ±°λ²λμ€ λꡬλΌκ³ λ§ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ SQLμμ λͺ¨λ λ°μ΄ν° λ³νμ μ€μ μ§μ€ννκ³ κ΅¬μΆνμ¬ μ¬μ¬μ© κ°λ₯ν λͺ¨λ(λͺ¨λΈ)λ‘ κ΅¬μ±ν μ μμ΅λλ€
dbtλ λ°μ΄ν° λͺ¨λΈλ§μ SQLλ‘ μ μνκ³ κ΄λ¦¬νλ©°, λͺ¨λΈμ΄ μ€νλ λ λ°μ΄ν°λ₯Ό μΆμΆ, κ°κ³΅ λ° μ μ₯ν μ μλλ‘ λμμ€λλ€.
dbtλ Git λ²μ κ΄λ¦¬ μμ€ν μ μ¬μ©νμ¬ λ°μ΄ν° λͺ¨λΈλ§ νμΌμ κ΄λ¦¬νλ©°, ν μ€νΈ, λ¬Έμν λ° λͺ¨λΈ μ’ μμ± κ΄λ¦¬ κΈ°λ₯λ μ 곡ν©λλ€.
μννΈμ¨μ΄ μμ§λμ΄λ§ κ΄νμμ μκ°μ λ°μ κ²μ¦ ν μ€νΈλ₯Ό λ§λ€κ³ λ°μ΄ν° νμ΄νλΌμΈμμ μ 체 CI/CD μ£ΌκΈ°λ₯Ό ꡬνν μ μμ΅λλ€.
dbtμ μ£Όμ κΈ°λ₯
μ½λ μ¬μ¬μ© : λ°μ΄ν° λͺ¨λΈμ μ μ λ° ν¨ν€μ§μ λ³ν ꡬμ±μ νμ©ν©λλ€.
νμ§ κ²μ¬μ λν κ°μ‘° : λ°μ΄ν° νμ§μ 보μ₯νκ³ λ³ν μ€λ₯λ₯Ό λ°©μ§νκΈ° μν΄ μλνλ ν μ€νΈμ μ¬μ©μ κΆμ₯ν©λλ€.
λ²μ μ μ΄ λ° νμ : Git, Bitbucket λ±κ³Ό κ°μ λ²μ μ μ΄ μμ€ν κ³Ό ν¨κ» μλνλλ‘ μ€κ³λμ΄ λ³κ²½ μ¬νμ μ½κ² μΆμ νκ³ κ°λ° νμ΄νλΌμΈμμ νμ ν μ μμ΅λλ€.
νμ₯μ± : BigQuery, Snowflake, Redshift λ±κ³Ό κ°μ μ΅μ λ°μ΄ν° μ¨μ΄νμ°μ€μ ν¨κ» μλνλλ‘ μ€κ³λμ΄ λμ©λ λ°μ΄ν° μ²λ¦¬λ₯Ό μ½κ² νμ₯ν μ μμ΅λλ€.
dbt μ¬μ©
dbt Core: λ‘컬 λλ μ체 μλ²μ μ€μΉλ μ€ν μμ€ λ²μ μ λλ€. CLI μ½μμ ν΅ν΄ μ΄λ£¨μ΄μ§λλ€.
dbt Cloud: Core λ²μ μ μΆκ° κΈ°λ₯(μ€ν μμ½, BI, λͺ¨λν°λ§ λ° κ²½κ³ )μ μ 곡νλ ν΄λΌμ°λ(SaaS)μμ νΈμ€ν λλ νλ«νΌμ λλ€. GUIκ° μμ΄ μ¬μ©νκΈ°κ° λ μ½μ΅λλ€. μ λ£ μκΈμ μΈμλ κ°λ°μλ₯Ό μν μ νλ λ¬΄λ£ λ²μ μ μ 곡ν©λλ€.
models
κ° λͺ¨λΈμ λ¨μΌ νμΌμ μμΌλ©° μμ λ°μ΄ν°λ₯Ό λΆμ μ€λΉκ° λ λ°μ΄ν° μΈνΈλ‘ λ³ννκ±°λ μ΄λ¬ν λ³νμ μ€κ° λ¨κ³μΈ λ‘μ§μ ν¬ν¨ν©λλ€.
snapshots
λμ€μ μ°Έμ‘°ν μ μλλ‘ λ³κ²½ κ°λ₯ν ν μ΄λΈμ μνλ₯Ό μΊ‘μ²νλ λ°©λ²μ λλ€.
seeds
dbtλ₯Ό μ¬μ©νμ¬ λ°μ΄ν° νλ«νΌμ λ‘λν μ μλ μ μ λ°μ΄ν°κ° ν¬ν¨λ CSV νμΌ.
tests
νλ‘μ νΈμ λͺ¨λΈ λ° λ¦¬μμ€λ₯Ό ν μ€νΈνκΈ° μν΄ μμ±ν μ μλ SQL 쿼리μ λλ€.
macros
μ¬λ¬ λ² μ¬μ¬μ©ν μ μλ μ½λ λΈλ‘μ λλ€.
docs
λΉλν μ μλ νλ‘μ νΈμ© λ¬Έμμ λλ€.
sources
μΆμΆ λ° λ‘λ λκ΅¬λ‘ μ¨μ΄νμ°μ€μ λ‘λλ λ°μ΄ν°μ μ΄λ¦μ μ§μ νκ³ μ€λͺ νλ λ°©λ²μ λλ€.
exposures
νλ‘μ νΈμ λ€μ΄μ€νΈλ¦Ό μ¬μ©μ μ μνκ³ μ€λͺ νλ λ°©λ²μ λλ€.
metrics
νλ‘μ νΈμ λν λ©νΈλ¦μ μ μνλ λ°©λ²μ λλ€.
analysis
νλ‘μ νΈμμ λΆμ SQL 쿼리λ₯Ό ꡬμ±νλ λ°©λ²μ λλ€.
SQL λͺ¨λΈμ 물리μ μΌλ‘ μ μ₯νλ λ°©μμ μλ―Ένλ©° 4κ°μ§μ λ°©μμ΄ μμ΅λλ€.
Table
SQL λͺ¨λΈμ νΉμ ν μ΄λΈλ‘ μ μ₯ν©λλ€.
λ§€μ° κ°λ¨ν λ°©μμΌλ‘ SQL λͺ¨λΈμ μ μ₯νλ©°, ν₯ν 쿼리 μν μ μ§μ ν μ΄λΈμμ λ°μ΄ν°λ₯Ό μ½μ΅λλ€.
View
SQL λͺ¨λΈμ λ·°(View)λ‘ μ μ₯ν©λλ€.
SQL λͺ¨λΈμ 쿼리ν λλ§λ€ μ€νλλ©°, κ²°κ³Όλ₯Ό μ¦μ λ°νν©λλ€.
Incremental
dbtκ° λ§μ§λ§μΌλ‘ μ€νλ μ΄νλ‘ dbtκ° ν μ΄λΈμ λ μ½λλ₯Ό μ½μ νκ±°λ μ λ°μ΄νΈν μ μμ΅λλ€.
μ΄μ μ€ν κ²°κ³Όμ νμ¬ μ€ν κ²°κ³Όλ₯Ό λΉκ΅νμ¬ λ³κ²½λ λ°μ΄ν°λ§ μ²λ¦¬ν©λλ€.
Ephemeral
SQL λͺ¨λΈμ 쿼리ν λλ§λ€ μ€νλλ©°, κ²°κ³Όλ₯Ό λ©λͺ¨λ¦¬μ μ μ₯ν©λλ€.
λͺ¨λΈμ λ°μ΄ν°λ² μ΄μ€μ μ§μ ꡬμΆλμ§ μμ΅λλ€. λμ dbtλ μ΄ λͺ¨λΈμ μ½λλ₯Ό μ’ μ λͺ¨λΈμ κ³΅ν΅ ν μ΄λΈ λ‘ λ³΄κ΄ν©λλ€.
λ°μ΄ν° μμ€λ₯Ό μ€μ νκ³ μ΄λ₯Ό μ¬μ©νμ¬ SQL λͺ¨λΈμ μμ±ν λ λ°μ΄ν°μ μ‘μΈμ€ν μ μλ λ°©λ²μ μ μν©λλ€.
schema.yml νμΌμλ λ²μ , μμ€ μ΄λ¦, λ°μ΄ν°λ² μ΄μ€, μ€ν€λ§ λ° ν μ΄λΈμ΄ ν¬ν¨λμ΄ μμ΅λλ€. yml νμΌμ μ΄μ©ν΄μ λ¨μΌ μμΉμμ λͺ¨λ λͺ¨λΈμ λν μ°κ²°μ λ³κ²½ν μ μμ΅λλ€.
μμ£Ό λ³κ²½λμ§ μλ λ°μ΄ν°μ κΆμ₯λλ©° dbt seed -s file_nameμΌλ‘ μ€νλ©λλ€.
μλλ₯Ό μμ±νλ €λ©΄ μ μ₯μμ /seeds λλ ν 리μ CSV νμΌμ μ λ‘λνκ³ λͺ λ Ήμ μ€ννκΈ°λ§ νλ©΄ λ©λλ€.
dbt seed --full-refresh : dbt νλ‘μ νΈμ μλ λ°μ΄ν°λ₯Ό λ€μ μμ±ν λ μ¬μ©λ©λλ€. --full-refresh μ΅μ μ μλ λ°μ΄ν°λ₯Ό μμ ν μλ‘ κ³ μΉ¨νκ³ κΈ°μ‘΄ λ°μ΄ν°λ₯Ό λͺ¨λ μμ ν ν, μλ‘μ΄ μλ λ°μ΄ν°λ₯Ό λ€μ μμ±ν©λλ€.
λ€λ₯Έ λͺ¨λΈμ λν μ°Έμ‘°(reference)λ₯Ό λ§λλ λ° μ¬μ©λλ ν¨μμ λλ€. ref ν¨μλ₯Ό μ¬μ©νμ¬ λ€λ₯Έ λͺ¨λΈμ λν μ°Έμ‘°λ₯Ό λ§λ€λ©΄, ν΄λΉ λͺ¨λΈμ κ²°κ³Όλ₯Ό νμ¬ λͺ¨λΈμμ μ¬μ©ν μ μμ΅λλ€.
λͺ¨λΈ κ°μ μ’ μμ±μ μ μν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ dbtλ λͺ¨λΈ μ€ν μμλ₯Ό μλμΌλ‘ κ²°μ ν μ μμ΅λλ€. λ°μ΄ν° νμ΄νλΌμΈμ μ€ν μμλ₯Ό μλμΌλ‘ κ΄λ¦¬ν μ μμΌλ©°, λ°μ΄ν° μμ€μ λ³κ²½ λ΄μ©μ λν μ λ°μ΄νΈλ κ°νΈνκ² μνν μ μμ΅λλ€.
models/.yml
DBTμμ μ¬μ©ν μ μλ μ¬μ©μ μ μ ν¨μλ‘ SQL 쿼리λ λͺ¨λΈ μ½λμμ νΈμΆλ μ μμΌλ©°, DBTκ° μ€νλλ λμ μ½λλ₯Ό μμ±ν λ μλμΌλ‘ νμ₯λ©λλ€.
μ½λ μ¬μ¬μ©μ±μ ν₯μμν¬ μ μμΌλ©°, λ°λ³΅μ μΈ μμ μ μννλ λ° νμν μ½λλ₯Ό μ€μΌ μ μμ΅λλ€. DBT λͺ¨λΈμ κ°λ μ±κ³Ό μ μ§ λ³΄μμ±μ ν₯μμν¬ μ μμ΅λλ€.
Jinja ν νλ¦Ώ μΈμ΄
Expressions {{ ... }}: ννμμ λ¬Έμμ΄μ μΆλ ₯νκ³ μ ν λ μ¬μ©ν©λλ€. μμ μ¬μ©νμ¬ λ³μλ₯Ό μ°Έμ‘° νκ³ λ§€ν¬λ‘λ₯Ό νΈμΆν μ μμ΅λλ€.
Statements {% ... %}: μ μ΄λ¬Έ(if λ¬Έ, for λ¬Έ λ±)μ΄λ 맀ν¬λ‘λ₯Ό μ μν©λλ€.
``` - Comments {# ... #}: λͺ¨λΈ λ΄μμ μ£Όμμ μΆκ°ν λ μ¬μ©ν©λλ€. - ```sql {# μ£Όμ μΆκ° #} SELECT * FROM my_table ``` - payment_type μ κ°μ 맀κ°λ³μλ‘ λ°κ³ ν΄λΉ κ°μ λ°ν νλ κ²μ νμΈ νλ get_payment_type_description 맀ν¬λ‘λ₯Ό λ§λλλ€. - ```sql {# This macro returns the description of the payment_type #}
dbt deps : νλ‘μ νΈ λ΄ ν¨ν€μ§μ λͺ¨λ μ’ μμ± λ° νμΌμ λ€μ΄λ‘λνλ λͺ λ Ήμ μ€νν©λλ€. μλ£λλ©΄ νλ‘μ νΈμ dbt_packages/dbt_utils λλ ν λ¦¬κ° μμ±λ©λλ€
νλ‘μ νΈ μ 체μμ μ¬μ©ν΄μΌ νλ κ°μ μ μνλ λ° μ μ©νλ©° μ¬λ¬ λͺ¨λΈμμ 곡ν΅μΌλ‘ μ¬μ©νλ κ°μ μ€μμμ κ΄λ¦¬ν μ μμ΅λλ€.
dbt_project.yml νμΌμ΄λ command lineμμ μ¬μ©ν μ μμ΅λλ€.
``` - ![image](https://user-images.githubusercontent.com/47103479/233996540-09269444-ad3f-4603-9507-6257e39df6e7.png) - > dbt build --var 'is_test_run: false' : λͺ¨λΈμ λΉλν λ λͺ λ Ήμ€μμλ μ¬μ© κ°λ₯ν©λλ€.
dbt λͺ¨λΈμ μ ν¨μ±μ κ²μ¬νλ λ° μ¬μ©λ©λλ€. dbt testλ dbt λͺ¨λΈμ΄ λ°μ΄ν°μ μ ν©μ±κ³Ό μΌκ΄μ±μ 보μ₯νλμ§ κ²μ¦νλ λ° μ¬μ©λλ μ μ©ν λꡬμ λλ€.
dbt testλ λͺ¨λΈμ μ€ννκΈ° μ μ μ€νλ©λλ€. λͺ¨λΈμ μ€ν κ²°κ³Όκ° μ¬λ°λ₯Έμ§ νμΈνκ³ , μμν κ²°κ³Όμ μ€μ κ²°κ³Όκ° μΌμΉνλμ§ κ²μ¦ν©λλ€.
dbtλ μ΄ κ°μ΄ λ€μκ³Ό κ°μμ§ νμΈνλ κΈ°λ³Έ ν μ€νΈλ₯Ό μ 곡ν©λλ€.
Unique : νΉμ 컬λΌμ μ€λ³΅λ κ°μ΄ μλμ§ νμΈν©λλ€.
Not null : νΉμ 컬λΌμ null κ°μ ν¬ν¨νμ§ μλμ§ νμΈν©λλ€.
Accepted values : νΉμ 컬λΌμ νμ©λλ κ° λͺ©λ‘μ΄ μ§μ ν κ°λ€κ³Ό μΌμΉνλμ§ νμΈν©λλ€.
relationship : λ λͺ¨λΈ κ°μ κ΄κ³κ° μ ν¨νμ§ νμΈν©λλ€.
DBTμμ μ 곡νλ μλνλ λ¬Έμν λκ΅¬λ‘ DBT λͺ¨λΈμ λ©νλ°μ΄ν°μ μ€λͺ μ λ¬Έμννμ¬ λ°μ΄ν° μ¨μ΄νμ°μ€μ λͺ¨λΈλ§ νλ‘μΈμ€λ₯Ό κ΄λ¦¬νκ³ λ¬Έμννλ λ° μ¬μ©λ©λλ€.
dbt docs generate λͺ λ Ήμ΄λ₯Ό μ€ννλ©΄ λͺ¨λΈλ§ μ½λμ schema.yml νμΌμ κΈ°λ°μΌλ‘ λ¬Έμνκ° μμ±λ©λλ€.
https://docs.getdbt.com/docs/build/projects