Condividi tramite


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

  1. Per creare un trigger periodico nel portale di Azure, selezionare la scheda Trigger e quindi selezionare Nuovo.
  2. Dopo l'apertura del riquadro di configurazione del trigger, selezionare Finestra a cascata. Definire quindi le proprietà del trigger periodico.
  3. 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
runtimeState Stato attuale del runtime del trigger.
Questo elemento è <readOnly>.
String Started, Stopped, Disabled
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
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.
startTime Prima occorrenza, che può essere nel passato. Il primo intervallo di trigger è (startTime, startTime + interval). DateTime Valore DateTime.
endTime Ultima occorrenza, che può essere nel passato. DateTime Valore DateTime.
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.
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'elemento interval non può essere modificato dopo la creazione del trigger. Questa restrizione è necessaria per il corretto funzionamento delle riesecuzioni di triggerRun 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 valore endTime. Se il nuovo valore endTime è precedente alle finestre già eseguite, il trigger si interrompe. In caso contrario, il trigger si interrompe quando viene rilevato il nuovo valore endTime.

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

Codice di esempio

  1. 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'elemento endTime 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"
      }
    }
    
  2. Creare un trigger usando il cmdlet Set-AzDataFactoryV2Trigger:

    Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
    
  3. Confermare che lo stato del trigger è Interrotto usando il cmdlet Get-AzDataFactoryV2Trigger:

    Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  4. Avviare il trigger usando il cmdlet Start-AzDataFactoryV2Trigger:

    Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  5. Confermare che lo stato del trigger è avviato usando il cmdlet Get-AzDataFactoryV2Trigger:

    Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  6. 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 e TriggerRunStartedBefore 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.