Delen via


Fouten en voorwaardelijke uitvoering

VAN TOEPASSING OP: Azure Data Factory Azure Synapse Analytics

Tip

Probeer Data Factory uit in Microsoft Fabric, een alles-in-één analyseoplossing voor ondernemingen. Microsoft Fabric omvat alles, van gegevensverplaatsing tot gegevenswetenschap, realtime analyses, business intelligence en rapportage. Meer informatie over het gratis starten van een nieuwe proefversie .

Conditional paths

Met indeling van Azure Data Factory en Synapse Pipeline kan voorwaardelijke logica worden gebruikt en kan de gebruiker een ander pad maken op basis van resultaten van een vorige 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
Upon Success (Standaardpas) Voer dit pad uit als de huidige activiteit is geslaagd
Upon Failure Voer dit pad uit als de huidige activiteit is mislukt
Upon Completion Voer dit pad uit nadat de huidige activiteit is voltooid, ongeacht of deze is geslaagd of niet
Upon Skip 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.

Error Handling

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 methode geeft aan dat de pijplijn slaagt als het pad mislukt .

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 wordt de pijplijn mislukt, zelfs als het pad Mislukt 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 definieert deze zowel het pad Bij mislukt als bij succes, waarbij een dummy bij overgeslagenactiviteit is gekoppeld. Deze methode geeft aan dat de pijplijn slaagt als het pad mislukt .

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

Summary table

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 foutpad + bij geslaagde 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 verlaten activiteiten. Als een bladactiviteit is overgeslagen, evalueren we in plaats daarvan de bovenliggende activiteit
  • Pijplijnresultaat is geslaagd als en alleen als alle knooppunten zijn geëvalueerd

Ervan uitgaande dat de foutactiviteit en dummy bij mislukte 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 wanneer de fout wordt uitgevoerd; de algehele pijplijn slaagt
  • In Do-If-Else-benadering ,

    • Wanneer eerdere activiteit slaagt: knooppunt na geslaagd en knooppunt bij fout wordt overgeslagen (en het bovenliggende knooppunt slaagt); de algehele pijplijn slaagt
    • Wanneer de vorige activiteit mislukt: knooppunt wordt overgeslagen en het bovenliggende knooppunt is mislukt; de algehele pijplijn mislukt
  • In Do-If-Skip-Else-benadering ,

    • Wanneer de vorige activiteit is geslaagd: knooppunt dummy bij overslaan wordt overgeslagen en het bovenliggende knooppunt knooppunt is geslaagd; de andere knooppuntactiviteit, bij fout, wordt overgeslagen en het bovenliggende knooppunt slaagt; de algehele pijplijn slaagt
    • Wanneer de vorige activiteit mislukt: knooppunt bij mislukte pogingen en dummy bij overslaan slaagt; algehele pijplijn slaagt

Conditional execution

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.

Single activity

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

Error handling

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

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 het vastleggen van de beste poging om te registreren.

And

De eerste en meest voorkomende scenario's zijn voorwaardelijk 'en': ga door met de pijplijn als en 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-upwachtactiviteit alleen uitgevoerd wanneer beide webactiviteiten zijn geslaagd.

Schermopname van pijplijn wordt alleen uitgevoerd als beide webactiviteiten slagen.

En hier wordt de follow-upwachtactiviteit uitgevoerd wanneer ActivitySucceeded passeert 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 paden 'Na voltooiing' gebruiken, If Condition-activiteit en expressietaal.

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 leesbewerkingen van voorwaardeactiviteit
@or(equals(activity('ActivityFailed').Status, 'Failed'), equals(activity('ActivitySucceeded').Status, 'Failed'))
  • Opmerking: u hebt samengevoegd 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 als 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 leesbewerkingen van voorwaardeactiviteit
@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 van pijplijn gaat verder met de volgende stap als een van de activiteiten wordt doorgegeven.

Complex scenarios

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 leesbewerkingen van voorwaardeactiviteit
@and(equals(activity('ActivityFailed').Status, 'Succeeded'), equals(activity('ActivitySucceeded').Status, 'Succeeded'))

Schermopname van de pijplijn gaat verder met de volgende stap als een van de activiteiten wordt doorgegeven of als er anders foutcodes voor foutafhandeling worden uitgevoerd.

Common patterns

Try-Catch-Proceed

Het patroon is gelijk aan het catch-blok in codering. 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 ben in orde om daarna verder te gaan 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 wordt niet uitgevoerd 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

Monitor Visually