dbt_base

dbt

  • image

  • 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κ°€ μžˆμ–΄ μ‚¬μš©ν•˜κΈ°κ°€ 더 μ‰½μŠ΅λ‹ˆλ‹€. 유료 μš”κΈˆμ œ 외에도 개발자λ₯Ό μœ„ν•œ μ œν•œλœ 무료 버전을 μ œκ³΅ν•©λ‹ˆλ‹€.

  • Resource
    μ„€λͺ…

    models

    각 λͺ¨λΈμ€ 단일 νŒŒμΌμ— 있으며 μ›μ‹œ 데이터λ₯Ό 뢄석 μ€€λΉ„κ°€ 된 데이터 μ„ΈνŠΈλ‘œ λ³€ν™˜ν•˜κ±°λ‚˜ μ΄λŸ¬ν•œ λ³€ν™˜μ˜ 쀑간 단계인 λ‘œμ§μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.

    snapshots

    λ‚˜μ€‘μ— μ°Έμ‘°ν•  수 μžˆλ„λ‘ λ³€κ²½ κ°€λŠ₯ν•œ ν…Œμ΄λΈ”μ˜ μƒνƒœλ₯Ό μΊ‘μ²˜ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

    seeds

    dbtλ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터 ν”Œλž«νΌμ— λ‘œλ“œν•  수 μžˆλŠ” 정적 데이터가 ν¬ν•¨λœ CSV 파일.

    tests

    ν”„λ‘œμ νŠΈμ˜ λͺ¨λΈ 및 λ¦¬μ†ŒμŠ€λ₯Ό ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄ μž‘μ„±ν•  수 μžˆλŠ” SQL μΏΌλ¦¬μž…λ‹ˆλ‹€.

    macros

    μ—¬λŸ¬ 번 μž¬μ‚¬μš©ν•  수 μžˆλŠ” μ½”λ“œ λΈ”λ‘μž…λ‹ˆλ‹€.

    docs

    λΉŒλ“œν•  수 μžˆλŠ” ν”„λ‘œμ νŠΈμš© λ¬Έμ„œμž…λ‹ˆλ‹€.

    sources

    μΆ”μΆœ 및 λ‘œλ“œ λ„κ΅¬λ‘œ μ›¨μ–΄ν•˜μš°μŠ€μ— λ‘œλ“œλœ λ°μ΄ν„°μ˜ 이름을 μ§€μ •ν•˜κ³  μ„€λͺ…ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

    exposures

    ν”„λ‘œμ νŠΈμ˜ λ‹€μš΄μŠ€νŠΈλ¦Ό μ‚¬μš©μ„ μ •μ˜ν•˜κ³  μ„€λͺ…ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

    metrics

    ν”„λ‘œμ νŠΈμ— λŒ€ν•œ λ©”νŠΈλ¦­μ„ μ •μ˜ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

    analysis

    ν”„λ‘œμ νŠΈμ—μ„œ 뢄석 SQL 쿼리λ₯Ό κ΅¬μ„±ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

Materialization

  • SQL λͺ¨λΈμ„ 물리적으둜 μ €μž₯ν•˜λŠ” 방식을 μ˜λ―Έν•˜λ©° 4κ°€μ§€μ˜ 방식이 μžˆμŠ΅λ‹ˆλ‹€.

  • Table

    {{ config(materialized='table', sort='timestamp', dist='user_id') }}
    
    select *
    from ...
    • SQL λͺ¨λΈμ„ νŠΉμ • ν…Œμ΄λΈ”λ‘œ μ €μž₯ν•©λ‹ˆλ‹€.

    • 맀우 κ°„λ‹¨ν•œ λ°©μ‹μœΌλ‘œ SQL λͺ¨λΈμ„ μ €μž₯ν•˜λ©°, ν–₯ν›„ 쿼리 μˆ˜ν–‰ μ‹œ 직접 ν…Œμ΄λΈ”μ—μ„œ 데이터λ₯Ό μ½μŠ΅λ‹ˆλ‹€.

  • View

    {{ config(materialized='view',
            indexes=[{'columns': ['col_a'], 'cluster': 'cluster_a'}]) }}
            indexes=[{'columns': ['symbol']}]) }}
    
    select ...
    • SQL λͺ¨λΈμ„ λ·°(View)둜 μ €μž₯ν•©λ‹ˆλ‹€.

    • SQL λͺ¨λΈμ„ 쿼리할 λ•Œλ§ˆλ‹€ μ‹€ν–‰λ˜λ©°, κ²°κ³Όλ₯Ό μ¦‰μ‹œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

  • Incremental

    • {{
      config(
        materialized='incremental',
        unique_key='date_day',
        incremental_strategy='delete+insert',
        ...
        )
      }}
      
      select ...
    • dbtκ°€ λ§ˆμ§€λ§‰μœΌλ‘œ μ‹€ν–‰λœ μ΄ν›„λ‘œ dbtκ°€ ν…Œμ΄λΈ”μ— λ ˆμ½”λ“œλ₯Ό μ‚½μž…ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • 이전 μ‹€ν–‰ 결과와 ν˜„μž¬ μ‹€ν–‰ κ²°κ³Όλ₯Ό λΉ„κ΅ν•˜μ—¬ λ³€κ²½λœ λ°μ΄ν„°λ§Œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

  • Ephemeral

    • {{ 
      config(
        materialized='ephemeral'
        ...
        )
      }}
      
      select ...
    • SQL λͺ¨λΈμ„ 쿼리할 λ•Œλ§ˆλ‹€ μ‹€ν–‰λ˜λ©°, κ²°κ³Όλ₯Ό λ©”λͺ¨λ¦¬μ— μ €μž₯ν•©λ‹ˆλ‹€.

    • λͺ¨λΈμ€ λ°μ΄ν„°λ² μ΄μŠ€μ— 직접 κ΅¬μΆ•λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  dbtλŠ” 이 λͺ¨λΈμ˜ μ½”λ“œλ₯Ό 쒅속 λͺ¨λΈμ— 곡톡 ν…Œμ΄λΈ” 둜 λ³΄κ΄€ν•©λ‹ˆλ‹€.

Sources

  • 데이터 μ†ŒμŠ€λ₯Ό μ„€μ •ν•˜κ³  이λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL λͺ¨λΈμ„ μž‘μ„±ν•  λ•Œ 데이터에 μ•‘μ„ΈμŠ€ν•  수 μžˆλŠ” 방법을 μ •μ˜ν•©λ‹ˆλ‹€.

  • schema.yml νŒŒμΌμ—λŠ” 버전, μ†ŒμŠ€ 이름, λ°μ΄ν„°λ² μ΄μŠ€, μŠ€ν‚€λ§ˆ 및 ν…Œμ΄λΈ”μ΄ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. yml νŒŒμΌμ„ μ΄μš©ν•΄μ„œ 단일 μœ„μΉ˜μ—μ„œ λͺ¨λ“  λͺ¨λΈμ— λŒ€ν•œ 연결을 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • image

  • version: 2
    
    sources:
        - name: staging
          database: dtc-de-382512
          schema: trips_data_all
    
          tables:
              - name: green_tripdata
              - name: yellow_tripdata
  • {{ config(materialized='table') }}
    
    SELECT *
    FROM {{ source('staging','green_tripdata') }}
  • image

Seeds

  • 자주 λ³€κ²½λ˜μ§€ μ•ŠλŠ” 데이터에 ꢌμž₯되며 dbt seed -s file_name으둜 μ‹€ν–‰λ©λ‹ˆλ‹€.

  • μ‹œλ“œλ₯Ό μƒμ„±ν•˜λ €λ©΄ μ €μž₯μ†Œμ˜ /seeds 디렉토리에 CSV νŒŒμΌμ„ μ—…λ‘œλ“œν•˜κ³  λͺ…령을 μ‹€ν–‰ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

  • dbt seed --full-refresh : dbt ν”„λ‘œμ νŠΈμ˜ μ‹œλ“œ 데이터λ₯Ό λ‹€μ‹œ 생성할 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. --full-refresh μ˜΅μ…˜μ€ μ‹œλ“œ 데이터λ₯Ό μ™„μ „νžˆ μƒˆλ‘œ κ³ μΉ¨ν•˜κ³  κΈ°μ‘΄ 데이터λ₯Ό λͺ¨λ‘ μ‚­μ œν•œ ν›„, μƒˆλ‘œμš΄ μ‹œλ“œ 데이터λ₯Ό λ‹€μ‹œ μƒμ„±ν•©λ‹ˆλ‹€.

  • seeds: 
      taxi_rides_ny:
          taxi_zone_lookup:
              +column_types:
                  locationid: numeric
  • image

Ref

  • λ‹€λ₯Έ λͺ¨λΈμ— λŒ€ν•œ μ°Έμ‘°(reference)λ₯Ό λ§Œλ“œλŠ” 데 μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. ref ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€λ₯Έ λͺ¨λΈμ— λŒ€ν•œ μ°Έμ‘°λ₯Ό λ§Œλ“€λ©΄, ν•΄λ‹Ή λͺ¨λΈμ˜ κ²°κ³Όλ₯Ό ν˜„μž¬ λͺ¨λΈμ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • λͺ¨λΈ κ°„μ˜ 쒅속성을 μ •μ˜ν•  수 있으며, 이λ₯Ό 톡해 dbtλŠ” λͺ¨λΈ μ‹€ν–‰ μˆœμ„œλ₯Ό μžλ™μœΌλ‘œ κ²°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 데이터 νŒŒμ΄ν”„λΌμΈμ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό μžλ™μœΌλ‘œ 관리할 수 있으며, 데이터 μ†ŒμŠ€μ˜ λ³€κ²½ λ‚΄μš©μ— λŒ€ν•œ μ—…λ°μ΄νŠΈλ„ κ°„νŽΈν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • models/.yml

    • models:
        - name: model_name
          latest_version: 2
          versions:
            - v: 2
            - v: 1
  • select * from {{ ref('model_name', version=1) }}

Macros

  • DBTμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” μ‚¬μš©μž μ •μ˜ ν•¨μˆ˜λ‘œ SQL μΏΌλ¦¬λ‚˜ λͺ¨λΈ μ½”λ“œμ—μ„œ 호좜될 수 있으며, DBTκ°€ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ μ½”λ“œλ₯Ό 생성할 λ•Œ μžλ™μœΌλ‘œ ν™•μž₯λ©λ‹ˆλ‹€.

  • μ½”λ“œ μž¬μ‚¬μš©μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 있으며, 반볡적인 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 데 ν•„μš”ν•œ μ½”λ“œλ₯Ό 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. DBT λͺ¨λΈμ˜ 가독성과 μœ μ§€ λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • Jinja ν…œν”Œλ¦Ώ μ–Έμ–΄

    • Expressions {{ ... }}: ν‘œν˜„μ‹μ€ λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. 식을 μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜λ₯Ό μ°Έμ‘° ν•˜κ³  맀크둜λ₯Ό ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

      • SELECT *
        FROM my_table
        WHERE my_column = '{{ my_variable }}'
    • Statements {% ... %}: μ œμ–΄λ¬Έ(if λ¬Έ, for λ¬Έ λ“±)μ΄λ‚˜ 맀크둜λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

      • <div data-gb-custom-block data-tag="if">
        
        SELECT *
        FROM my_table
        WHERE my_column = 'some_value'
        
  SELECT *
  FROM my_table
  WHERE my_column = 'other_value'
  

``` - Comments {# ... #}: λͺ¨λΈ λ‚΄μ—μ„œ 주석을 μΆ”κ°€ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. - ```sql {# 주석 μΆ”κ°€ #} SELECT * FROM my_table ``` - payment_type 의 값을 λ§€κ°œλ³€μˆ˜λ‘œ λ°›κ³  ν•΄λ‹Ή 값을 λ°˜ν™˜ ν•˜λŠ” 것을 확인 ν•˜λŠ” get_payment_type_description 맀크둜λ₯Ό λ§Œλ“­λ‹ˆλ‹€. - ```sql {# This macro returns the description of the payment_type #}

  case {{ payment_type }}
      when 1 then 'Credit card'
      when 2 then 'Cash'
      when 3 then 'No charge'
      when 4 then 'Dispute'
      when 5 then 'Unknown'
      when 6 then 'Voided trip'
  end
- ![image](https://user-images.githubusercontent.com/47103479/233994947-9e697e51-2292-4337-8ee7-9f8bbc45674d.png)


## Packages
- λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ λͺ¨λ“ˆκ³Ό μœ μ‚¬ν•˜κ²Œ μ„œλ‘œ λ‹€λ₯Έ ν”„λ‘œμ νŠΈ 간에 맀크둜λ₯Ό μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 
- ν”„λ‘œμ νŠΈμ—μ„œ νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ dbt ν”„λ‘œμ νŠΈμ˜ root 디렉토리에 packages.yml ꡬ성 νŒŒμΌμ„ 생성해야 ν•©λ‹ˆλ‹€.
- 데이터 λͺ¨λΈλ§ μž‘μ—…μ˜ 생산성을 높일 수 있으며, μΌκ΄€λœ λ°©μ‹μœΌλ‘œ 데이터 λͺ¨λΈλ§μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
- ```yml
packages:
  - package: dbt-labs/dbt_utils
    version: 0.8.0
  • dbt deps : ν”„λ‘œμ νŠΈ λ‚΄ νŒ¨ν‚€μ§€μ˜ λͺ¨λ“  쒅속성 및 νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜λŠ” λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€. μ™„λ£Œλ˜λ©΄ ν”„λ‘œμ νŠΈμ— dbt_packages/dbt_utils 디렉토리가 μƒμ„±λ©λ‹ˆλ‹€

    • image

Variables

  • ν”„λ‘œμ νŠΈ μ „μ²΄μ—μ„œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 값을 μ •μ˜ν•˜λŠ” 데 μœ μš©ν•˜λ©° μ—¬λŸ¬ λͺ¨λΈμ—μ„œ κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 값을 μ€‘μ•™μ—μ„œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • dbt_project.yml νŒŒμΌμ΄λ‚˜ command lineμ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • {{ config(materialized='table') }}
    
    SELECT *
    FROM {{ source('staging','green_tripdata') }}
    

``` - ![image](https://user-images.githubusercontent.com/47103479/233996540-09269444-ad3f-4603-9507-6257e39df6e7.png) - > dbt build --var 'is_test_run: false' : λͺ¨λΈμ„ λΉŒλ“œν•  λ•Œ λͺ…λ Ήμ€„μ—μ„œλ„ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.

Tests

  • dbt λͺ¨λΈμ˜ μœ νš¨μ„±μ„ κ²€μ‚¬ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. dbt testλŠ” dbt λͺ¨λΈμ΄ λ°μ΄ν„°μ˜ μ •ν•©μ„±κ³Ό 일관성을 보μž₯ν•˜λŠ”μ§€ κ²€μ¦ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μœ μš©ν•œ λ„κ΅¬μž…λ‹ˆλ‹€.

  • dbt testλŠ” λͺ¨λΈμ„ μ‹€ν–‰ν•˜κΈ° 전에 μ‹€ν–‰λ©λ‹ˆλ‹€. λͺ¨λΈμ˜ μ‹€ν–‰ κ²°κ³Όκ°€ μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•˜κ³ , μ˜ˆμƒν•œ 결과와 μ‹€μ œ κ²°κ³Όκ°€ μΌμΉ˜ν•˜λŠ”μ§€ κ²€μ¦ν•©λ‹ˆλ‹€.

  • dbtλŠ” μ—΄ 값이 λ‹€μŒκ³Ό 같은지 ν™•μΈν•˜λŠ” κΈ°λ³Έ ν…ŒμŠ€νŠΈλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

    • Unique : νŠΉμ • μ»¬λŸΌμ— μ€‘λ³΅λœ 값이 μ—†λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

    • Not null : νŠΉμ • μ»¬λŸΌμ— null 값을 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

    • Accepted values : νŠΉμ • μ»¬λŸΌμ— ν—ˆμš©λ˜λŠ” κ°’ λͺ©λ‘μ΄ μ§€μ •ν•œ κ°’λ“€κ³Ό μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

    • relationship : 두 λͺ¨λΈ κ°„μ˜ 관계가 μœ νš¨ν•œμ§€ ν™•μΈν•©λ‹ˆλ‹€.

  • columns:
      - name: tripid
        description: Primary key for this table, generated with a concatenation of vendorid+pickup_datetime
        tests:
            - unique:
                severity: warn
            - not_null:
                severity: warn
      - name: Pickup_locationid
        description: locationid where the meter was engaged.
        tests:
          - relationships:
              to: ref('taxi_zone_lookup')
              field: locationid
              severity: warn
      - name: Payment_type 
        description: >
          A numeric code signifying how the passenger paid for the trip.
        tests: 
          - accepted_values:
              values: "{{ var('payment_type_values') }}"
              severity: warn
              quote: false
  • image

Documentation

  • DBTμ—μ„œ μ œκ³΅ν•˜λŠ” μžλ™ν™”λœ λ¬Έμ„œν™” λ„κ΅¬λ‘œ DBT λͺ¨λΈμ˜ 메타데이터와 μ„€λͺ…을 λ¬Έμ„œν™”ν•˜μ—¬ 데이터 μ›¨μ–΄ν•˜μš°μŠ€μ˜ λͺ¨λΈλ§ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΄€λ¦¬ν•˜κ³  λ¬Έμ„œν™”ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

  • dbt docs generate λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄ λͺ¨λΈλ§ μ½”λ“œμ™€ schema.yml νŒŒμΌμ„ 기반으둜 λ¬Έμ„œν™”κ°€ μƒμ„±λ©λ‹ˆλ‹€.

  • image

  • image

Reference

  • https://docs.getdbt.com/docs/build/projects

Last updated