Fouten en voorwaardelijke uitvoering

Van toepassing op: Azure Data Factory Azure Synapse Analytics

Tip

Data Factory in Microsoft Fabric is de volgende generatie van Azure Data Factory, met een eenvoudigere architectuur, ingebouwde AI en nieuwe functies. Als u nieuw bent in gegevensintegratie, begint u met Fabric Data Factory. Bestaande ADF-workloads kunnen upgraden naar Fabric om toegang te krijgen tot nieuwe mogelijkheden voor gegevenswetenschap, realtime analyses en rapportage.

Voorwaardelijke paden

Azure Data Factory en Synapse Pipeline-indeling staat voorwaardelijke logica toe en stelt de gebruiker in staat een ander pad te nemen op basis van resultaten van een eerdere activiteit. Door verschillende paden te gebruiken, kunnen gebruikers robuuste pijplijnen bouwen en foutafhandeling opnemen in ETL-/ELT-logica. In totaal staan we vier voorwaardelijke paden toe,

Name Explanation
In geval van succes (Standaardpas) Voer dit pad uit als de huidige activiteit is geslaagd
Bij een storing Voer dit pad uit als de huidige activiteit is mislukt
Na voltooiing Voer dit pad uit nadat de huidige activiteit is voltooid, ongeacht of deze is geslaagd of niet
Bij overslaan Voer dit pad uit als de activiteit zelf niet is uitgevoerd

Schermopname van de vier vertakkingen van een activiteit.

U kunt meerdere vertakkingen toevoegen na een activiteit, met één uitzondering: het pad Na voltooiing kan niet naast het pad Bij succes of Bij fout worden gebruikt. Voor elke pijplijnuitvoering wordt maximaal één pad geactiveerd op basis van het uitvoeringsresultaat van de activiteit.

Foutafhandeling

Veelvoorkomend mechanisme voor foutafhandeling

Catch-blok proberen

In deze benadering definieert de klant de bedrijfslogica en definieert de klant alleen het pad bij fout om eventuele fouten van eerdere activiteiten te ondervangen. Deze aanpak zorgt ervoor dat de pijplijn slaagt, als het pad 'Bij Falen' slaagt.

Schermopname van de definitie en het resultaat van een try catch-blok.

Do If Else blokkeren

In deze benadering definieert de klant de bedrijfslogica en definieert zowel de paden Bij mislukken als Bij succes . Met deze methode faalt de pijplijn, zelfs als het pad Bij Falen slaagt.

Schermopname van de definitie en het resultaat van do if else block.

"Doe-Als-Overslaan-Anders blok (Do If Skip Else block)"

In deze benadering definieert de klant de bedrijfslogica en zowel het pad Bij mislukt als het pad Bij succes, waarbij een dummyactiviteit Bij overgeslagen is gekoppeld. Deze aanpak zorgt ervoor dat de pijplijn slaagt, als het pad 'Bij Falen' slaagt.

Schermopname van de definitie en het resultaat van do als u een ander blok overslaat.

Samenvattingstabel

Approach Defines Wanneer de activiteit slaagt, wordt de algehele pijplijn weergegeven Wanneer de activiteit mislukt, wordt de algehele pijplijn weergegeven
Try-Catch Alleen bij foutpad Success Success
Do-If-Else Bij falen paden + bij slagen paden Success Failure
Do-If-Skip-Else Bij foutpad + bij succespad (met een dummy bij overslaan aan het einde) Success Success

Hoe pijplijnfouten worden bepaald

Verschillende mechanismen voor foutafhandeling leiden tot een andere status voor de pijplijn: terwijl sommige pijplijnen mislukken, slagen andere. We bepalen als volgt of de pijplijn is geslaagd en mislukt:

  • Evalueer het resultaat voor alle verlofactiviteiten. Als een bladactiviteit is overgeslagen, evalueren we in plaats daarvan de bovenliggende activiteit
  • Het resultaat van de pijplijn is succesvol indien en slechts indien alle knooppunten met succes zijn geëvalueerd.

Ervan uitgaande dat Bij Falen activiteit en Dummy Bij Falen activiteit slagen,

  • In Try-Catch-benadering ,

    • Wanneer eerdere activiteit slaagt: knooppunt na fout wordt overgeslagen en het bovenliggende knooppunt slaagt; de algehele pijplijn slaagt
    • Wanneer de vorige activiteit mislukt: knooppunt Bij Fout wordt uitgevoerd en de algehele pijplijn slaagt.
  • In Do-If-Else-benadering ,

    • Wanneer eerdere activiteit slaagt: knooppunt Bij Succes slaagt en knooppunt Bij Fout wordt overgeslagen (en zijn bovenliggende knooppunt slaagt); de totale pijplijn slaagt
    • Wanneer de vorige activiteit mislukt: knooppunt Upon Success wordt overgeslagen en het bovenliggende knooppunt is mislukt; de algehele pijplijn faalt.
  • In Do-If-Skip-Else-benadering ,

    • Wanneer de vorige activiteit is geslaagd: het knooppunt Dummy Bij Overslaan wordt overgeslagen en het bovenliggende knooppunt Bij Succes slaagt. De andere knooppuntactiviteit, Bij Fout, wordt overgeslagen en zijn bovenliggende knooppunt slaagt. De gehele pijplijn is geslaagd.
    • Wanneer de vorige activiteit mislukt: knooppunt Bij mislukt slaagt en Dummy bij overslaan slaagt; de algehele pijplijn slaagt

Voorwaardelijke uitvoering

Naarmate we complexere en tolerantere pijplijnen ontwikkelen, is het soms vereist om voorwaardelijke uitvoeringen in onze logica te introduceren: voer een bepaalde activiteit alleen uit als aan bepaalde voorwaarden wordt voldaan. De use cases zijn bijvoorbeeld voldoende:

  • een opvolgingsactiviteit uitvoeren, zoals het verzenden van een e-mailmelding, als eerdere kopieertaken zijn geslaagd
  • een foutafhandelingstaak uitvoeren als een van de vorige activiteiten is mislukt
  • ga verder met de volgende stap als de activiteit zelf of de bijbehorende foutafhandelingsactiviteit slaagt
  • etc.

Hier leggen we enkele algemene logica uit en hoe u deze implementeert in ADF.

Eén activiteit

Hier volgen enkele veelvoorkomende patronen na één activiteit. We kunnen deze patronen gebruiken als bouwstenen om ingewikkelde werkstromen te maken.

Foutafhandeling

Het patroon is de meest voorkomende logica voor voorwaarden in ADF. Er wordt een foutafhandelingsactiviteit gedefinieerd voor het pad 'Bij fout' en wordt aangeroepen als de hoofdactiviteit mislukt. Het moet worden opgenomen als best practice voor alle essentiële stappen die alternatieve alternatieven of logboekregistratie nodig hebben.

Schermopname van foutafhandeling voor bedrijfskritieke stappen.

Stappen voor een zo goed mogelijke inspanning

Bepaalde stappen, zoals informatieve logboekregistratie, zijn minder kritiek en hun fouten mogen de hele pijplijn niet blokkeren. In dergelijke gevallen moeten we de best effort-strategieën aannemen: de volgende stappen toevoegen aan het pad 'Na voltooiing' om de blokkering van de werkstroom op te heffen.

Schermopname van de beste poging om te loggen.

And

De eerste en meest voorkomende scenario's zijn voorwaardelijk 'en': ga door met het proces alleen als de vorige activiteiten slagen. U kunt bijvoorbeeld meerdere kopieeractiviteiten hebben die eerst moeten slagen voordat u naar de volgende fase van gegevensverwerking gaat. In ADF kan het gedrag eenvoudig worden bereikt: meerdere afhankelijkheden declareren voor de volgende stap. Grafisch betekent dit dat meerdere regels naar de volgende activiteit wijzen. U kunt het pad 'Bij succes' kiezen om ervoor te zorgen dat de afhankelijkheid is geslaagd, of het pad 'Na voltooiing' om de uitvoering van de beste inspanning mogelijk te maken.

Hier wordt de follow-up wachtactiviteit alleen uitgevoerd wanneer beide webactiviteiten zijn geslaagd.

Schermopname van pijplijn wordt alleen uitgevoerd als beide webactiviteiten slagen.

En hier wordt de opvolgende wachtactiviteit uitgevoerd wanneer ActivitySucceeded is geslaagd en ActivityFailed is voltooid. Houd er rekening mee dat het pad 'Bij Succes' ActivitySucceeded moet slagen, terwijl aan de andere kant ActivityFailed op het pad 'Na voltooiing' wordt uitgevoerd met de beste inspanning, dat wil zeggen, het kan mislukken.

Schermopname waarin de pijplijn wordt weergegeven wanneer de eerste webactiviteit slaagt en de tweede webactiviteit is voltooid.

Or

Tweede veelvoorkomende scenario's zijn voorwaardelijk 'of': voer een activiteit uit als een van de afhankelijkheden slaagt of mislukt. Hier moeten we 'Na voltooiing'-paden, de If Condition-activiteit en expressietaal gebruiken.

Voordat we dieper ingaan op code, moeten we nog één ding begrijpen. Nadat een activiteit is uitgevoerd en voltooid, kunt u verwijzen naar de status ervan met @activity('ActivityName'). Status. Het is 'Geslaagd'_ of 'Mislukt'. We gebruiken deze eigenschap om voorwaardelijke of logische logica te bouwen.

Logboekregistratiestap voor gedeelde foutafhandeling

In sommige gevallen kunt u een gedeelde foutafhandeling of logboekregistratiestap aanroepen als een van de vorige activiteiten is mislukt. U kunt uw pijplijn als volgt bouwen:

  • meerdere activiteiten parallel uitvoeren
  • een if-voorwaarde toevoegen om de stappen voor foutafhandeling te bevatten in de true-vertakking
  • activiteiten verbinden met de voorwaardeactiviteit met behulp van het pad 'Na voltooiing'
  • logische expressie voor conditionele activiteit leest
@or(equals(activity('ActivityFailed').Status, 'Failed'), equals(activity('ActivitySucceeded').Status, 'Failed'))
  • Opmerking: u moet concatenatie gebruiken of als u meer dan twee afhankelijkheidsactiviteiten hebt, bijvoorbeeld
@or(or(equals(activity('ActivityFailed').Status, 'Failed'), equals(activity('ActivitySucceeded1').Status, 'Failed')),equals(activity('ActivitySucceeded1').Status, 'Failed'))

Schermopname van het uitvoeren van een gedeelde foutafhandelingsstap als een van de vorige activiteiten is mislukt.

Greenlight indien een activiteit is geslaagd

Wanneer al uw activiteiten het best zijn, kunt u doorgaan met de volgende stap als een van de vorige activiteiten is geslaagd. U kunt uw pijplijn als volgt bouwen:

  • meerdere activiteiten parallel uitvoeren
  • een if-voorwaarde toevoegen die volgende stappen moet bevatten, in de true-vertakking
  • activiteiten verbinden met de voorwaardeactiviteit met behulp van het pad 'Na voltooiing'
  • logische expressie voor conditionele activiteit leest
@or(equals(activity('ActivityFailed').Status, 'Succeeded'), equals(activity('ActivitySucceeded').Status, 'Succeeded'))
  • Opmerking: de grafiek ziet er precies zo uit als in het vorige scenario. Het enige verschil is de gebruikte expressietaal

Schermopname die laat zien dat de pijplijn doorgaat naar de volgende stap als een van de activiteiten wordt gehaald.

Complexe scenario's

Alle activiteiten moeten slagen om door te gaan

Het patroon is een combinatie van twee: voorwaardelijke en + foutafhandeling. De pijplijn gaat verder met de volgende stappen als alle vervolgactiviteiten zijn geslaagd, of als er anders een gedeelde stap voor foutlogboekregistratie wordt uitgevoerd. U kunt de pijplijn als volgt bouwen:

  • meerdere activiteiten parallel uitvoeren
  • voeg een if-voorwaarde toe. Voeg de volgende stappen toe in de True-vertakking en voeg code voor foutafhandeling toe in de onwaar-vertakking
  • activiteiten verbinden met de voorwaardeactiviteit met behulp van het pad 'Na voltooiing'
  • logische expressie voor conditionele activiteit leest
@and(equals(activity('ActivityFailed').Status, 'Succeeded'), equals(activity('ActivitySucceeded').Status, 'Succeeded'))

Schermopname laat zien dat de pijplijn doorgaat naar de volgende stap als een van de activiteiten slaagt, of anders dat code voor foutafhandeling wordt uitgevoerd.

Algemene patronen

Try-Catch-Proceed

Het patroon is gelijk aan een try-catch-structuur in programmeren. Een activiteit kan mislukken in een pijplijn. Wanneer dit mislukt, moet de klant een foutafhandelingstaak uitvoeren om ermee om te gaan. De fout met één activiteit mag echter niet de volgende activiteiten in de pijplijn blokkeren. Ik probeer bijvoorbeeld een kopieertaak uit te voeren en bestanden naar de opslag te verplaatsen. Het kan echter halverwege mislukken. En in dat geval wil ik de gedeeltelijk gekopieerde, onbetrouwbare bestanden uit het opslagaccount verwijderen (stap voor foutafhandeling). Maar ik kan vervolgens verdergaan met andere activiteiten.

Het patroon instellen:

  • Eerste activiteit toevoegen
  • Foutafhandeling toevoegen aan het pad UponFailure
  • Tweede activiteit toevoegen, maar geen verbinding maken met de eerste activiteit
  • Koppel zowel UponFailure- als UponSkip-paden van de foutafhandelingsactiviteit aan de tweede activiteit

Note

Elk pad (UponSuccess, UponFailure en UponSkip) kan verwijzen naar elke activiteit. Meerdere paden kunnen verwijzen naar dezelfde activiteit. UponSuccess en UponSkip kunnen bijvoorbeeld beide verwijzen naar één activiteit terwijl UponFailure verwijst naar een andere activiteit.

Schermopname van pijplijn met try catch block.

Foutafhandelingstaak wordt alleen uitgevoerd wanneer de eerste activiteit mislukt. Volgende activiteit wordt uitgevoerd, ongeacht of de eerste activiteit slaagt of niet.

Algemene foutafhandeling

Over het algemeen worden meerdere activiteiten sequentieel uitgevoerd in de pijplijn. Als er een fout optreedt, moet ik een foutafhandelingstaak uitvoeren om de status te wissen en/of de fout te registreren. Ik heb bijvoorbeeld sequentiële kopieeractiviteiten in de pijplijn. Als een van deze mislukt, moet ik een scripttaak uitvoeren om de pijplijnfout te registreren.

Het patroon instellen:

  • Pijplijn voor sequentiële gegevensverwerking bouwen
  • Algemene stap voor foutafhandeling toevoegen aan het einde van de pijplijn
  • Koppel zowel UponFailure- als UponSkip-paden van de laatste activiteit aan de foutafhandelingsactiviteit

Schermopname van pijplijn met algemene foutafhandeling in een pijplijn zonder vertakking.

De laatste stap, algemene foutafhandeling, wordt alleen uitgevoerd als een van de vorige activiteiten mislukt. Het zal niet uitgevoerd worden als ze allemaal slagen.

U kunt meerdere activiteiten toevoegen voor foutafhandeling.

Schermopname van pijplijn met algemene foutafhandeling in een pijplijn zonder vertakking en meerdere activiteiten.

Metrische gegevens en waarschuwingen van Data Factory

Visueel bewaken