Chyby a podmíněné spuštění

VZTAHUJE SE NA: Azure Data Factory Azure Synapse Analytics

Tip

Data Factory v Microsoft Fabric je nová generace Azure Data Factory s jednodušší architekturou, integrovanou AI a novými funkcemi. Pokud s integrací dat začínáte, začněte Fabric Data Factory. Stávající úlohy ADF lze upgradovat na Fabric pro přístup k novým funkcím v oblastech datové vědy, analýz v reálném čase a vytváření sestav.

Podmíněné cesty

Azure Data Factory a také orchestrace kanálů Synapse umožňují podmíněnou logiku a umožňují uživateli zvolit jinou cestu na základě výsledků z předchozí aktivity. Použití různých cest umožňuje uživatelům vytvářet robustní kanály a začlenit zpracování chyb do logiky ETL/ELT. Celkem povolujeme čtyři podmíněné cesty,

Name Explanation
Po úspěchu Tuto cestu spusťte (výchozí průchod), pokud byla aktuální aktivita úspěšná.
Při selhání Tuto cestu spusťte, pokud aktuální aktivita selhala.
Po dokončení Tuto cestu spusťte po dokončení aktuální aktivity bez ohledu na to, jestli byla úspěšná nebo ne.
Při přeskočení Tuto cestu spusťte, pokud se samotná aktivita nespustila.

Snímek obrazovky znázorňující čtyři větve mimo aktivitu

Můžete přidat více větví za aktivitou, s jednou výjimkou: Po dokončení cesta nemůže koexistovat s cestou Při úspěchu nebo Při selhání. Pro každé spuštění roury se na základě výsledku provádění aktivity aktivuje maximálně jedna cesta.

Zpracování chyb

Běžný mechanismus zpracování chyb

Vyzkoušet blok Catch

V tomto přístupu zákazník definuje obchodní logiku a definuje pouze cestu Při selhání , která zachytí jakoukoli chybu z předchozí aktivity. Tento přístup vykreslí kanál úspěšně, pokud je cesta při selhání úspěšná.

Snímek obrazovky znázorňující definici a výsledek bloku try catch

Blok "Do If Else"

V tomto přístupu zákazník definuje obchodní logiku a definuje cesty při selhání i po úspěchu . Tento přístup způsobí selhání procesu, i když cesta Při selhání uspěje.

Snímek obrazovky znázorňující definici a výsledek bloku do if else.

Blok "Udělej Pokud Přeskoč Jinak"

V tomto přístupu zákazník definuje obchodní logiku a definuje cestu Při selhání i cestu Při úspěchu s připojenou fiktivní aktivitou Při vynechání . Tento přístup vykreslí kanál úspěšně, pokud je cesta při selhání úspěšná.

Snímek obrazovky zobrazující definici a výsledek bloku

Souhrnná tabulka

Approach Defines Když aktivita proběhne úspěšně, zobrazí se celkové potrubí. Když aktivita selže, zobrazí se celkové potrubí.
Try-Catch Pouze po selhání Success Success
Do-If-Else Cesty při selhání + Cesty při úspěchu Success Failure
Do-If-Skip-Else Cesta při chybě + cesta po úspěchu (s náhradní cestou při přeskočení na konci) Success Success

Jak se určují selhání kanálu

Různé mechanismy zpracování chyb vedou k různým stavům kanálu: zatímco některé kanály selžou, jiné jsou úspěšné. Úspěch a selhání pipeline určíme následujícím způsobem:

  • Vyhodnoťte výsledek pro všechny koncové aktivity. Pokud byla aktivita typu list vynechána, vyhodnotíme místo toho její nadřazenou aktivitu.
  • Výsledek kanálu je úspěšný, pouze pokud jsou všechny uzly vyhodnoceny úspěšně.

Za předpokladu, že aktivita při selhání a aktivita fiktivní při selhání jsou úspěšné,

  • V přístupu Try-Catch,

    • Pokud předchozí aktivita proběhne úspěšně: uzel Upon Failure se přeskočí a jeho nadřazený uzel je považován za úspěšný; celkový procesní tok je úspěšný.
    • Pokud předchozí aktivita selže, uzel Při selhání je vykonán; celkový pracovní postup je úspěšný.
  • V přístupu Do-If-Else

    • Když předchozí aktivita proběhne úspěšně: uzel Upon Success je úspěšný a uzel Upon Failure je přeskočen (a jeho nadřazený uzel je úspěšný); celkový procesní řetězec je úspěšný.
    • Pokud předchozí aktivita selže: uzel Podmíněně úspěšný se přeskočí a jeho nadřazený uzel selže; selže celý zpracovatelský kanál
  • V přístupu Do-If-Skip-Else,

    • Když předchozí aktivita proběhne úspěšně: uzel Dummy Upon Skip se přeskočí a jeho nadřazený uzel Upon Success proběhne úspěšně; druhá aktivita uzlu Upon Failure se přeskočí a její nadřazený uzel bude úspěšný; celkový kanál je úspěšný.
    • Pokud předchozí aktivita selže: uzel Upon Failure proběhne úspěšně a Dummy Upon Skip proběhne úspěšně; celkové potrubí je úspěšné.

Podmíněné spuštění

Při vývoji složitějších a odolných kanálů je někdy nutné zavést do naší logiky podmíněné spouštění: provádění určité aktivity pouze v případě splnění určitých podmínek. Případy použití jsou dostatek, například:

  • spuštění následné aktivity, jako je odeslání e-mailového oznámení, pokud předchozí úlohy kopírování proběhly úspěšně
  • pokud některé z předchozích aktivit selhaly, spusťte úlohu zpracování chyb.
  • přejděte k dalšímu kroku, pokud aktivita samotná nebo odpovídající aktivita zpracování chyb proběhne úspěšně.
  • etc.

Tady si vysvětlíme některé běžné logiky a způsob jejich implementace v ADF.

Jedna aktivita

Tady jsou některé běžné vzory, které následují po jedné aktivitě. Tyto vzory můžeme použít jako stavební bloky k vytváření složitých pracovních toků.

Zpracování chyb

Vzor je nejběžnější logika podmínek v ADF. Pro cestu "Při selhání" je definována aktivita zpracování chyb a bude vyvolána v případě selhání hlavní aktivity. Měla by být začleněna jako osvědčený postup pro všechny klíčové kroky, které potřebují náhradní alternativy nebo protokolování.

Snímek obrazovky znázorňující zpracování chyb pro klíčové kroky

Kroky pro maximální úsilí

Některé kroky, jako je například protokolování informací, jsou méně důležité a jejich selhání by nemělo blokovat celý kanál. V takových případech bychom měli přijmout strategie maximálního úsilí: přidání dalších kroků na trasu "Po dokončení" pro odblokování pracovního toku.

Snímek obrazovky znázorňující nejlepší možné provedení pokusu o logování

And

První a nejběžnější situace jsou podmíněné spojení "a": pokračujte v procesu pouze pokud jsou předchozí aktivity úspěšně dokončeny. Například můžete mít několik kopírovacích aktivit, které musí být nejprve úspěšně dokončeny před přechodem na další fázi zpracování dat. V ADF lze chování snadno dosáhnout: deklarujte více závislostí pro další krok. Graficky to znamená, že několik čar směřuje k další aktivitě. Můžete zvolit cestu "Při úspěchu", abyste zajistili, že závislost proběhla úspěšně, nebo cestu "Po dokončení", která umožní nejlepší možné provedení.

V této části se aktivita následného čekání spustí jenom v případě, že byly obě webové aktivity úspěšné.

Snímek obrazovky ukazující, že datový tok pokračuje pouze pokud jsou obě webové aktivity úspěšně dokončeny.

A tady se aktivita následného čekání provede, jakmile AktivitaProšla a AktivitaSelhala jsou dokončeny. Všimněte si, že cesta "Při úspěchu" znamená, že Aktivita Succeeded musí být úspěšná, zatímco Aktivita Failed na cestě "Při dokončení" běží s nejlepším úsilím, to znamená, že může selhat.

Snímek obrazovky ukazující, že proces pokračuje, když první webová aktivita proběhne úspěšně a druhá webová aktivita se dokončí.

Or

Druhé běžné scénáře jsou podmíněné „nebo“: spuštění aktivity, pokud kterákoliv z závislostí proběhne úspěšně nebo selže. Tady musíme použít cesty "Po dokončení", aktivitu podmínky typu If a jazyk výrazů.

Než se ponoříme do kódu, musíme pochopit ještě jednu věc. Po spuštění a dokončení aktivity můžete odkazovat na její stav pomocí @activity('ActivityName'). Stav. Je to buď "Succeeded" nebo "Failed". Tuto vlastnost používáme k sestavení podmíněného nebo logického objektu.

Krok protokolování pro zpracování sdílených chyb

V některých případech budete možná chtít spustit sdílený krok pro zpracování chyb nebo logování, pokud některé z předchozích aktivit selhaly. Potrubí můžete vytvořit takto:

  • paralelní spouštění více aktivit
  • přidání podmínky if, která bude obsahovat kroky zpracování chyb, ve větvi True
  • Připojte aktivity k podmínkové aktivitě pomocí cesty Po dokončení
  • Logický výraz pro vyhodnocení podmínkové aktivity
@or(equals(activity('ActivityFailed').Status, 'Failed'), equals(activity('ActivitySucceeded').Status, 'Failed'))
  • Poznámka: Potřebujete zřetězené, nebo pokud máte více než dvě závislé aktivity, například
@or(or(equals(activity('ActivityFailed').Status, 'Failed'), equals(activity('ActivitySucceeded1').Status, 'Failed')),equals(activity('ActivitySucceeded1').Status, 'Failed'))

Snímek obrazovky znázorňující, jak provést krok zpracování sdílených chyb v případě selhání některé z předchozích aktivit

Greenlight, pokud jakákoli aktivita proběhla úspěšně

Pokud jsou všechny aktivity na bázi nejlepší snahy, můžete pokračovat k dalšímu kroku, pokud některá z předchozích aktivit byla úspěšná. Potrubí můžete vytvořit takto:

  • paralelní spouštění více aktivit
  • Přidejte podmínku if pro obsahování dalších kroků ve větvi True.
  • Připojte aktivity k podmínkové aktivitě pomocí cesty Po dokončení
  • Logický výraz pro vyhodnocení podmínkové aktivity
@or(equals(activity('ActivityFailed').Status, 'Succeeded'), equals(activity('ActivitySucceeded').Status, 'Succeeded'))
  • Poznámka: Graf vypadá přesně jako předchozí scénář. Jediným rozdílem je použitý jazyk výrazu.

Snímek obrazovky ukazující, jak potrubí pokračuje k dalšímu kroku, pokud nějaká z činností projde.

Složité scénáře

Aby bylo pokračovat, musí být všechny aktivity úspěšné.

Vzor je kombinací dvou: podmíněné + zpracování chyb. Kanál pokračuje k dalším krokům, pokud všechny aktivity pokračování proběhnou úspěšně nebo jinak spustí krok protokolování sdílených chyb. Kanál můžete sestavit takto:

  • paralelní spouštění více aktivit
  • přidat podmínku if. Přidání dalších kroků ve větvi True a přidání kódu pro zpracování chyb ve větvi False
  • Připojte aktivity k podmínkové aktivitě pomocí cesty Po dokončení
  • Logický výraz pro vyhodnocení podmínkové aktivity
@and(equals(activity('ActivityFailed').Status, 'Succeeded'), equals(activity('ActivitySucceeded').Status, 'Succeeded'))

Snímek obrazovky ukazující, že pipeline pokračuje na další krok, pokud některá z aktivit projde, jinak spustí kód zpracování chyb.

Obvyklé scénáře

Try-Catch-Proceed

Vzor je ekvivalentem pokusu o zachycení bloku při kódování. Aktivita může v rouře selhat. Pokud selže, zákazník musí spustit úlohu zpracování chyb, aby ji vyřešil. Selhání jedné aktivity by ale nemělo blokovat další aktivity v pipelinu. Pokusím se například spustit úlohu kopírování a přesunout soubory do úložiště. Může ale selhat napůl. A v takovém případě chci odstranit částečně zkopírované, nespolehlivé soubory z účtu úložiště (můj krok zpracování chyb). Ale nemám problém pokračovat v jiných činnostech potom.

Pro nastavení vzoru:

  • Přidání první aktivity
  • Přidejte zpracování chyb do cesty UponFailure.
  • Přidejte druhou aktivitu, ale nepřipojujte se k první aktivitě.
  • Propojte cesty UponFailure a UponSkip z aktivity zpracování chyb k druhé aktivitě.

Note

Každá cesta (UponSuccess, UponFailure a UponSkip) může odkazovat na libovolnou aktivitu. Na stejnou aktivitu může odkazovat více cest. Například UponSuccess a UponSkip mohou odkazovat na jednu aktivitu, zatímco UponFailure odkazuje na jiný.

Snímek obrazovky znázorňující kanál s blokem try catch

Úloha zpracování chyb se spustí pouze v případě, že selže první aktivita. Další aktivita se spustí bez ohledu na to, jestli první aktivita proběhne úspěšně nebo ne.

Zpracování obecných chyb

V potrubí obvykle běží několik aktivit postupně. Pokud nějaké selže, potřebuji spustit úlohu zpracování chyb, aby se stav vymaže a/nebo se chyba zapíše. Mám například v rámci pipeline sekvenční kopírovací aktivity. Pokud některá z těchto částí selže, potřebuji spustit skript pro záznam selhání pipeline.

Pro nastavení vzoru:

  • Sestavení potrubí sekvenčního zpracování dat
  • Přidejte krok zpracování obecných chyb na konec zpracování dat.
  • Připojte cesty UponFailure i UponSkip z poslední aktivity k aktivitě pro zpracování chyb.

Snímek obrazovky znázorňující kanál s obecným zpracováním chyb v kanálu bez větvení

Poslední krok zpracování obecných chyb se spustí pouze v případě, že selže některá z předchozích aktivit. Pokud jsou všechny úspěšné, nespustí se.

Pro zpracování chyb můžete přidat více aktivit.

Snímek obrazovky znázorňující kanál s obecným zpracováním chyb v kanálu bez větvení a více aktivit

Metriky a upozornění služby Data Factory

Vizuální monitorování