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
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 |
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.
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.
"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.
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.
-
- 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.
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.
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.
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.
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'))
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
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'))
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.
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 zal niet uitgevoerd worden als ze allemaal slagen.
U kunt meerdere activiteiten toevoegen voor foutafhandeling.