ETL | Dbt souborová struktura a nastavení dbt_project.yml

V Dbt (data build tools) jsou soubory organizovány v logické struktuře. Abychom se v projektu dlouhodobě vyznali při rostoucím množství kódu, je vhodné si v souborech udělat určitý systém.

Souborová struktura dbt projektu

Po inicializaci prázdného dbt dostaneme adresářovou strukturu viz níže. Root je náš dbt projekt. Uvnitř najdeme konfigurační soubory dbt_project.yml a dbt_profiles.yml a dále několik adresářů.

my_dbt_project/
|-- dbt_project.yml
|-- dbt_profiles.yml
|-- models/
|   |-- example/
|   |   |-- my_first_dbt_model.sql
|   |   |-- my_second_dbt_model.sql
|-- analysis/
|-- macros/
|-- snapshots/
|-- tests/

Ze začátku nás zajímají zejména 2 adresáře – models a snapshots.

Dbt Models a snapshot adresáře a organizace

Do složek models asnapshots umisťujeme sql skripty, které se následně materializují do naší cílové destinace (target). Cílové prostředí (dev) a (prod) je nastaveno v konfiguračním souboru profiles.yml.

Ze začátku budeme mít skriptů asi jen pár, ale časem jich můžeme mít desítky, stovky nebo víc. Best practise tedy je, vytvořit si nějakou smysluplnou logickou strukturu. Já používám tuto viz níže nebo se můžete na strukturu podívat na Github kde mám veřejný dbt projekt.

my_dbt_project/
|-- dbt_project.yml
|-- models/
|   |-- datamarts/
|   |   |-- datamart1/
|   |   |   |-- Dim_Table1.sql
|   |   |   |-- Fact_Table2.sql
|   |   |-- datamart2/
|   |   |   |-- Dim_Table1.sql
|   |   |   |-- Fact_Table2.sql
|   |-- staging/
|   |   |-- curr_source_system_1_tablename1.sql
|   |   |-- curr_source_system_1_tablename2.sql
|   |   |-- hist_source_system_1_tablename1.sql
|   |   |-- hist_source_system_1_tablename2.sql
|-- analysis/
|   |-- Analysis_purpose1/
|   |   |-- analysis1.sql
|   |   |-- analysis2.sql
|-- macros/
|   |-- my_macro.sql
|-- snapshots/
|   |-- source_system_1/
|   |   |-- snap_source_system_1_tablename1.sql
|   |   |-- snap_source_system_1_tablename2.sql
|   |-- source_system_2/
|   |   |-- snap_source_system_2_tablename1.sql
|   |   |-- snap_source_system_2_tablename2.sql
|-- tests/
|   |-- datamart1/
|   |   |-- test1.sql
|   |   |-- test2.sql
|   |-- datamart2/
|   |   |-- test1.sql
|   |   |-- test2.sql
|   |-- source_system_1/
|   |   |-- source_system_1_test1.sql
|   |   |-- source_system_1_test2.sql
|   |-- source_system_2/
|   |   |-- source_system_2_test1.sql
|   |   |-- source_system_2_test2.sql

Nastavení schémat dbt_project.yml

Struktura viz výše se hodí do prostředí datových skladů/ datamartů. Každý adresář v Models reprezentuje schéma databáze s tím, že tabulky z adresáře snapshot jsou přesměrovány do schématu staging v adresáři models. To se nastavuje v souboru dbt_project.yml.

models:
  dbt_project:
    staging:
        +materialized: table
        +schema: staging
    datamarts:
        datamart1:
            +materialized: table
            +schema: datamart1
        datamart2:
            +materialized: table
            +schema: datamart2

Tímto zápisem říkáme, že pokud dbt při zpracování najde nějaký skript

  • ve složce model/staging tak skripty materializuje jako tabulku do schématu staging
  • ve složce datamarts/datamart1 tak obsah materializuje do schématu datamart1
  • ve složce datamarts/datamart2 tak obsah materializuje do schématu datamart2

Pokud schémata neexistují, tak si je v cílovém prostředí vytvoří, k tomu by měl být nastaven v souboru profiles.yml dbt_user s patřičnou úrovní oprávnění.

5/5 - (1 vote)
Rubrika: Dbt (data build tool)

O Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako data engineer freelancer. Během cca 10 let jsem zde shromáždil přes 600 IT case studies, průvodců, návodů a tipů určených zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Data Engineeringu, korporátních financí a reportingu. Zaměřuji se především na Microsoft technologie (on-prem i cloud) a různé synergické efekty v rámci jejich produktového portfolia pro dataře a finanční profesionály. Věnuji se také dalším platformám a významným hráčům z oblasti open source technologií. 🔥 Pokud vám tento článek pomohl, ocením referenci na vašem webu nebo zmínku v komunitě. A mám pro vás ještě tip: řešíte-li nějaký zapeklitý Excel problém, přihlašte se do naší Excel Facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse ».

Leave a Reply

Your email address will not be published. Required fields are marked *