Criar um gatilho que execute um pipeline em uma janela em cascata
APLICA-SE A: Azure Data Factory Azure Synapse Analytics
Dica
Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange desde movimentação de dados até ciência de dados, análise em tempo real, business intelligence e relatórios. Saiba como iniciar uma avaliação gratuita!
Este artigo fornece etapas para criar, iniciar e monitorar um gatilho de janela em cascata. Para obter informações gerais sobre gatilhos e os tipos com suporte, consulte Gatilhos e execução de pipeline.
Os gatilhos de janela em cascata são um tipo de gatilho acionado em um intervalo de tempo periódico a partir de uma hora de início especificada, enquanto mantém o estado. As janelas em cascata são uma série de intervalos de tempo de tamanho fixo, não sobrepostos e contíguos. Um gatilho de janela em cascata tem uma relação de um para um com um pipeline, e só pode fazer referência a um único pipeline. O gatilho de janela em cascata é uma alternativa mais detalhada de gatilho de agendamento que oferece um conjunto de recursos para cenários complexos (dependência de outros gatilhos de janela em cascata, nova execução de um trabalho com falha e definição de repetição do usuário para pipelines). Para entender mais sobre a diferença entre o gatilho de agendamento e o gatilho de janela em cascata, consulte aqui.
Experiência do Azure Data Factory e do portal Synapse
- Para criar um gatilho periódico no portal do Azure, selecione a guia Gatilhos e selecione Novo.
- Depois que o painel de configuração do gatilho for aberto, selecione Janela em cascatae defina as propriedades do seu gatilho de janela em cascata.
- Quando terminar, selecione Salvar.
Propriedades do tipo de gatilho da janela em cascata
Uma janela em cascata tem as seguintes propriedades de tipo de gatilho:
{
"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"
}
}
}
}
A seguinte tabela fornece uma visão geral de alto nível dos principais elementos de JSON relacionados à recorrência e ao agendamento de um gatilho de janela em cascata:
Elemento JSON | Descrição | Type | Valores permitidos | Obrigatório |
---|---|---|---|---|
tipo | O tipo do gatilho. O tipo é o valor fixo "TumblingWindowTrigger". | String | "TumblingWindowTrigger" | Yes |
runtimeState | O estado atual do tempo de execução do gatilho. Observação: Este elemento é <readOnly>. |
String | “Iniciado”, “Interrompido”, “Desabilitado” | Yes |
frequency | Uma cadeia de caracteres que representa a unidade de frequência (minutos, horas ou meses) na qual o acionador é recorrente. Se os valores de dados startTime são mais granulares do que o valor de frequência, os dados startTime são consideradas quando os limites da janela são computados. Por exemplo, se o valor de frequência for de hora em hora e o valor startTime for 2017-09-01T10:10:10Z, a primeira janela será (2017-09-01T10:10:10Z, 2017-09-01T11:10:10Z). | String | "Minuto", "Hora", "Mês" | Yes |
interval | Um inteiro positivo que indica o intervalo para o valor de frequência, que determina a frequência com a qual o gatilho é executado. Por exemplo, se intervalo for 3 e frequência é "hora", o gatilho é repetido a cada 3 horas. Observação: o intervalo mínimo de janela é de 5 minutos. |
Integer | Um número inteiro positivo. | Yes |
startTime | A primeira ocorrência, que pode estar no passado. O primeiro intervalo do gatilho é (startTime, startTime + intervalo). | Datetime | Um valor Datetime. | Yes |
endTime | A última ocorrência, que pode estar no passado. | Datetime | Um valor Datetime. | Yes |
delay | A quantidade de tempo para atrasar o início do processamento de dados para a janela. A execução do pipeline é iniciada após o tempo de execução esperado mais a quantidade de atraso. O atraso define quanto tempo o gatilho espera antes de disparar uma nova execução. O atraso não altera a janela startTime. Por exemplo, um valor atraso igual a 00:10:00 indica um atraso de 10 minutos. | Timespan (hh:mm:ss) |
Um valor temporal em que o padrão é 00:00:00. | No |
maxConcurrency | O número de execuções do gatilho simultâneas que são acionadas para janelas prontas. Por exemplo, para fazer o preenchimento por hora é executada para resultados de ontem em 24 janelas. Se maxConcurrency = 10, os eventos de gatilho serão disparados somente para as 10 primeiras janelas (00:00-01:00 - 09:00-10:00). Após a conclusão das primeiras 10 execuções de pipeline disparada, as execuções de gatilho serão disparadas para as próximas 10 janelas (10:00-11:00-19:00 às 20:00). Continuando com esse exemplo de maxConcurrency = 10, se houver 10 janelas prontas, há 10 execuções totais de pipeline. Se houver apenas 1 janela pronta, há apenas 1 execução do pipeline. | Integer | Um número inteiro entre 1 e 50. | Yes |
retryPolicy: Count | O número de repetições antes da execução do pipeline ser marcada como "Failed." | Integer | Um inteiro, em que o padrão é 0 (sem repetições). | No |
retryPolicy: intervalInSeconds | O intervalo entre tentativas de repetição especificado em segundos. | Integer | O número de segundos, em que o padrão é 30. O valor mínimo é 30. | No |
dependsOn: type | Tipo de TumblingWindowTriggerReference. Necessário se uma dependência for definida. | String | "TumblingWindowTriggerDependencyReference", "SelfDependencyTumblingWindowTriggerReference" | No |
dependsOn: size | Tamanho da janela em cascata de dependência. | Timespan (hh:mm:ss) |
Um valor de intervalo de tempo positivo em que o padrão é o tamanho da janela do gatilho filho | No |
dependsOn: offset | Deslocamento do gatilho de dependência. | Timespan (hh:mm:ss) |
Um valor de intervalo de tempo que deve ser negativo em uma autodependência. Se nenhum valor for especificado, a janela será igual ao próprio gatilho. | Self-Dependency: Yes Other: No |
Observação
Depois que um gatilho de janela em cascata é publicado, o intervalo e a frequência não podem ser editados.
Variáveis do sistema WindowStart e WindowEnd
Você pode usar as variáveis de sistema WindowStart e WindowEnd do gatilho de janela em cascata na sua definição de pipeline (ou seja, para a parte de uma consulta). Passar as variáveis de sistema como parâmetros para o pipeline na definição de gatilho. O exemplo a seguir mostra como passar essas variáveis como parâmetros:
{
"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'))}"
}
}
}
}
}
Para usar os valores variáveis de sistema de WindowStart e WindowEnd na definição de pipeline, use adequadamente seus parâmetros de "MyWindowStart" e "MyWindowEnd".
Ordem de execução de janelas em um cenário de compensação
Se o StartTime do gatilho estiver no passado, então com base na fórmula M=(CurrentTime- TriggerStartTime)/TumblingWindowSize o gatilho gerará execuções de {M} backfill(past) em paralelo, respeitando a simultaneidade do gatilho antes de seguir para as execuções futuras. A ordem de execução das janelas é determinística, dos intervalos mais antigo aos mais recentes. Atualmente, esse comportamento não pode ser modificado.
Observação
Lembre-se de que, nesse cenário, todas as execuções do startTime selecionado serão executadas antes de executar execuções futuras. Se você precisar fazer backup de um longo período de tempo, é recomendável fazer uma carga histórica inicial.
Elementos TriggerResource existentes
Os pontos a seguir se aplicam à atualização dos elementos TriggerResource existentes:
- O valor do elemento frequency (ou tamanho da janela) do gatilho em conjunto com o elemento Interval não podem ser alterado depois que o gatilho é criado. Isso é necessário para o funcionamento adequado de novas execuções do triggerRun e avaliações de dependência
- Se o valor para o elemento endTime do gatilho altera (adicionado ou atualizado), o estado das janelas que já foram processadas não é redefinido. O gatilho respeita o novo valor endTime. Se o novo valor endTime estiver antes da janela que já foi executado, o gatilho é interrompido. Caso contrário, o gatilho interrompe quando o novo valor endTime for encontrado.
Novas tentativas de pipelines atribuídas pelo usuário
No caso de falhas de pipeline, o gatilho de janela em cascata pode repetir a execução do pipeline referenciado automaticamente usando os mesmos parâmetros de entrada, sem a intervenção do usuário. Isso pode ser especificado usando a propriedade "retryPolicy" na definição do gatilho.
Dependência de gatilho de janela em cascata
Se você quiser garantir que um gatilho de janela em cascata seja executado somente após a execução bem-sucedida de outro gatilho de janela em cascata na data factory, crie uma dependência de gatilho de janela em cascata.
Cancelar a execução da janela em cascata
Você pode cancelar execuções de um gatilho de janela em cascata se a janela específica estiver nos estados Aguardando, Aguardando dependênciaou Executando
- Se a janela estiver no estado Executando, cancele a execução de pipelineassociada e em seguida a execução do gatilho será marcada como cancelada
- Se a janela estiver nos estados Aguardando ou Aguardando dependência, você poderá cancelar a janela no Monitoramento:
Você também pode executar novamente uma janela cancelada. A nova execução incluirá as últimas definições publicadas do gatilho, e as dependências para a janela especificada serão reavaliadas após essa execução
Amostra do Azure PowerShell e da CLI do Azure
Esta seção mostra como usar o Azure PowerShell para criar, iniciar e monitorar um gatilho.
Observação
Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.
Pré-requisitos
Assinatura do Azure. Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Azure PowerShell. Siga as instruções em Instalar o Azure PowerShell no Windows com o PowerShellGet.
Azure Data Factory. Siga as instruções em Criar um Azure Data Factory usando o PowerShell para criar um data factory e um pipeline.
Exemplo de código
Crie um arquivo JSON chamado MyTrigger.json na pasta C:\ADFv2QuickStartPSH\ com o seguinte conteúdo:
Importante
Antes de salvar o arquivo JSON, defina o valor do elemento startTime com a hora UTC atual. Defina o valor do elemento endTime como uma hora após a hora UTC atual.
{ "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" } }
Crie um gatilho usando o cmdletSet-AzDataFactoryV2Trigger:
Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
Confirme se o status do gatilho estáParadousando o cmdletGet-AzDataFactoryV2Trigger:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Inicie o gatilho usando o cmdletStart-AzDataFactoryV2Trigger:
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Confirme se o status do gatilho estáIniciadousando o cmdletGet-AzDataFactoryV2Trigger:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Obtenha as execuções do gatilho no Azure PowerShell usando o cmdlet Get-AzDataFactoryV2TriggerRun. Para obter informações sobre as execuções do gatilho, execute o comando a seguir periodicamente. Atualize os valores de TriggerRunStartedAfter e TriggerRunStartedBefore para que correspondam aos valores na definição de gatilho:
Get-AzDataFactoryV2TriggerRun -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -TriggerName "MyTrigger" -TriggerRunStartedAfter "2017-12-08T00:00:00" -TriggerRunStartedBefore "2017-12-08T01:00:00"
Para monitorar execuções de gatilho e de pipeline no portal do Azure, consulte Monitorar execuções de pipeline.
Conteúdo relacionado
- Para obter mais informações detalhadas sobre gatilhos, consulte Gatilhos e execução de pipeline.
- Criar uma dependência de gatilho de janela em cascata.
- Saiba como referenciar metadados de gatilho no pipeline em Referenciar Metadados de Gatilho em Execuções de Pipeline