Erstellen eines Triggers zum Ausführen einer Pipeline für ein rollierendes Fenster

GILT FÜR: Azure Data Factory Azure Synapse Analytics

Tipp

Testen Sie Data Factory in Microsoft Fabric, eine All-in-One-Analyselösung für Unternehmen. Microsoft Fabric deckt alle Aufgaben ab, von der Datenverschiebung bis hin zu Data Science, Echtzeitanalysen, Business Intelligence und Berichterstellung. Erfahren Sie, wie Sie kostenlos eine neue Testversion starten!

Dieser Artikel enthält die Schritte zum Erstellen, Starten und Überwachen eines Triggers für rollierende Fenster. Allgemeine Informationen zu Triggern und unterstützten Triggertypen finden Sie unter Pipelineausführung und Trigger in Azure Data Factory.

Trigger für ein rollierendes Fenster werden ab einem angegebenen Startzeitpunkt in regelmäßigen Zeitintervallen ausgelöst, während der Zustand beibehalten wird. Bei rollierenden Fenstern handelt es sich um eine Reihe von nicht überlappenden, aneinandergrenzenden Zeitintervallen mit fester Größe. Ein Trigger für ein rollierendes Fenster hat eine 1:1-Beziehung zu einer Pipeline und kann nur auf eine einzelne Pipeline verweisen.

Ein Trigger mit rollierendem Fenster ist eine komplexere Alternative zu einem Plantrigger. Er bietet verschiedene Features für komplexe Szenarios wie die Abhängigkeit von anderen Triggern mit rollierendem Fenster, das erneute Ausführen eines fehlgeschlagenen Auftrags und das Einrichten der Benutzerwiederholung für Pipelines. Weitere Informationen zum Unterschied zwischen einem Plantrigger und einem Trigger mit rollierendem Fenster finden Sie unter Vergleich von Triggertypen.

Die Benutzerportale von Azure Data Factory und Azure Synapse

  1. Zum Erstellen eines Triggers für ein rollierendes Fenster im Azure-Portal wählen Sie die Registerkarte Trigger und dann Neu aus.
  2. Wählen Sie im Bereich zur Triggerkonfiguration Rollierendes Fenster aus. Definieren Sie dann die Eigenschaften des Triggers mit rollierendem Fenster.
  3. Wählen Sie abschließend Speichern aus.

Triggertypeigenschaften eines rollierenden Fensters

Ein rollierendes Fenster weist die folgenden Triggertypeigenschaften auf:

{
    "name": "MyTriggerName",
    "properties": {
        "type": "TumblingWindowTrigger",
        "runtimeState": "<<Started/Stopped/Disabled - readonly>>",
        "typeProperties": {
            "frequency": <<Minute/Hour>>,
            "interval": <<int>>,
            "startTime": "<<datetime>>",
            "endTime": <<datetime - optional>>,
            "delay": <<timespan - optional>>,
            "maxConcurrency": <<int>> (required, max allowed: 50),
            "retryPolicy": {
                "count": <<int - optional, default: 0>>,
                "intervalInSeconds": <<int>>,
            },
            "dependsOn": [
                {
                    "type": "TumblingWindowTriggerDependencyReference",
                    "size": <<timespan - optional>>,
                    "offset": <<timespan - optional>>,
                    "referenceTrigger": {
                        "referenceName": "MyTumblingWindowDependency1",
                        "type": "TriggerReference"
                    }
                },
                {
                    "type": "SelfDependencyTumblingWindowTriggerReference",
                    "size": <<timespan - optional>>,
                    "offset": <<timespan>>
                }
            ]
        },
        "pipeline": {
            "pipelineReference": {
                "type": "PipelineReference",
                "referenceName": "MyPipelineName"
            },
            "parameters": {
                "parameter1": {
                    "type": "Expression",
                    "value": "@{concat('output',formatDateTime(trigger().outputs.windowStartTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
                },
                "parameter2": {
                    "type": "Expression",
                    "value": "@{concat('output',formatDateTime(trigger().outputs.windowEndTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
                },
                "parameter3": "https://mydemo.azurewebsites.net/api/demoapi"
            }
        }
    }
}

Die folgende Tabelle enthält eine allgemeine Übersicht über die wichtigsten JSON-Elemente im Zusammenhang mit der Wiederholung und Zeitplanung eines Triggers mit rollierendem Fenster:

JSON-Element BESCHREIBUNG type Zulässige Werte Erforderlich
type Der Typ des Triggers. type hat den festen Wert TumblingWindowTrigger. String TumblingWindowTrigger Ja
runtimeState Der aktuelle Status der Triggerausführungszeit.
Dieses Element ist <readOnly>.
String Started, Stopped, Disabled Ja
frequency Eine Zeichenfolge für die Einheit der Häufigkeit (Minuten, Stunden oder Monate), mit der der Trigger wiederholt wird. Wenn die startTime-Datumswerte granularer sind als der frequency-Wert, werden die startTime-Datumsangaben bei der Berechnung der Fenstergrenzen berücksichtigt. Beispiel: Wenn der frequency-Wert hourly ist und der startTime-Wert „2017-09-01T10:10:10Z“ lautet, ist das erste Fenster „(2017-09-01T10:10:10Z, 2017-09-01T11:10:10Z)“. String Minute, Hour, Month Ja
interval Eine positive ganze Zahl, die das Intervall des frequency-Werts angibt, der bestimmt, wie oft der Trigger ausgeführt wird. Wenn interval beispielsweise 3 entspricht und frequency gleich hour ist, wird der Trigger alle drei Stunden wiederholt.
Das minimale Fensterintervall beträgt 5 Minuten.
Integer Eine positive ganze Zahl Ja
startTime Das erste Vorkommen, das in der Vergangenheit liegen kann. Das erste Triggerintervall ist (startTime, startTime + interval). DateTime Ein DateTime-Wert. Ja
endTime Das letzte Vorkommen, das in der Vergangenheit liegen kann. DateTime Ein DateTime-Wert. Ja
delay Der Zeitraum, in dem der Beginn der Datenverarbeitung für das Fenster verzögert wird. Die Ausführung der Pipeline wird nach der erwarteten Ausführungszeit sowie dem delay-Wert gestartet. delay legt fest, wie lange der Trigger nach Ablauf der fälligen Zeit wartet, bevor er eine neue Ausführung auslöst. Bei einer Verzögerung wird der startTime-Wert des Fensters nicht geändert. Ein delay-Wert von 00:10:00 impliziert beispielsweise eine Verzögerung von 10 Minuten. Timespan
(hh:mm:ss)
Ein timespan Wert, dessen Standardwert 00:00:00 ist No
maxConcurrency Die Anzahl der gleichzeitigen Triggerausführungen, die für bereite Fenster ausgelöst werden. Das Abgleichen stündlicher Ausführungen des gestrigen Tages ergibt beispielsweise 24 Fenster. Bei „maxConcurrency = 10“ werden Triggerereignisse nur für die ersten 10 Fenster ausgelöst (00:00–01:00 bis 09:00–10:00). Nachdem die ersten 10 ausgelösten Pipelineausführungen erfolgt sind, werden Triggerausführungen für die nächsten 10 Fenster (10:00-11:00 – 19:00-20:00) ausgelöst. Wenn wir das Beispiel mit „maxConcurrency = 10“ weiterdenken, erfolgen insgesamt 10 Pipelineausführungen, wenn 10 Fenster bereit sind. Wenn nur ein Fenster bereit ist, wird nur eine Pipeline ausgeführt. Integer Eine ganze Zahl zwischen 1 und 50. Ja
retryPolicy: Count Die Anzahl der Wiederholungen, bevor die Pipelineausführung als Failed markiert wird Integer Eine ganze Zahl, wobei der Standardwert 0 ist (keine Wiederholungen) No
retryPolicy: intervalInSeconds Die Verzögerung zwischen den in Sekunden angegebenen Wiederholungsversuchen Integer Die Anzahl der Sekunden, wobei der Standardwert 30 ist Der Minimalwert ist 30. No
dependsOn: type Der TumblingWindowTriggerReference-Typ. Erforderlich, wenn eine Abhängigkeit festgelegt ist. String TumblingWindowTriggerDependencyReference, SelfDependencyTumblingWindowTriggerReference No
dependsOn: size Die Größe des abhängigen rollierenden Fensters. Timespan
(hh:mm:ss)
Ein positiver timespan-Wert, wobei der Standardwert der Fenstergröße des untergeordneten Triggers entspricht No
dependsOn: offset Der Offset des Abhängigkeitstriggers. Timespan
(hh:mm:ss)
Ein timespan-Wert, der bei einer Selbstabhängigkeit negativ sein muss. Wenn kein Wert angegeben wird, ist das Fenster identisch mit dem Trigger selbst. Selbstabhängigkeit: Ja
Sonstiges: Nein

Hinweis

Nachdem ein Trigger mit rollierendem Fenster veröffentlicht wurde, können die Werte von interval und frequency nicht mehr bearbeitet werden.

Systemvariablen „WindowStart“ und „WindowEnd“

Sie können die Systemvariablen WindowStart und WindowEnd des Triggers mit rollierendem Fenster in Ihrer Pipelinedefinition (d.h. für einen Teil einer Abfrage) verwenden. Übergeben Sie die Systemvariablen als Parameter an Ihre Pipeline in der Trigger-Definition. Im folgenden Beispiel wird gezeigt, wie diese Variablen als Parameter übergeben werden.

{
    "name": "MyTriggerName",
    "properties": {
        "type": "TumblingWindowTrigger",
            ...
        "pipeline": {
            "pipelineReference": {
                "type": "PipelineReference",
                "referenceName": "MyPipelineName"
            },
            "parameters": {
                "MyWindowStart": {
                    "type": "Expression",
                    "value": "@{concat('output',formatDateTime(trigger().outputs.windowStartTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
                },
                "MyWindowEnd": {
                    "type": "Expression",
                    "value": "@{concat('output',formatDateTime(trigger().outputs.windowEndTime,'-dd-MM-yyyy-HH-mm-ss-ffff'))}"
                }
            }
        }
    }
}

Um die Werte der Systemvariablen WindowStart und WindowEnd in der Pipelinedefinition zu verwenden, verwenden Sie Ihre Parameter MyWindowStart bzw. MyWindowEnd.

Ausführungsreihenfolge von Fenstern in einem Abgleichsszenario

Wenn der startTime-Wert des Triggers in der Vergangenheit liegt, generiert der Trigger basierend auf der Formel „M=(CurrentTime- TriggerStartTime)/TumblingWindowSize“ {M} parallele Ausführungen von „backfill(past)“. Hierbei wird die Triggerparallelität berücksichtigt, bevor die zukünftigen Ausführungen erfolgen. Die Ausführungsreihenfolge für Fenster ist deterministisch, und die ältesten Intervalle werden zuerst ausgeführt. Dieses Verhalten kann derzeit nicht geändert werden.

Hinweis

In diesem Szenario werden alle Ausführungen ab dem ausgewählten startTime-Wert vor den zukünftigen Ausführungen ausgeführt. Wenn Sie einen langen Zeitraum abgleichen müssen, empfiehlt es sich, initial alle historischen Daten zu laden.

Vorhandene TriggerResource-Elemente

Die folgenden Punkte gelten für die Aktualisierung bestehender TriggerResource-Elemente:

  • Der Wert des frequency-Elements (oder die Fenstergröße) des Triggers sowie auch das interval-Element können nicht geändert werden, nachdem der Trigger erstellt wurde. Diese Einschränkung ist für die richtige Funktionsweise von erneuten triggerRun-Ausführungen sowie für Abhängigkeitsauswertungen erforderlich.
  • Wenn der Wert des endTime-Elements des Triggers geändert wird (durch Hinzufügen oder Aktualisieren), wird der Zustand der bereits verarbeiteten Fenster nicht zurückgesetzt. Der Trigger berücksichtigt den neuen endTime-Wert. Wenn der neue endTime-Wert vor den bereits ausgeführten Fenstern liegt, wird der Trigger angehalten. Andernfalls wird der Trigger angehalten, sobald der neue endTime-Wert erreicht wird.

Benutzerseitig zugewiesene Pipelinewiederholungen

Bei Pipelineausfällen kann ein Trigger mit rollierendem Fenster versuchen, die Ausführung der referenzierten Pipeline automatisch ohne Benutzereingriff zu wiederholen, indem die gleichen Eingabeparameter verwendet werden. Verwenden Sie die retryPolicy-Eigenschaft in der Triggerdefinition, um diese Aktion anzugeben.

Triggerabhängigkeit für ein rollierendes Fenster

Wenn Sie sicherstellen möchten, dass ein Trigger für ein rollierendes Fenster erst nach der erfolgreichen Ausführung eines anderen Triggers für das rollierende Fenster ausgeführt wird, erstellen Sie eine Triggerabhängigkeit für das rollierende Fenster in der Data Factory.

Abbrechen der Ausführung eines rollierenden Fensters

Sie können Ausführungen eines Triggers mit rollierendem Fenster abbrechen, wenn sich das Fenster im Zustand Wartend, Auf Abhängigkeit warten oder Wird ausgeführt befindet.

  • Wenn sich das Fenster im Zustand Wird ausgeführt befindet, brechen Sie die zugehörige Pipelineausführung ab. Danach wird die Triggerausführung als Abgebrochen markiert.
  • Wenn sich das Fenster im Zustand Wartend oder im Zustand Auf Abhängigkeit warten befindet, können Sie das Fenster unter Überwachung abbrechen:

Sie können ein abgebrochenes Fenster auch erneut ausführen. Die erneute Ausführung übernimmt die neuesten veröffentlichten Definitionen des Triggers. Abhängigkeiten des angegebenen Fensters werden beim erneuten Ausführen erneut ausgewertet.

Beispiel für Azure PowerShell und die Azure CLI

In diesem Abschnitt erfahren Sie, wie Sie mit Azure PowerShell einen Trigger erstellen, starten und überwachen.

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren von Azure PowerShell. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Voraussetzungen

Beispielcode

  1. Erstellen Sie im Ordner „C:\ADFv2QuickStartPSH“ eine JSON-Datei mit dem Namen MyTrigger.json und dem folgenden Inhalt:

    Wichtig

    Legen Sie den Wert des startTime-Elements vor dem Speichern der JSON-Datei auf die aktuelle UTC-Zeit (koordinierte Weltzeit) fest. Legen Sie den Wert des endTime-Elements auf eine Stunde nach der aktuellen UTC-Zeit fest.

    {
      "name": "PerfTWTrigger",
      "properties": {
        "type": "TumblingWindowTrigger",
        "typeProperties": {
          "frequency": "Minute",
          "interval": "15",
          "startTime": "2017-09-08T05:30:00Z",
          "endTime" : "2017-09-08T06:30:00Z",
          "delay": "00:00:01",
          "retryPolicy": {
            "count": 2,
            "intervalInSeconds": 30
          },
          "maxConcurrency": 50
        },
        "pipeline": {
          "pipelineReference": {
            "type": "PipelineReference",
            "referenceName": "DynamicsToBlobPerfPipeline"
          },
          "parameters": {
            "windowStart": "@trigger().outputs.windowStartTime",
            "windowEnd": "@trigger().outputs.windowEndTime"
          }
        },
        "runtimeState": "Started"
      }
    }
    
  2. Erstellen Sie mit dem Cmdlet Set-AzDataFactoryV2Trigger einen Trigger:

    Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
    
  3. Vergewissern Sie sich, dass der Status des Triggers Beendet lautet, indem Sie das Cmdlet Get-AzDataFactoryV2Trigger verwenden:

    Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  4. Starten Sie den Trigger mithilfe des Cmdlets Start-AzDataFactoryV2Trigger:

    Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  5. Vergewissern Sie sich, dass der Status des Triggers Gestartet lautet, indem Sie das Cmdlet Get-AzDataFactoryV2Trigger verwenden:

    Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  6. Rufen Sie Triggerausführungen in Azure PowerShell mit dem Cmdlet Get-AzDataFactoryV2TriggerRun ab. Führen Sie in regelmäßigen Abständen den folgenden Befehl aus, um die Informationen zu den Triggerausführungen abzurufen. Aktualisieren Sie die Werte von TriggerRunStartedAfter und TriggerRunStartedBefore entsprechend den Werten in Ihrer Triggerdefinition:

    Get-AzDataFactoryV2TriggerRun -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -TriggerName "MyTrigger" -TriggerRunStartedAfter "2017-12-08T00:00:00" -TriggerRunStartedBefore "2017-12-08T01:00:00"
    

Informationen zum Überwachen von Trigger- bzw. Pipelineausführungen im Azure-Portal finden Sie unter Überwachen der Pipelineausführungen.