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í.

Rate this post

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

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 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 *