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í
- Otevření pracovního prostoru – V prostředí Microsoft Fabric přejděte do Workspace, kde chcete Lakehouse vytvořit.
- Vytvoření Fabric Lakehouse – New – Lakehouse. Vyplníme název, například “Bronze”, a potvrďte vytvoření.
- 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
- Nahrání dat – Data lze nahrát ručně (drag & drop) nebo pomocí Dataflow Gen2, Notebooku či Pipeline.
Stejným způsobem bychom si vytvořili artefakt Data Warehouse s názvem “DWH”
Konfigurace přístupu a zabezpečení
- 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.
- Přístup přes SQL Endpoint – Každý Lakehouse má vlastní SQL endpoint. Lze použít připojení přes Azure Data Studio, Power BI, nebo dbt adapter.
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.
Reference
- 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/
- 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


