Fabric | dbt – Vytvoření Fabric Lakehouse/Data Warehouse a Konfigurace

Microsoft Fabric je sjednocená datová platforma, která propojuje různé artefakty (funkcionality Fabricu) pro vývoj datových řešení, analytiky a BI v jednom integrovaném prostředí. Klíčovými komponentami jsou Fabric Lakehouse a Fabric Data Warehouse. Tento článek popisuje proces vytvoření Fabric Lakehouse/Warehouse, konfiguraci a následnou integraci s dbt.

Upozornění na dbt-fabric adapter

Dbt adapter pro Microsoft Fabric (dbt-fabric) je stále ve fázi preview / early release a má určitá omezení, která je třeba při implementaci brát v úvahu:

Doporučení: pro produkční scénáře se doporučuje zapisovat transformovaná data do Data Warehouse a používat Lakehouse jako zdrojovou vrstvu.

Vzhledem k omezením, které plynou z dbt adaptéru pro nás bude Lakehouse zdrojem dat (Bronze) a cílovou destinací pro nás bude Warehouse artefakt Fabricu kde budeme mít Silver a Gold vrstvu. Na rozdíly mezi Lakehouse a Warehouse se můžete podívat v článku zde. 1

Vytvoření Fabric Lakehouse a Warehouse

Požadavky

  • Aktivní Microsoft Fabric workspace
  • Oprávnění typu Contributor nebo vyšší
  • Povolená Data Engineering experience
  • Přístup ke službě OneLake

Postup vytvoření

  1. Otevření pracovního prostoruV prostředí Microsoft Fabric přejděte do Workspace, kde chcete Lakehouse vytvořit.
  2. Vytvoření Fabric LakehouseNewLakehouse. Vyplníme název, například “Bronze”, a potvrďte vytvoření.
  3. Struktura Fabric Lakehouse
    • /Files – úložiště nestrukturovaných dat (CSV, Parquet, JSON apod.)
    • /Tables – automaticky spravované Delta tabulky
    • /SQL Endpoint – SQL rozhraní pro dotazování dat v jazyce SQL
  4. Nahrání datData lze nahrát ručně (drag & drop) nebo pomocí Dataflow Gen2, Notebooku či Pipeline.

create-fabric-lakehouse

Stejným způsobem bychom si vytvořili artefakt Data Warehouse s názvem “DWH”

fabric-dataawarehouse

Konfigurace přístupu a zabezpečení

  1. Oprávnění Správa uživatelů probíhá v rámci Microsoft Purview / OneLake Security Model. Doporučuje se přístup řídit na úrovni pracovního prostoru a tabulek.
  2. Přístup přes SQL EndpointKaždý Lakehouse má vlastní SQL endpoint. Lze použít připojení přes Azure Data Studio, Power BI, nebo dbt adapter.

fabric-azure-data-studio

Integrace s dbt

Požadavky

  • dbt-core >=1.7
  • dbt adapter: dbt-fabric nebo dbt-synapse
  • Přístupové údaje k Fabric SQL endpointu – ideálně přes service principal 2

Konfigurace profiles.yml

Konfiguraci profiles.yml řešíme v článku Fabric | dbt – Konfigurace profiles.yml pro SPN Autentizaci k SQL Endpointu

Struktura projektu

Struktura projektu se nastavuje do souboru dbt_project.yml. Příklad nastavení struktury najdete v článku ETL | Dbt souborová struktura a nastavení dbt_project.yml. Vzhledem k tomu, že používáme přistup medailonové architektury, kdy rozdělujeme jednotlivé fáze přípravy dat na Bronze, Silver a Gold by mohla testovací struktura vypadat třeba takto:

my_dbt_project/
|-- dbt_project.yml
|-- models/
|   |-- 02_silver/
|   |   |-- AdventureWorks/
|   |   |   |-- st_aw_salesorderdetail.sql
|   |   |-- Source2/
|   |-- 03_gold/
|   |   |-- AdventureWorks
|   |   |   |-- d_aw_address.sql
|   |   |   |-- d_aw_customer.sql
|   |   |   |-- d_aw_producthierarchy.sql
|   |   |   |-- d_date.sql
|   |   |   |-- f_aw_salesorderdetail
|   |   |-- BusinessCentral
|   |   |   |--d_finance_account
|-- analysis/
|-- macros/
|-- snapshots/
|   |-- 02_silver/
|   |   |-- AdventureWorks/
|   |   |   |-- st_aw_address.sql
|   |   |   |-- st_aw_customer.sql
|   |   |   |-- st_aw_product.sql
|   |   |   |-- st_aw_productcategory.sql
|   |   |   |-- st_aw_productmodel.sql 
|   |   |   |-- st_aw_salesorderheader.sql
|   |   |-- BusinessCentral/
|   |   |   |-- st_bc_account.sql
|-- tests/

Tento dbt projekt je připraven na scénář, kdy zajistíme přípravu zdrojových dat do Bronze vrstvy Lakehousu a dbt projekt tato data bude brát jako zdroj pro Silver a Gold Vrstvu. Nejdříve připravíme historizaci a následně nápočet modelů.

Ukázka modelu

Ukázka silver snapshot

{% snapshot st_aw_address %}

{{
  config(
    target_schema='02_silver',
    strategy='check',
    check_cols='all',
    unique_key='source_businesskey',
    updated_at='ingestion_date',
    invalidate_hard_deletes=True,
    schema='02_silver',
    alias='st_aw_address'
  )
}}

WITH [ranked_source] AS (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY [source_businesskey],[source_system] ORDER BY [ingestion_date] DESC,[source_updated_at] DESC) AS [dbt_row_num]
    FROM {{ source('bronze_data_source_fabricdatalake', 'bt_aw_address') }}
    
    /* DATA CLEANSING, FORMATTING, DEDUPLICATION */
)
SELECT *
FROM [ranked_source]
WHERE [dbt_row_num] = 1

{% endsnapshot %}

Ukázka gold dimenz

{{ config(
    materialized='incremental',
    unique_key='sk_aw_address',
    incremental_strategy='delete+insert',
    schema='03_gold',
    alias='d_aw_address'
) }}

WITH snapshot_table AS (
	SELECT 
        {{ generate_custom_surrogate_key(['driving.source_businesskey', 'driving.source_system', 'driving.dbt_valid_from']) }} AS sk_aw_address,
        driving.source_system                                                   AS dbt_id_sourcesystem,
        driving.source_businesskey                                              AS dbt_id_business_key,
        CAST(
            CASE 
                WHEN driving.dbt_valid_to IS NULL THEN 1
                ELSE 0
            END AS BIT)                                                 		AS dbt_current_flag,
        CAST(driving.dbt_valid_from AS DATE)                                    AS dbt_valid_from,
        CAST(COALESCE(driving.dbt_valid_to, '3000-12-31') AS DATE)              AS dbt_valid_to,
        CAST(driving.dbt_valid_from AS DATE)                                    AS mod_valid_from, 
        CAST(CASE
                WHEN driving.dbt_valid_to IS NULL 
                THEN '3000-12-31'
             ELSE DATEADD(DAY, -1, driving.dbt_valid_to)
        END AS DATE)                                                            AS mod_valid_to,
		CAST(driving.dbt_updated_at AS DATE)                                    AS dbt_updated_at,

        CAST(ModifiedDate AS DATE)                                              AS sk_modifieddate,
        City                                                                    AS city,
        AddressLine1                                                            AS address_line_1,
        AddressLine2                                                            AS address_line_2,
        StateProvince                                                           AS state_province,
        PostalCode                                                              AS postal_code,
        CountryRegion                                                           AS country_region
	FROM {{ ref('st_aw_address') }} driving
    WHERE 1=1
    {% if is_incremental() %}
        AND driving.dbt_updated_at > (
        SELECT MAX(dbt_updated_at)
        FROM {{ this }}
        )
    {% endif %}

    UNION ALL

	SELECT 
        -1                                                                      AS skh_aw_address,
        'N/A'                                                                   AS dbt_id_sourcesystem,
        'N/A'                                                                   AS dbt_id_business_key,
        1                                                                       AS dbt_current_flag,
        CAST('1900-01-01' AS DATE)                                              AS dbt_valid_from,
        CAST('3000-12-31' AS DATE)                                              AS dbt_valid_to,
        CAST('1900-01-01' AS DATE)                                              AS mod_valid_from,
        CAST('3000-12-31' AS DATE)                                              AS mod_valid_to,
		CAST('1900-01-01' AS DATE)                                              AS dbt_updated_at,
        CAST('1900-01-01' AS DATE)                                              AS skh_modifieddate,
        'N/A'                                                                   AS city,
        'N/A'                                                                   AS address_line_1,
        'N/A'                                                                   AS address_line_2,
        'N/A'                                                                   AS state_province,
        'N/A'                                                                   AS postal_code,
        'N/A'                                                                   AS country_region
)
SELECT 
        sk_aw_address,
        dbt_id_sourcesystem,
        dbt_id_business_key,
        dbt_current_flag,
        dbt_valid_from,
        dbt_valid_to,
        mod_valid_from,
        mod_valid_to,
        dbt_updated_at,
        sk_modifieddate,
        city,
        address_line_1,
        address_line_2,
        state_province,
        postal_code,
        country_region
FROM snapshot_table
WHERE 1=1

Spuštění modelů

  • dbt snapshot
  • dbt run

Monitoring a správa

  • dbt Cloud nebo Fabric Pipelines lze použít pro automatizované spuštění transformací.
  • Data Lineage v Fabric umožňuje vizualizovat vztahy mezi zdroji, modely a reporty v Power BI.
  • Delta tables poskytují podporu pro verzování, time travel a ACID transakce.

Závěr

Integrace Fabric Onelake a dbt představuje robustní, moderní architekturu pro správu datových transformací v cloudovém prostředí.

  • jednotné úložiště dat OneLake – jako kombinace Lakehouse a DataWarehouse
  • automatizované řízení transformací pomocí dbt,
  • transparentní governance a lineage v rámci Fabric ekosystému.
5/5 - (1 vote)

Reference

  1. Red Gate, Choosing Between the Lakehouse and Warehouse in Microsoft Fabric [on-line]. [cit. 2025-10-25]. Dostupné z WWW: https://www.red-gate.com/simple-talk/databases/sql-server/bi-sql-server/choosing-between-the-lakehouse-and-warehouse-in-microsoft-fabric/
  2. Microsoft documentation, Application and service principal objects in Microsoft Entra ID [on-line]. [cit. 2025-10-25]. Dostupné z WWW: https://learn.microsoft.com/en-us/entra/identity-platform/app-objects-and-service-principals?tabs=browser
Rubrika: Dbt (data build tool) Fabric

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 *