top of page

Dataflows Gen1 and Gen2: Kam se data ukládají?

  • Writer: Vojtěch Šíma
    Vojtěch Šíma
  • Oct 26
  • 4 min read
tl;dr Gen1 ti ukládá data jako CSV do složky CDM v účtu ADLS Gen2. Pokud se k nim chceš dostat mimo connector, propoj workspace se svým data lake storage, jinak se k nim nedostaneš. Pokud máš zapnutý Enhanced Compute Engine, refresh ti navíc naplní SQL cache, kterou můžeš použít. Gen2 bez destination ukládá výstup do poloskryté DataflowsStagingLakehouse a vystaví ho přes DataflowsStagingWarehouse. Data jsou uložená jako Delta tabulky nad Parquet soubory.

Než začneš číst

Můj background se točí kolem celé Power BI platformy a rád probírám věci z různých úhlů. Teď když máme Microsoft Fabric, tak mě zaujala i novinka ve formě Dataflows Gen2, proto píšu tento blog.


Nicméně, na datový engineering Dataflows obecně uplně nedopouručuju. I když Microsoft ve vlastním dotazníku oznámil (sdíleno na FabCon EU 25), že Dataflows Gen 2 jsou nejvíc využívaný nástroj pro zpracování dat ve Fabricu. Zároveň jsou taky nejpomalejší a stojí nejvíc tzv. capacity units. Nicméně furt mi přijde zajímavé poukázat, jak na pozadí Dataflows pracují s ukládáním dat.


Co jsou Dataflows Gen1?

Dataflows Gen1, původně jen Dataflows, jsou dnes legacy (i když pořád můžeš vytvářet nové položky), uživatelsky přívětivý data engineering nástroj.


Dataflows jsou úzce spojené s Power BI, protože na první pohled sdílí stejné metody transformace dat. Jinými slovy, oboje používá Power Query k transformaci dat. V zákulisí se zpracování může lišit, ale GUI a jazyk jsou v zásadě stejné.


Dataflows použiješ třeba na nahrání nebo staging souborů do tabulky tak jak jsou, přesun těžších transformací mimo semantický model, nebo oddělení historických dat, která není nutné často obnovovat. Primárně to cílí na lidi, co raději klikají, nebo přišli z Excelu a chtějí používat Power Query v cloudu.


Protože pořád dovolují psát M kód, můžeš si všechno poskládat ručně. Znamená to, že se připojíš prakticky na cokoliv, podobně jako v tradičnějším data engineering nástroji.

To je asi dost úvodu k Dataflows Gen1 a vůbec k Dataflows. Teď se podíváme, jak vlastně ukládají data.


Ukládání dat v Dataflows Gen1

Odteď budu říkat D1 místo Dataflows Gen1.


Když v D1 vytvoříš cokoliv, snaží se vyrobit tabulku jako výstup. Třeba když poslední krok vrátí JSON, D1 automaticky přidá kroky, které z něj udělají tabulku. Kroky na vytvoření tabulky jsou tzv. bare minimum, takže na to nespoléhej pro pořádné parsování souborů.


Stejně u vnořených polí. Když máš tabulku se sloupcem, který nese vnořený record, tabulka je pořád validní, takže ten record se nejspíš označí jako chyba a nahradí se null. Dataflows tohle dělají u všech tabulek: chyby na úrovni buněk nahrazují null. Když chyba zablokuje krok úplně, refresh spadne celý.


Při úspěšném načtení tabulek D1 vygeneruje CSV snapshot běhu (ne jen metadata, ale reálná data) a vysype ho do Microsoftího interního Data Lake do složky CDM. Normálně se k tomu nedostaneš, ale pokud bys potřeboval získat flat fily, propoj workspace se svým ADLS a pak se k nim dostaneš.


Protože je výstup CSV, při čtení nemáš k dispozici query folding ani jiné featury. Čtení může být pomalé, protože taháš data z CSV, a ne z pěkně indexované a normalizované databáze.


Ukládání v Dataflows Gen1 s Enhanced Compute Engine

Odteď budu říkat D1 ECE místo Dataflows Gen1 s Enhanced Compute Engine.


Spousta z vás o téhle funkci asi neslyšela. Pokud máš Premium capacity nebo Premium Per User, můžeš nastavit Dataflows tak, aby používaly Enhanced Compute Engine. Je to běžná volba v nastavení, třeba hned vedle Scheduled Refresh.


Co se týče storage, funguje to podobně jako D1. Navíc, slovy Microsoftu: "The enhanced compute engine is an improvement over the standard engine, and works by loading data to a SQL Cache and uses SQL to accelerate table transformation, refresh operations, and enables DirectQuery connectivity."


V praxi můžeš brát Dataflows trochu jako databázi (ber to s úvozovkama) a použít i DirectQuery jako typ připojení. V DQ módu po refreshi dataflow dostaneš data při obnovení plátna (canvas), buď podle nastaveného refreshe, nebo po interakci s reportem.


Tato SQL Cache není mimo Dataflow dostupná a zpětně dohledávat přesný connection string budeš těžko. Můžeš maximálně použít Native Query a podívat se, jaký SQL se posílá, ale názvy tabulek apodobně budou velmi generické.

select [$Table].[1] as [1]
from [schema$1d6a371e-056f-4526-87eb-20110455b4a8].[Table] as [$Table]

Ukládání dat v Dataflows Gen2

Odteď budu říkat D2 místo Dataflows Gen2.


D2 má hodně podobné rozhraní jako D1. Pod kapotou běží ale jiná verze mashup enginu, která je u některých operací rychlejší a u jiných může být ale i pomalejší. Výhoda D2 je možnost posunout data do 'destinace'. Může to být Lakehouse, Warehouse, SharePoint atd.


Jen mysli na to, jak jsem psal výš, D2 je na CUs (capacity units) výrazně dražší než Notebook nebo Data pipeline. https://learn.microsoft.com/en-us/fabric/data-factory/pricing-dataflows-gen2

Můžeš taky destination přeskočit a nastavit dotazy jako Staging. Vznikne staging Lakehouse a Warehouse, přes které pak konzumuješ Dataflows, třeba když se připojuješ z Power BI.


Pořád ale jdeš přes Dataflows connector, i když se do staging Warehouse dostaneš přes OneLake Catalog nebo Power Query wizard. Warehouse je jen dočasné meziskladování a nedoporučuje se na něj připojovat přímo, protože nemusí mít správná data.


Fyzické soubory žijí ve staging Lakehouse, konkrétně StagingLakehouseForDataflows. Snadno je uvidíš třeba přes OneLake Explorer pro Windows. V podsložce Tables najdeš Parquet soubory a '_delta_log'. V sekci Files uvidíš hlavně metadata k Parquetům v Tables.


Když se připojuješ na Dataflows, roztočíš SQL endpoint, takže čtení je proti D1 výrazně rychlejší. Pozdější transformace můžeš navíc zrychlit přes query folding a zobrazit si Native Query.


Native Query odeslaná zpět do Lakehouse z naklikaných kroků v Power Query:

select [_].[Column1] as [Column1],
    'is' as [Column2],
    'gen2' as [Column3]
from 
(
    select [_].[Column1]
    from [StagingLakehouseForDataflows_20251026173245].[dbo].[a9b2c3d465e147f2b8812e3a92b4c8d1_d18263f1_002Df9a2_002D47aa_002D93b1_002D8cf3b2a10c77] as [_]
    where [_].[Column1] = 'this' and [_].[Column1] is not null
) as [_]

Microsoft Dataflows Gen 2 Diagram
Microsoft Dataflows Gen 2 Diagram

Comments

Rated 0 out of 5 stars.
No ratings yet

Add a rating
bottom of page