Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 |
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 .
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.
"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 .
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
-
- 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.
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.
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.
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.
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'))
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
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'))
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.
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
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.