Create a trigger that runs a pipeline on a tumbling window(Criar um acionador que execute um pipeline numa janela em cascata)
APLICA-SE A: Azure Data Factory Azure Synapse Analytics
Gorjeta
Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange tudo, desde a movimentação de dados até ciência de dados, análises em tempo real, business intelligence e relatórios. Saiba como iniciar uma nova avaliação gratuitamente!
Este artigo fornece etapas para criar, iniciar e monitorar um gatilho de janela de tombamento. Para obter informações gerais sobre gatilhos e os tipos suportados, consulte Execução e gatilhos de pipeline.
Os acionadores de janela em cascata são um tipo de acionador que é acionado num intervalo de tempo periódico a partir de uma hora de início especificada, mantendo o estado. As janelas em cascata são uma série de intervalos de tempo com tamanho fixo, não sobrepostos e contínuos. Um gatilho de janela de tombamento tem uma relação um-para-um com um pipeline e só pode fazer referência a um pipeline singular. O gatilho de janela de tombamento é uma alternativa mais pesada para o gatilho de agendamento, oferecendo um conjunto de recursos para cenários complexos (dependência de outros gatilhos de janela de queda, reexecução de um trabalho com falha e nova tentativa do usuário definida para pipelines). Para entender melhor a diferença entre gatilho de agendamento e gatilho de janela de queda, acesse aqui.
Experiência do Azure Data Factory e do portal Synapse
- Para criar um gatilho de janela de tombamento no portal do Azure, selecione a guia Gatilhos e, em seguida, selecione Novo.
- Depois que o painel de configuração do gatilho for aberto, selecione Janela de Tombamento e defina as propriedades do gatilho da janela de queda.
- Quando tiver terminado, selecione Guardar.
Propriedades do tipo de gatilho da janela de tombamento
Uma janela de tombamento 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 tabela a seguir fornece uma visão geral de alto nível dos principais elementos JSON relacionados à recorrência e ao agendamento de um gatilho de janela de queda:
Elemento JSON | Description | Type | Valores permitidos | Necessário |
---|---|---|---|---|
type | O tipo de gatilho. O tipo é o valor fixo "TumblingWindowTrigger". | String | "TumblingWindowTrigger" | Sim |
runtimeState | O estado atual do tempo de execução do gatilho. Nota: Este elemento é <readOnly>. |
String | "Iniciado", "Parado", "Desativado" | Sim |
frequency | Uma cadeia de caracteres que representa a unidade de frequência (minutos, horas ou meses) na qual o gatilho se repete. Se os valores de data startTime forem mais granulares do que o valor de frequência , as datas startTime serão consideradas quando os limites da janela forem calculados. Por exemplo, se o valor de frequência for por 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" | Sim |
interval | Um valor inteiro positivo que indica o intervalo do valor frequency, que determina o número de vezes que o acionador é executado. Por exemplo, se o intervalo for 3 e a frequência for "hora", o gatilho se repete a cada 3 horas. Nota: O intervalo mínimo da janela é de 5 minutos. |
Número inteiro | Um número inteiro positivo. | Sim |
startTime | A primeira ocorrência, que pode ser no passado. O primeiro intervalo de gatilho é (startTime, startTime + interval). | DateTime | Um valor DateTime. | Sim |
endTime | A última ocorrência, que pode ser no passado. | DateTime | Um valor DateTime. | Sim |
atraso | 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 além do tempo devido antes de acionar uma nova execução. O atraso não altera a janela startTime. Por exemplo, um valor de atraso de 00:10:00 implica um atraso de 10 minutos. | Timespan (hh:mm:ss) |
Um valor de intervalo de tempo em que o padrão é 00:00:00. | Não |
maxSimultaneidade | O número de execuções de gatilho simultâneas que são disparadas para janelas que estão prontas. Por exemplo, para preencher as execuções horárias de ontem resulta em 24 janelas. Se maxConcurrency = 10, os eventos de gatilho são disparados apenas para as primeiras 10 janelas (00:00-01:00 - 09:00-10:00). Depois que as primeiras 10 execuções de pipeline acionadas forem concluídas, as execuções de gatilho serão disparadas para as próximas 10 janelas (10:00-11:00 - 19:00-20:00). Continuando com este exemplo de maxConcurrency = 10, se houver 10 janelas prontas, haverá 10 execuções de pipeline totais. Se houver apenas 1 janela pronta, haverá apenas 1 pipeline executado. | Número inteiro | Um número inteiro entre 1 e 50. | Sim |
retryPolicy: Contagem | O número de novas tentativas antes da execução do pipeline é marcado como "Falha". | Número inteiro | Um inteiro, onde o padrão é 0 (sem tentativas). | Não |
retryPolicy: intervalInSeconds | O atraso entre as tentativas de repetição especificado em segundos. | Número inteiro | O número de segundos, onde o padrão é 30. O valor mínimo é 30. | Não |
dependsOn: tipo | O tipo de TumblingWindowTriggerReference. Necessário se uma dependência estiver definida. | String | "TumblingWindowTriggerDependencyReference", "SelfDependencyTumblingWindowTriggerReference" | Não |
dependsOn: tamanho | O tamanho da janela de tombo 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 | Não |
dependsOn: deslocamento | O 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á a mesma que o próprio gatilho. | Auto-dependência: Sim Outros: Não |
Nota
Depois que um gatilho de janela de tombamento é publicado, o intervalo e a frequência não podem ser editados.
Variáveis de sistema WindowStart e WindowEnd
Você pode usar as variáveis de sistema WindowStart e WindowEnd do gatilho da janela de tombamento em sua definição de pipeline (ou seja, para parte de uma consulta). Passe as variáveis do sistema como parâmetros para seu 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 das variáveis de sistema WindowStart e WindowEnd na definição de pipeline, use os parâmetros "MyWindowStart" e "MyWindowEnd", de acordo.
Ordem de execução de janelas em um cenário de preenchimento
Se o startTime do gatilho estiver no passado, então, com base nesta fórmula, M=(CurrentTime- TriggerStartTime)/TumblingWindowSize, o gatilho gerará {M} backfill(past) em paralelo, honrando a simultaneidade do gatilho, antes de executar as execuções futuras. A ordem de execução das janelas é determinística, dos intervalos mais antigos aos mais recentes. Atualmente, não é possível modificar este comportamento.
Nota
Lembre-se de que, nesse cenário, todas as execuções a partir do startTime selecionado serão executadas antes de executar execuções futuras. Se você precisar preencher um longo período de tempo, recomenda-se fazer uma carga histórica inicial.
Elementos TriggerResource existentes
Os seguintes pontos se aplicam à atualização de elementos TriggerResource existentes:
- O valor para o elemento de frequência (ou tamanho da janela) do gatilho juntamente com o elemento de intervalo não pode ser alterado depois que o gatilho é criado. Isso é necessário para o funcionamento adequado de reexecuções triggerRun e avaliações de dependência
- Se o valor do elemento endTime do gatilho for alterado (adicionado ou atualizado), o estado das janelas que já estão processadas não será redefinido. O gatilho honra o novo valor endTime . Se o novo valor endTime estiver antes das janelas que já estão executadas, o gatilho será interrompido. Caso contrário, o gatilho para quando o novo valor endTime é encontrado.
Tentativas de pipelines atribuídas pelo usuário
Em caso de falhas de pipeline, o gatilho da janela de tombamento 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 de gatilho.
Janela de tombamento aciona dependência
Se você quiser ter certeza de que um gatilho de janela de tombamento seja executado somente após a execução bem-sucedida de outro gatilho de janela de tombamento no data factory, crie uma dependência de gatilho de janela de queda.
Cancelar a execução da janela de tombamento
Você pode cancelar execuções para um gatilho de janela de tombamento, se a janela específica estiver no estado Aguardando, Aguardando na dependência ou Executando
- Se a janela estiver no estado Running, cancele a Pipeline Run associada e a execução do gatilho será marcada como Cancelada posteriormente
- Se a janela estiver no estado Aguardando ou Aguardando na Dependência , você poderá cancelá-la em Monitoramento:
Você também pode executar novamente uma janela cancelada. A nova execução tomará as definições publicadas mais recentes do gatilho e as dependências para a janela especificada serão reavaliadas após a nova execução
Exemplo para o Azure PowerShell e a CLI do Azure
Esta seção mostra como usar o Azure PowerShell para criar, iniciar e monitorar um gatilho.
Nota
Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.
Pré-requisitos
Subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Azure PowerShell. Siga as instruções em Instalar o Azure PowerShell no Windows com PowerShellGet.
Azure Data Factory. Siga as instruções em Criar um Azure Data Factory usando o PowerShell para criar uma fábrica de dados e um pipeline.
Código de Exemplo
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 para a hora UTC atual. Defina o valor do elemento endTime para 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 cmdlet Set-AzDataFactoryV2Trigger :
Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
Confirme se o status do gatilho é Interrompido usando o cmdlet Get-AzDataFactoryV2Trigger:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Inicie o gatilho usando o cmdlet Start-AzDataFactoryV2Trigger :
Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Confirme se o status do gatilho é Iniciado usando o cmdlet Get-AzDataFactoryV2Trigger:
Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
Obtenha o gatilho executado no Azure PowerShell usando o cmdlet Get-AzDataFactoryV2TriggerRun . Para obter informações sobre as execuções do gatilho, execute o seguinte comando periodicamente. Atualize os valores TriggerRunStartedAfter e TriggerRunStartedBefore para corresponder 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 pipeline no portal do Azure, consulte Monitorar execuções de pipeline.
Conteúdos relacionados
- Para obter informações detalhadas sobre gatilhos, consulte Execução e gatilhos de pipeline.
- Crie uma dependência de gatilho de janela de tombamento.
- Saiba como fazer referência a metadados de gatilho no pipeline, consulte Metadados de gatilho de referência em execuções de pipeline