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
- Zum Erstellen eines Triggers für ein rollierendes Fenster im Azure-Portal wählen Sie die Registerkarte Trigger und dann Neu aus.
- Wählen Sie im Bereich zur Triggerkonfiguration Rollierendes Fenster aus. Definieren Sie dann die Eigenschaften des Triggers mit rollierendem Fenster.
- 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 dasinterval
-Element können nicht geändert werden, nachdem der Trigger erstellt wurde. Diese Einschränkung ist für die richtige Funktionsweise von erneutentriggerRun
-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 neuenendTime
-Wert. Wenn der neueendTime
-Wert vor den bereits ausgeführten Fenstern liegt, wird der Trigger angehalten. Andernfalls wird der Trigger angehalten, sobald der neueendTime
-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
- Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
- Azure PowerShell: Befolgen Sie die Anweisungen unter Installieren von Azure PowerShell unter Windows mit PowerShellGet.
- Azure Data Factory: Führen Sie die Anweisungen in Erstellen einer Azure Data Factory-Instanz mithilfe von PowerShell aus, um eine Data Factory und eine Pipeline zu erstellen.
Beispielcode
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 desendTime
-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" } }
Erstellen Sie mit dem Cmdlet Set-AzDataFactoryV2Trigger einen Trigger:
Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
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"
Starten Sie den Trigger mithilfe des Cmdlets Start-AzDataFactoryV2Trigger:
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
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"
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
undTriggerRunStartedBefore
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.