EXECUTE TASK

Aciona manualmente uma única execução assíncrona de uma tarefa (seja uma tarefa isolada ou a tarefa raiz em um gráfico de tarefas) independente do agendamento definido para a tarefa.

Uma execução bem-sucedida de uma tarefa raiz aciona uma execução em cascata de tarefas filhas no gráfico de tarefas quando a tarefa anterior é concluída, como se a tarefa raiz tivesse sido executada em seu cronograma definido.

Além disso, você pode acionar manualmente a reexecução de uma tarefa que falhou anteriormente.

Consulte também:

CREATE TASK , DESCRIBE TASK , ALTER TASK , DROP TASK , SHOW TASKS

Sintaxe

EXECUTE TASK <name>
  [ USING CONFIG = <configuration_string> ]

EXECUTE TASK <name> RETRY LAST
Copy

Parâmetros

name

Identificador da tarefa autônoma ou da tarefa raiz a ser executada. Se o identificador contiver espaços ou caracteres especiais, toda a cadeia de caracteres deverá ser delimitada por aspas duplas. Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.

USING CONFIG = configuration_string

Especifica uma cadeia de caracteres de configuração no formato JSON válido para esta única execução. Esse parâmetro cria uma nova execução com a configuração especificada dinamicamente, mas não modifica a definição da tarefa.

O Snowflake mescla a configuração dinâmica com a configuração padrão, que é o parâmetro CONFIG que você define na definição da tarefa com CREATE ou ALTER. Para campos correspondentes, o Snowflake usa os valores especificados dinamicamente. Para campos não correspondentes, o Snowflake usa os valores da configuração padrão. Para obter um exemplo, consulte Usar uma CONFIG dinâmica.

A cadeia de caracteres de configuração segue o mesmo formato que o parâmetro CONFIG em CREATE TASK ou ALTER TASK:

CONFIG = $${"string1": value1 [, "string2": value2, ...] }$$
Copy

Example:

CONFIG = $${"learning_rate": 0.2, "environment": "testing"}$$
Copy
RETRY LAST

Execute novamente a última tarefa com falha do gráfico de tarefa com name reiniciando de onde as tarefas falharam.

Para reexecutar uma tarefa, as seguintes condições devem ser atendidas:

  • A última execução do gráfico de tarefas deve estar no estado FAILED ou CANCELED.

  • O gráfico de tarefas não deve ter sido modificado desde a última execução.

  • O gráfico de tarefas deve ter sido executado ou tentado novamente nos últimos 14 dias.

To view task history, see either the TASK_HISTORY table function or the Tasks page on Snowsight.

Nota

RETRY LAST cria uma nova execução de gráfico que inicia a execução nas últimas tarefas com falha.

Especificamente, todas as execuções de tarefas FAILED ou CANCELED serão imediatamente reexecutadas e as tarefas filhas associadas serão agendadas se todas as suas predecessoras forem executadas com êxito.

Além disso, a nova execução do gráfico de tarefas produzida pela nova tentativa terá um ATTEMPT NUMBER maior que a execução do gráfico com falha anterior e compartilhará o mesmo GRAPH_RUN_GROUP_ID que a tentativa repetida ou a execução do gráfico de tarefas original.

Notas de uso

  • A execução de uma tarefa exige o privilégio OWNERSHIP ou OPERATE sobre a tarefa.

    Quando o comando EXECUTE TASK aciona uma tarefa, o Snowflake verifica se a função com o privilégio OWNERSHIP na tarefa também tem o privilégio USAGE no warehouse atribuído à tarefa, bem como o privilégio global EXECUTE TASK; caso contrário, um erro será produzido.

    As tarefas sempre são executadas com os privilégios da função original do proprietário, mesmo que uma função diferente com o privilégio OPERATE use EXECUTE TASK para executar a tarefa.

  • Por padrão, o Snowflake executa tarefas usando o usuário do sistema com os privilégios da função de proprietário da tarefa. Para executar uma tarefa como um usuário específico, configure a tarefa com EXECUTE AS USER. Para obter mais informações, consulte Executar tarefas com privilégios de usuário.

  • Para a opção USING CONFIG:

    • Se o gráfico de tarefas estiver sendo executado e você executar esse comando, o Snowflake aguardará a execução atual ser concluída antes de iniciar uma nova execução com a configuração dinâmica.

    • Se você executar esse comando várias vezes enquanto uma tarefa estiver sendo executada, o Snowflake usará a configuração do comando mais recente para a execução seguinte. As configurações anteriores serão substituídas e não serão executadas.

    • A configuração dinâmica só se aplica à execução única acionada por esse comando. As execuções agendadas seguintes usam o parâmetro padrão CONFIG da definição da tarefa.

  • O comando SQL só pode executar uma tarefa isolada ou a tarefa raiz em um gráfico de tarefas. Se uma tarefa filho for inserida, o comando retornará um erro do usuário.

  • A execução manual de uma tarefa autônoma ou raiz estabelece uma versão da tarefa. A tarefa autônoma ou todo o gráfico de tarefas conclui sua execução com essa versão. Para obter mais informações sobre as versões de tarefas, consulte Controle de versão de execuções de tarefas.

  • Uma tarefa raiz suspensa é executada sem retomar a tarefa; não há necessidade de retomar explicitamente a tarefa raiz antes de executar este comando SQL. Entretanto, EXECUTE TASK não retoma automaticamente as tarefas secundárias no gráfico de tarefas. O comando ignora qualquer tarefa secundária que seja suspensa.

    Para retomar recursivamente todas as tarefas dependentes vinculadas a uma tarefa raiz em um gráfico de tarefas, consulte a função SYSTEM$TASK_DEPENDENTS_ENABLE em vez de habilitar cada tarefa individualmente (usando ALTER TASK … RESUME).

    Como prática recomendada ao testar gráficos de tarefas novos ou modificados, defina a tarefa raiz a ser executada em seu cronograma de produção pretendido, mas deixe-a em um estado suspenso. Quando você tiver testado o gráfico de tarefas com sucesso, retome a tarefa raiz. Observe que você deve retomar qualquer tarefa filho suspensa no gráfico de tarefas para testes; caso contrário, elas serão puladas durante a execução do gráfico de tarefas.

  • Se nenhuma instância da tarefa estiver em execução, uma nova execução será iniciada imediatamente.

  • Se outra instância estiver agendada (ou seja, se a tarefa mostrar um estado SCHEDULED na saída TASK_HISTORY), a execução solicitada substituirá a execução agendada. A execução solicitada começa imediatamente, usando o carimbo de data/hora atual como a hora programada.

  • Se a tarefa ou o gráfico de tarefas estiver em fila de espera ou em execução no momento (ou seja, se a tarefa mostrar um estado EXECUTING na saída TASK_HISTORY), a execução atual continuará usando a versão da tarefa que estava atual quando o comando foi executado. Uma nova execução é então programada para iniciar, em um horário que depende do tipo de tarefa:

    • Para tarefas autônomas, uma nova execução é programada para iniciar após a conclusão da execução atual.

    • Para gráficos de tarefas:

      • Se ALLOW_OVERLAPPING_EXECUTION = FALSE (padrão), uma nova execução será programada para iniciar após a conclusão do gráfico da tarefa atual.

      • Se ALLOW_OVERLAPPING_EXECUTION = TRUE e a tarefa em execução no momento for uma tarefa raiz, uma nova execução será programada para iniciar após a conclusão da tarefa raiz.

      • Se ALLOW_OVERLAPPING_EXECUTION = TRUE, e a tarefa em execução no momento for uma tarefa filho, uma nova execução será iniciada imediatamente.

    Se o comando EXECUTE TASK for executado novamente antes do início da próxima execução programada, a execução solicitada substituirá a execução programada.

  • Se uma tarefa falhar com um erro inesperado, você poderá receber uma notificação sobre o erro. Para obter mais informações sobre a configuração de notificações de erro de tarefa, consulte Ativação de notificações para tarefas.

  • Para visualizar as informações da tarefa, você pode:

    • No Snowsight, no menu de navegação, selecione Transformation » Tasks.

    • Chamar a função de tabela COMPLETE_TASK_GRAPHS e examinar os resultados.

Exemplos

Os exemplos a seguir mostram como acionar manualmente uma execução de tarefa e usar uma CONFIG dinâmica.

Manually trigger a task run

Acionar manualmente uma execução de uma tarefa chamada mytask:

EXECUTE TASK mytask;
Copy

Usar uma CONFIG dinâmica

Criar uma tarefa raiz chamada my_root_task com uma configuração padrão:

CREATE OR REPLACE TASK my_root_task
  WAREHOUSE = regress
  SCHEDULE = '10 m'
  CONFIG = $${
    "environment": "production",
    "output_paths": {
      "logs": "/prod/logs",
      "results": "/prod/results"
    }
  }$$
  AS ...;
Copy

Executar a tarefa e especificar uma configuração dinâmica:

EXECUTE TASK my_root_task
  USING CONFIG=$${
    "output_paths": {
      "results": "/temp/testing"
    }
  }$$;
Copy

O exemplo a seguir mostra a configuração resultante para esta execução:

{
  "environment": "production",
  "output_paths": {
    "logs": "/prod/logs",
    "results": "/temp/testing"
  }
}
Copy

O campo environment e o campo output_paths.logs mantêm a configuração padrão. Somente output_paths.results é atualizado com o valor dinâmico.