Creare un trigger per l'esecuzione di una pipeline in una finestra a cascata
SI APPLICA A: Azure Data Factory Azure Synapse Analytics
Suggerimento
Provare Data Factory in Microsoft Fabric, una soluzione di analisi all-in-one per le aziende. Microsoft Fabric copre tutto, dallo spostamento dati al data science, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Vedere le informazioni su come iniziare una nuova prova gratuita!
Questo articolo descrive la procedura per creare, avviare e monitorare un trigger di finestra a cascata. Per informazioni generali sui trigger e i tipi supportati, vedere Esecuzione e trigger di pipeline.
I trigger di finestra a cascata vengono attivati in base a un intervallo di tempo periodico a partire da un'ora di inizio specificata, mantenendo al tempo stesso lo stato. Le finestre a cascata sono costituite da una serie di intervalli temporali di dimensioni fisse, contigui e non sovrapposti. Un trigger di finestra a cascata ha una relazione uno a uno con una pipeline e può fare riferimento solo a una singola pipeline.
Un trigger periodico è un'alternativa più pesante per un trigger di pianificazione. Offre una gamma di funzionalità per scenari complessi, ad esempio dipendenze da altri trigger periodici, ripetizione dell'esecuzione di un processo non riuscito e impostazione della ripetizione dei tentativi dell'utente per le pipeline. Per una migliore comprensione della differenza tra un trigger di pianificazione e un trigger periodico, vedere Confronto tra tipi di trigger.
Esperienza del portale di Azure Data Factory e Azure Synapse
- Per creare un trigger periodico nel portale di Azure, selezionare la scheda Trigger e quindi selezionare Nuovo.
- Dopo l'apertura del riquadro di configurazione del trigger, selezionare Finestra a cascata. Definire quindi le proprietà del trigger periodico.
- Al termine selezionare Salva.
Proprietà del tipo di trigger di finestra a cascata
Una finestra a cascata ha le proprietà del tipo di trigger seguenti:
{
"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"
}
}
}
}
La tabella seguente fornisce una panoramica generale degli elementi JSON principali correlati alla ricorrenza e alla pianificazione di un trigger periodico.
Elemento JSON | Descrizione | Tipo | Valori consentiti | Richiesto |
---|---|---|---|---|
type |
Tipo di trigger. type è il valore fisso TumblingWindowTrigger . |
String |
TumblingWindowTrigger |
Sì |
runtimeState |
Stato attuale del runtime del trigger. Questo elemento è <readOnly>. |
String |
Started , Stopped , Disabled |
Sì |
frequency |
Stringa che rappresenta l'unità di frequenza (minuti, ore o mesi) con cui si ripete il trigger. Se i valori di data startTime sono più granulari del valore frequency , le date startTime vengono considerate quando vengono calcolati i limiti della finestra. Ad esempio, se il valore di frequency è hourly e il valore di startTime è 2017-09-01T10:10:10Z, la prima finestra è (2017-09-01T10:10:10Z, 2017-09-01T11:10:10Z). |
String |
Minute , Hour , Month |
Sì |
interval |
Numero intero positivo indicante l'intervallo per il valore frequency , che determina la frequenza con cui viene eseguito il trigger. Ad esempio, se interval è 3 e frequency è hour , il trigger si ripete ogni 3 settimane. L'intervallo di finestra minimo è di 5 minuti. |
Integer |
Numero intero positivo. | Sì |
startTime |
Prima occorrenza, che può essere nel passato. Il primo intervallo di trigger è (startTime , startTime + interval ). |
DateTime |
Valore DateTime . |
Sì |
endTime |
Ultima occorrenza, che può essere nel passato. | DateTime |
Valore DateTime . |
Sì |
delay |
Periodo di tempo in base a cui ritardare l'avvio dell'elaborazione dei dati per la finestra. L'esecuzione della pipeline viene avviata dopo il tempo di esecuzione previsto più il periodo di ritardo. Il valore delay definisce per quanto tempo il trigger rimane in attesa dopo la scadenza prima di attivare una nuova esecuzione. Il ritardo non modifica la finestra startTime . Ad esempio, un valore delay pari a 00:10:00 implica un ritardo di 10 minuti. |
Timespan (hh:mm:ss) |
Valore timespan in cui il valore predefinito è 00:00:00 . |
No |
maxConcurrency |
Il numero di esecuzioni di trigger simultanee che vengono generate per le finestre che sono pronte. Ad esempio, per recuperare le informazioni relative alle esecuzioni avvenute ogni ora del giorno precedente, si ottengono 24 finestre. Se maxConcurrency = 10, gli eventi trigger vengono generati solo per le prime 10 finestre (00:00-01:00 - 09:00-10:00). Al termine delle prime 10 esecuzioni di pipeline attivate, le esecuzioni di trigger vengono generate per le 10 finestre successive (10:00-11:00 - 19:00-20:00). Continuando con questo esempio di maxConcurrency = 10, se sono pronte 10 finestre, ci sono 10 esecuzioni di pipeline totali. Se è pronta una sola finestra, viene eseguita una sola pipeline. |
Integer |
Numero intero compreso tra 1 e 50. | Sì |
retryPolicy: Count |
Numero di tentativi prima che l'esecuzione della pipeline venga contrassegnata come Failed . |
Integer |
Numero intero, in cui il valore predefinito è 0 (nessun tentativo). | No |
retryPolicy: intervalInSeconds |
Ritardo tra i tentativi di ripetizione specificato in secondi. | Integer |
Numero di secondi, in cui il valore predefinito è 30. Il valore minimo è 30 . |
No |
dependsOn: type |
Tipo di TumblingWindowTriggerReference . Obbligatorio se è impostata una dipendenza. |
String |
TumblingWindowTriggerDependencyReference , SelfDependencyTumblingWindowTriggerReference |
No |
dependsOn: size |
Dimensione della finestra a cascata delle dipendenze. | Timespan (hh:mm:ss) |
Valore positivo timespan in cui il valore predefinito è la dimensione della finestra del trigger figlio. |
No |
dependsOn: offset |
Scostamento del trigger delle dipendenze. | Timespan (hh:mm:ss) |
Valore timespan che deve essere negativo in una dipendenza autonoma. Se non viene specificato alcun valore, la finestra corrisponde al trigger stesso. |
Auto-dipendenza: Sì Altro: No |
Nota
Dopo la pubblicazione di un trigger periodico, i valori interval
e frequency
non possono essere modificati.
Variabili di sistema WindowStart e WindowEnd
È possibile usare le variabili di sistema WindowStart
e WindowEnd
del trigger periodico nella definizione della pipeline, ovvero per una parte di una query. Passare le variabili di sistema come parametri alla pipeline nella definizione del trigger. L'esempio seguente mostra come passare tali variabili come parametri.
{
"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'))}"
}
}
}
}
}
Per usare i valori delle variabili di sistema WindowStart
e WindowEnd
nella definizione della pipeline, usare i parametri MyWindowStart
e MyWindowEnd
di conseguenza.
Ordine di esecuzione delle finestre in uno scenario di recupero delle informazioni
Se il trigger startTime
risale al passato, in base alla formula M=(CurrentTime- TriggerStartTime)/TumblingWindowSize, il trigger genera {M} backfill(past) esecuzioni in parallelo, rispettando la concorrenza dei trigger, prima di eseguire le esecuzioni future. L'ordine di esecuzione per le finestre è deterministico, dagli intervalli meno recenti ai più recenti. Attualmente non è possibile modificare questo comportamento.
Nota
In questo scenario tutte le esecuzioni a partire da startTime
selezionato vengono eseguite prima di eseguire esecuzioni future. Se è necessario recuperare le informazioni relative a un lungo periodo di tempo, è consigliabile eseguire un carico cronologico iniziale.
Elementi TriggerResource esistenti
I punti seguenti si applicano all'aggiornamento degli elementi TriggerResource
esistenti:
- Il valore per l'elemento
frequency
(o dimensioni della finestra) del trigger insieme all'elementointerval
non può essere modificato dopo la creazione del trigger. Questa restrizione è necessaria per il corretto funzionamento delle riesecuzioni ditriggerRun
e delle valutazioni delle dipendenze. - Se il valore per l'elemento
endTime
del trigger viene modificato (aggiunto o aggiornato), lo stato delle finestre che sono già elaborate non viene reimpostato. Il trigger rispetta il nuovo valoreendTime
. Se il nuovo valoreendTime
è precedente alle finestre già eseguite, il trigger si interrompe. In caso contrario, il trigger si interrompe quando viene rilevato il nuovo valoreendTime
.
Tentativi assegnati dall'utente delle pipeline
In caso di errori della pipeline, un trigger periodico può ritentare l'esecuzione della pipeline di riferimento automaticamente usando gli stessi parametri di input, senza l'intervento dell'utente. Usare la proprietà retryPolicy
nella definizione del trigger per specificare questa azione.
Dipendenza del trigger periodico
Se ci si vuole assicurare che un trigger periodico venga eseguito solo dopo l'esecuzione corretta di un altro trigger periodico nella data factory, creare una dipendenza di trigger periodico.
Annullare l'esecuzione di una finestra a cascata
È possibile annullare le esecuzioni per un trigger periodico se lo stato della finestra specifica è In attesa, In attesa della dipendenza o In esecuzione:
- Se lo stato della finestra è In esecuzione, annullare l'Esecuzione della pipeline associata. L'esecuzione del trigger viene contrassegnata come Annullata successivamente.
- Se lo stato della finestra è In attesa o In attesa della dipendenza, è possibile annullare la finestra da Monitoraggio.
È anche possibile rieseguire una finestra annullata. La riesecuzione accetta le definizioni pubblicate più recenti del trigger. Le dipendenze per la finestra specificata vengono rivalutate alla riesecuzione.
Esempio per Azure PowerShell e l'interfaccia della riga di comando di Azure
Questa sezione illustra come usare Azure PowerShell per creare, avviare e monitorare un trigger.
Nota
È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.
Prerequisiti
- Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
- Azure PowerShell: seguire le istruzioni fornite in Installare Azure PowerShell in Windows con PowerShellGet.
- Azure Data Factory: seguire le istruzioni fornite in Creare un'istanza di Azure Data Factory usando PowerShell per creare una data factory e una pipeline.
Codice di esempio
Creare un file JSON denominato MyTrigger.json nella cartella C:\ADFv2QuickStartPSH con il contenuto seguente:
Importante
Prima di salvare il file JSON, impostare il valore dell'elemento
startTime
sull'ora UTC (Coordinated Universal Time) corrente. Impostare il valore dell'elementoendTime
su un'ora dopo l'ora UTC corrente.{ "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" } }
Creare un trigger usando il cmdlet Set-AzDataFactoryV2Trigger:
Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
Confermare che lo stato del trigger è Interrotto usando il cmdlet Get-AzDataFactoryV2Trigger:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Avviare il trigger usando il cmdlet Start-AzDataFactoryV2Trigger:
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Confermare che lo stato del trigger è avviato usando il cmdlet Get-AzDataFactoryV2Trigger:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Ottenere le esecuzioni di trigger in Azure PowerShell usando il cmdlet Get-AzDataFactoryV2TriggerRun. Per ottenere informazioni sulle esecuzioni di trigger, eseguire periodicamente il comando seguente. Aggiornare i valori
TriggerRunStartedAfter
eTriggerRunStartedBefore
in modo che corrispondano ai valori nella definizione del trigger:Get-AzDataFactoryV2TriggerRun -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -TriggerName "MyTrigger" -TriggerRunStartedAfter "2017-12-08T00:00:00" -TriggerRunStartedBefore "2017-12-08T01:00:00"
Per monitorare le esecuzioni di trigger e pipeline nel portale di Azure, vedere Monitorare le esecuzioni di pipeline.