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

  1. Para criar um gatilho de janela de tombamento no portal do Azure, selecione a guia Gatilhos e, em seguida, selecione Novo.
  2. 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.
  3. 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

Código de Exemplo

  1. 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"
      }
    }
    
  2. Crie um gatilho usando o cmdlet Set-AzDataFactoryV2Trigger :

    Set-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger" -DefinitionFile "C:\ADFv2QuickStartPSH\MyTrigger.json"
    
  3. Confirme se o status do gatilho é Interrompido usando o cmdlet Get-AzDataFactoryV2Trigger:

    Get-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  4. Inicie o gatilho usando o cmdlet Start-AzDataFactoryV2Trigger :

    Start-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name "MyTrigger"
    
  5. Confirme se o status do gatilho é Iniciado usando o cmdlet Get-AzDataFactoryV2Trigger:

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