Delen via


Taken voorwaardelijk uitvoeren in een Azure Databricks-taak

Een taaktaak wordt standaard uitgevoerd wanneer de afhankelijkheden ervan zijn uitgevoerd en allemaal zijn geslaagd, maar u kunt ook taken in een Azure Databricks-taak zo configureren dat deze alleen wordt uitgevoerd wanneer aan bepaalde voorwaarden wordt voldaan. Azure Databricks Jobs ondersteunt de volgende methoden om taken voorwaardelijk uit te voeren:

  • U kunt Uitvoeren opgeven als afhankelijkheden een taak moeten uitvoeren op basis van de uitvoeringsstatus van de afhankelijkheden van de taak. U kunt Run if bijvoorbeeld een taak uitvoeren, zelfs wanneer sommige of alle afhankelijkheden zijn mislukt, zodat uw taak kan herstellen van fouten en doorgaat met uitvoeren.
  • De if/else-voorwaardetaak wordt gebruikt om een deel van een taak DAG uit te voeren op basis van de resultaten van een Boole-expressie. Met de If/else condition taak kunt u vertakkingslogica toevoegen aan uw taak. Voer bijvoorbeeld transformatietaken alleen uit als de upstream-opnametaak nieuwe gegevens toevoegt. Voer anders gegevensverwerkingstaken uit.

De Run if voorwaarde van een taak toevoegen

U kunt een Run if voorwaarde configureren wanneer u een taak bewerkt met een of meer afhankelijkheden. Als u de voorwaarde aan de taak wilt toevoegen, selecteert u de voorwaarde in het vervolgkeuzemenu Uitvoeren als afhankelijkheden in de taakconfiguratie. De Run if voorwaarde wordt geëvalueerd nadat alle taakafhankelijkheden zijn voltooid. U kunt ook een Run if voorwaarde toevoegen wanneer u een nieuwe taak met een of meer afhankelijkheden toevoegt.

Run if opties voor voorwaarde

U kunt de volgende Run if voorwaarden toevoegen aan een taak:

  • Alles is geslaagd: alle afhankelijkheden zijn uitgevoerd en geslaagd. Dit is de standaardvoorwaarde voor het uitvoeren van een taak. De taak wordt gemarkeerd alsof Upstream failed de voorwaarde ongedaan is.
  • Ten minste één geslaagd: ten minste één afhankelijkheid is geslaagd. De taak wordt gemarkeerd alsof Upstream failed de voorwaarde ongedaan is.
  • Geen mislukt: geen van de afhankelijkheden is mislukt en ten minste één afhankelijkheid is uitgevoerd. De taak wordt gemarkeerd alsof Upstream failed de voorwaarde ongedaan is.
  • Klaar: de taak wordt uitgevoerd nadat alle afhankelijkheden zijn uitgevoerd, ongeacht de status van de afhankelijke uitvoeringen. Met deze voorwaarde kunt u een taak definiëren die wordt uitgevoerd zonder afhankelijk van het resultaat van de afhankelijke taken.
  • Ten minste één is mislukt: ten minste één afhankelijkheid is mislukt. De taak wordt gemarkeerd alsof Excluded de voorwaarde ongedaan is.
  • Alles is mislukt: alle afhankelijkheden zijn mislukt. De taak wordt gemarkeerd alsof Excluded de voorwaarde ongedaan is.

Notitie

  • Taken die zijn geconfigureerd voor het afhandelen van fouten, worden gemarkeerd alsof Excluded hun Run if voorwaarde ongedaan is. Uitgesloten taken worden overgeslagen en worden behandeld als geslaagd.
  • Als alle taakafhankelijkheden worden uitgesloten, wordt de taak ook uitgesloten, ongeacht Run if de voorwaarde.
  • Als u een taakuitvoering annuleert, wordt de annulering doorgegeven via downstreamtaken en taken met een Run if voorwaarde voor het afhandelen van fouten, bijvoorbeeld om te controleren of een opschoontaak wordt uitgevoerd wanneer een taakuitvoering wordt geannuleerd.

Hoe bepaalt Azure Databricks-taken de uitvoeringsstatus van de taak?

Azure Databricks-taken bepaalt of een taakuitvoering is geslaagd op basis van het resultaat van de bladtaken van de taak. Een bladtaak is een taak die geen downstreamafhankelijkheden heeft. Een taakuitvoering kan een van de volgende drie resultaten hebben:

  • Geslaagd: alle taken zijn geslaagd.
  • Geslaagd met fouten: sommige taken zijn mislukt, maar alle bladtaken zijn geslaagd.
  • Mislukt: een of meer leaf-taken zijn mislukt.

Vertakkingslogica toevoegen aan uw taak met de If/else condition taak

Gebruik de If/else condition taak om een deel van een taak DAG uit te voeren op basis van een Boole-expressie. De expressie bestaat uit een Booleaanse operator en een paar operanden, waarbij de operanden kunnen verwijzen naar een taak of taakstatus met behulp van taak- en taakparametervariabelen of taakwaarden gebruiken.

Notitie

  • Numerieke en niet-numerieke waarden worden verschillend verwerkt, afhankelijk van de booleaanse operator:
    • De == operatoren != voeren een tekenreeksvergelijking van hun operanden uit. Evalueert bijvoorbeeld 12.0 == 12 naar onwaar.
    • De >operatoren , >=en <= operators voeren numerieke vergelijkingen van hun operanden uit. Evalueert bijvoorbeeld 12.0 >= 12 waar en 10.0 >= 12 resulteert in onwaar.
    • Alleen numerieke, tekenreeks- en booleaanse waarden zijn toegestaan bij het verwijzen naar taakwaarden in een operand. Eventuele andere typen zorgen ervoor dat de voorwaardeexpressie mislukt. Niet-numerieke waardetypen worden geserialiseerd naar tekenreeksen en worden behandeld als tekenreeksen in If/else condition expressies. Als een taakwaarde bijvoorbeeld is ingesteld op een Booleaanse waarde, wordt deze geserialiseerd naar "true" of "false".

U kunt een If/else condition taak toevoegen wanneer u een taak maakt of een taak in een bestaande taak bewerkt. Een taak configureren If/else condition :

  1. Selecteer If/else conditionin de vervolgkeuzelijst Type .
  2. Voer in het tekstvak Eerste voorwaarde de operand in die moet worden geëvalueerd. De operand kan verwijzen naar een taak- of taakparametervariabele of een taakwaarde.
  3. Selecteer een Booleaanse operator in de vervolgkeuzelijst.
  4. Voer in het tweede tekstvak Voorwaarde de waarde in voor het evalueren van de voorwaarde.

Afhankelijkheden voor een If/else condition taak configureren:

  1. Selecteer de taak in de If/else condition DAG-weergave en klik op + Taak toevoegen.
  2. Nadat u details voor de taak hebt ingevoerd, klikt u op Afhankelijk en selecteert u <task-name> (true) waar <task-name> de naam van de If/else condition taak is.
  3. Herhaal dit voor de voorwaarde die wordt geëvalueerd.false

Stel dat u een taak hebt met de naam process_records die een telling van records onderhoudt die niet geldig zijn in een benoemde bad_recordswaarde en u wilt vertakkingsverwerking uitvoeren op basis van of records die niet geldig zijn, worden gevonden. Als u deze logica aan uw werkstroom wilt toevoegen, kunt u een If/else condition taak maken met een expressie zoals {{tasks.process_records.values.bad_records}} > 0. Vervolgens kunt u afhankelijke taken toevoegen op basis van de resultaten van de voorwaarde.

Nadat de uitvoering van een taak met een If/else condition taak is voltooid, kunt u het resultaat van de expressie en details van de expressie-evaluatie bekijken wanneer u de details van de taakuitvoering in de gebruikersinterface bekijkt.