Chyby a podmíněné spuštění
PLATÍ PRO: Azure Data Factory Azure Synapse Analytics
Tip
Vyzkoušejte si službu Data Factory v Microsoft Fabric, řešení pro analýzy typu all-in-one pro podniky. Microsoft Fabric zahrnuje všechno od přesunu dat až po datové vědy, analýzy v reálném čase, business intelligence a vytváření sestav. Přečtěte si, jak začít používat novou zkušební verzi zdarma.
Podmíněné cesty
Orchestrace kanálů Azure Data Factory a Synapse umožňuje podmíněné logice a umožňuje uživateli provést jinou cestu na základě výsledků 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 | Vysvětlení |
---|---|
Při úspěchu | (Výchozí průchod) Tuto cestu spusťte, pokud aktuální aktivita proběhla úspěšně. |
Při neúspěchu | Tuto cestu spusťte, pokud aktuální aktivita selhala. |
Při 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 samotná aktivita nespustí. |
Můžete přidat více větví za aktivitou, s jednou výjimkou: Po dokončení cesta nemůže existovat společně s cestou Při úspěchu nebo Při selhání . Pro každé spuštění kanálu se aktivuje maximálně jedna cesta na základě výsledku provádění aktivity.
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á.
Do If Else block
V tomto přístupu zákazník definuje obchodní logiku a definuje cesty při selhání i po úspěchu . Tento přístup vykreslí kanál neúspěšně, i když je cesta Při selhání úspěšná.
Do If Skip Else block
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á.
Souhrnná tabulka
Přístup | Definuje | Když aktivita proběhne úspěšně, zobrazí se celkový kanál. | Když aktivita selže, zobrazí se celkový kanál. |
---|---|---|---|
Try-Catch | Pouze při cestě k chybě | Success | Success |
Do-If-Else | Cesta při selhání + Při úspěchu | Success | Selhání |
Do-If-Skip-Else | Při chybě + Po úspěchu (s fiktivním při přeskočení na konci) | Success | Success |
Určení 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 kanálu a selhání určíme následujícím způsobem:
- Vyhodnoťte výsledek pro všechny aktivity, které opustí. 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 fiktivní při selhání aktivita byla úspěšná,
-
- Když předchozí aktivita proběhne úspěšně: uzel při selhání se přeskočí a jeho nadřazený uzel bude úspěšný; celkový kanál bude úspěšný.
- Pokud předchozí aktivita selže: uzel při selhání je přijat; celkový kanál bude úspěšný.
-
- Když předchozí aktivita proběhne úspěšně: uzel Po úspěchu proběhne úspěšně a uzel při selhání se přeskočí (a nadřazený uzel bude úspěšný); celkový kanál bude úspěšný.
- Pokud předchozí aktivita selže: uzel Po úspěchu se přeskočí a jeho nadřazený uzel selže; celkový kanál selže.
-
- Pokud předchozí aktivita proběhne úspěšně: uzel Při přeskočení se přeskočí a jeho nadřazený uzel po úspěchu proběhne úspěšně ; ostatní aktivity uzlu při selhání se přeskočí a nadřazený uzel bude úspěšný; celkový kanál bude úspěšný.
- Pokud předchozí aktivita selže: uzel při selhání proběhne úspěšně a fiktivní při přeskočení proběhne úspěšně; celkový kanál bude ú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ě.
- aj.
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í.
Kroky pro nejlepší ú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 co nejlepšího úsilí: přidání dalších kroků do cesty "Po dokončení" k odblokování pracovního postupu.
And
První a nejběžnější scénáře jsou podmíněné "a": pokračujte v kanálu, pouze pokud předchozí aktivity proběhnou úspěšně. Můžete mít například několik aktivit kopírování, které je potřeba před přechodem na další fázi zpracování dat uspět. V ADF lze chování snadno dosáhnout: deklarujte více závislostí pro další krok. Graficky to znamená, že několik řádků směřujících na další aktivitu. Můžete zvolit cestu "Při úspěchu", abyste zajistili, že závislost byla úspěšná, nebo "Po dokončení" cestu, která umožní provádění s nejlepším úsilím.
V této části se aktivita následného čekání spustí jenom v případě, že byly obě webové aktivity úspěšné.
A tady se aktivita následného čekání provede, když aktivitaSucceeded projde a aktivita Se nezdařila. Všimněte si, že aktivita ActivitySucceeded s cestou "Při úspěchu" musí být úspěšná, zatímco aktivitaFailed na cestě "Po dokončení" se spustí s nejlepším úsilím, to znamená, že může selhat.
Nebo
Druhé běžné scénáře jsou podmíněné "nebo": spuštění aktivity, pokud některý z závislostí proběhne úspěšně nebo selže. Tady musíme použít cesty "Po dokončení", aktivity podmínky If a jazyk výrazu.
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 s @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í zpracování sdílených chyb
V některých případech můžete chtít vyvolat sdílený krok zpracování chyb nebo protokolování, pokud některé z předchozích aktivit selhaly. Kanál 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řipojení aktivit k aktivitě podmínky pomocí cesty Po dokončení
- Logický výraz pro čtení aktivity podmínky
@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ě aktivity závislostí, například
@or(or(equals(activity('ActivityFailed').Status, 'Failed'), equals(activity('ActivitySucceeded1').Status, 'Failed')),equals(activity('ActivitySucceeded1').Status, 'Failed'))
Greenlight, pokud jakákoli aktivita proběhla úspěšně
Pokud jsou všechny aktivity co nejlépe náročné, můžete pokračovat k dalšímu kroku, pokud některé z předchozích aktivit proběhly úspěšně. Kanál můžete vytvořit takto:
- paralelní spouštění více aktivit
- přidání podmínky if, která bude obsahovat další kroky ve větvi True
- připojení aktivit k aktivitě podmínky pomocí cesty Po dokončení
- Logický výraz pro čtení aktivity podmínky
@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.
Složité scénáře
Aby bylo pokračovat, musí být všechny aktivity úspěšné.
Vzor je kombinací dvou: podmíněného zpracování a 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řipojení aktivit k aktivitě podmínky pomocí cesty Po dokončení
- Logický výraz pro čtení aktivity podmínky
@and(equals(activity('ActivityFailed').Status, 'Succeeded'), equals(activity('ActivitySucceeded').Status, 'Succeeded'))
Obvyklé scénáře
Try-Catch-Proceed
Vzor je ekvivalentem pokusu o zachycení bloku při kódování. Aktivita může v kanálu 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 kanálu. 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 já jsem v pořádku pokračovat s dalšími činnostmi potom.
Nastavení vzoru:
- Přidání první aktivity
- Přidání zpracování chyb do cesty UponFailure
- Přidejte druhou aktivitu, ale nepřipojujte se k první aktivitě.
- Připojení cest UponFailure i UponSkip z aktivity zpracování chyb k druhé aktivitě
Poznámka:
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ý.
Ú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 kanálu obvykle běží několik aktivit. 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 kanálu sekvenční aktivity kopírování. Pokud některý z těchto selhání selže, potřebuji spustit úlohu skriptu pro protokolování selhání kanálu.
Nastavení vzoru:
- Sestavení kanálu sekvenčního zpracování dat
- Přidání kroku zpracování obecných chyb na konec kanálu
- Připojení cest UponFailure i UponSkip z poslední aktivity k aktivitě zpracování chyb
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.