Sdílet prostřednictvím


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

VZTAHUJE SE NA: 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še od přesunu dat až po datovou vědu, analýzy v reálném čase, podnikovou inteligenci a reportování. Přečtěte si, jak začít používat novou zkušební verzi zdarma.

Conditional paths

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 Explanation
Upon Success (Výchozí průchod) Tuto cestu spusťte, pokud aktuální aktivita proběhla úspěšně.
Upon Failure Tuto cestu spusťte, pokud aktuální aktivita selhala.
Upon Completion Tuto cestu spusťte po dokončení aktuální aktivity bez ohledu na to, jestli byla úspěšná nebo ne.
Upon Skip Tuto cestu spusťte, pokud samotná aktivita nespustí.

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 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.

Error Handling

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

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á.

Snímek obrazovky znázorňující definici a výsledek akce, pokud jiný blok

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á.

Snímek obrazovky znázorňující definici a výsledek akce, pokud přeskočit blok else

Summary table

Approach Defines 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 Failure
Do-If-Skip-Else Při chybě + Po úspěchu (s fiktivním 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 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á ,

  • V přístupu Try-Catch ,

    • Pokud 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 je úspěšný.
    • Pokud předchozí aktivita selže: uzel při selhání je přijat; celkový kanál je úspěšný.
  • V přístupu Do-If-Else ,

    • 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 je úspěšný.
    • Pokud předchozí aktivita selže: uzel Po úspěchu se přeskočí a jeho nadřazený uzel se nezdaří; selhání celkového kanálu
  • V přístupu Do-If-Skip-Else ,

    • Když předchozí aktivita proběhne úspěšně: uzel Fimmy Upon Skip se přeskočí a jeho nadřazený uzel po úspěchu proběhne úspěšně ; druhá aktivita uzlu Při selhání se přeskočí a její nadřazený uzel bude úspěšný; celkový kanál je ú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 je úspěšný.

Conditional execution

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.

Single activity

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ů.

Error handling

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 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.

Snímek obrazovky znázorňující pokus o přihlášení s nejlepším úsilím

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é.

Snímek obrazovky ukazující kanál pokračuje pouze v případě, že obě webové aktivity proběhnou ú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 s cestou "Při úspěchu" Aktivita AktivitaSucceededed musí být úspěšná, zatímco aktivitaFailed na cestě "Při dokončení" se spouští s maximálním úsilím, to znamená, že může selhat.

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

Or

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 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í zpracování sdílených chyb

V některýchpřípadechch 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'))

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 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.

Snímek obrazovky ukazující kanál pokračuje k dalšímu kroku, pokud některá z aktivit projde.

Complex scenarios

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'))

Snímek obrazovky ukazující kanál pokračuje k dalšímu kroku, pokud některé z aktivit projde nebo jinak spustí kód zpracování chyb.

Common patterns

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ě

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 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

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

Monitor Visually