EXECUTE TASK

Aciona manualmente uma única execução assíncrona de uma tarefa agendada (seja uma tarefa isolada ou a tarefa raiz em um DAG (grafo direcionado acíclico) 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 DAG quando a tarefa anterior é concluída, como se a tarefa raiz tivesse sido executada em seu cronograma definido.

Consulte também:

CREATE TASK , DROP TASK , SHOW TASKS

Sintaxe

EXECUTE TASK <name>
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.

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.

  • O comando SQL só pode executar uma tarefa isolada ou a tarefa raiz em um DAG. 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. O DAG inteiro ou tarefa autônoma completa sua execução com esta versão. Para obter mais informações sobre as versões de tarefas, consulte Controle de versão de execuções.

  • 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 DAG. O comando ignora qualquer tarefa secundária que seja suspensa.

    Para retomar recursivamente todas as tarefas dependentes vinculadas a uma tarefa raiz em um DAG, 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 DAGs 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 DAG com sucesso, retome a tarefa raiz. Observe que você deve retomar qualquer tarefa filho suspensa no DAG para testes; caso contrário, elas serão puladas durante a execução do DAG.

  • Se a tarefa raiz estiver atualmente em execução (isto é, em um estado EXECUTING na saída TASK_HISTORY), o comando EXECUTE TASK agendará outra execução da tarefa para começar imediatamente após a execução atual ser concluída.

  • Se a tarefa raiz estiver atualmente programada (ou seja, em um estado SCHEDULED na saída TASK_HISTORY), a execução programada será substituída pela execução solicitada como de costume, com o carimbo de data/hora atual como a hora programada. No entanto, se o tempo programado tiver passado (mas a tarefa ainda não tiver transitado para um estado EXECUTING), então a execução programada ocorrerá como de costume. Ou seja, a execução programada não é substituída pela execução solicitada.

  • O parâmetro ALLOW_OVERLAPPING_EXECUTION definido em uma tarefa raiz determina se as instâncias sobrepostas do DAG são permitidas. O comportamento da execução da tarefa solicitada difere dependendo do valor do parâmetro:

    ALLOW_OVERLAPPING_EXECUTION = FALSE (valor padrão)

    Se nenhuma instância do DAG estiver em execução no momento, o comando EXECUTE TASK marcará outra execução do DAG para começar imediatamente.

    Se a tarefa raiz ou qualquer tarefa filho no DAG estiver atualmente em execução (isto é, em um estado EXECUTING na saída TASK_HISTORY), o comando EXECUTE TASK agendará outra execução do DAG para iniciar imediatamente após a execução atual da última tarefa no DAG ter sido concluída. Ou seja, a instância atual da tarefa DAG deve completar sua execução antes que a tarefa solicitada comece.

    Se a tarefa raiz estiver atualmente programada (ou seja, em um estado SCHEDULED na saída TASK_HISTORY), a execução programada será substituída pela execução solicitada, com o carimbo de data/hora atual como a hora programada. No entanto, se o tempo programado tiver passado (mas a tarefa ainda não tiver transitado para um estado EXECUTING), então a execução programada ocorre. Ou seja, a execução programada não é substituída pela execução solicitada.

    ALLOW_OVERLAPPING_EXECUTION = TRUE

    Se nenhuma instância do DAG estiver em execução no momento, ou se apenas tarefas secundárias do DAG estiverem em execução em uma instância, o comando EXECUTE TASK marca outra execução do DAG para começar imediatamente.

    Se a tarefa raiz estiver sendo executada em uma instância do DAG, o comando EXECUTE TASK agenda outra execução da tarefa DAG para iniciar imediatamente após a execução atual da tarefa raiz ter sido concluída.

    Se a tarefa raiz estiver atualmente programada (isto é, em um estado SCHEDULED na saída TASK_HISTORY) em uma instância do DAG, a execução programada será substituída pela execução solicitada como de costume, com o carimbo de data/hora atual como a hora programada. No entanto, se o tempo programado tiver passado (mas a tarefa ainda não tiver transitado para um estado EXECUTING), então a execução programada ocorre. Ou seja, a execução programada não é substituída pela execução solicitada.

  • Enquanto as chamadas para o comando EXECUTE TASK são tratadas de forma síncrona, as execuções de tarefas são operações assíncronas.

  • As tarefas acionadas por este comando SQL usam a versão da tarefa que era atual quando o comando foi executado. Se uma tarefa for modificada após o comando ser executado, mas antes do início da execução, as alterações não são aplicadas até a execução programada seguinte.

    Se este comando SQL for executado várias vezes enquanto uma execução da tarefa estiver em andamento, todas as execuções do comando, exceto a última, são ignoradas. Quando a próxima execução começa, é utilizada a versão de tarefa que era atual quando foi feita a última execução.

  • If a task fails with an unexpected error, you can receive a notification about the error. For more information on configuring task error notifications refer to Habilitação de notificações de erro para tarefas.

Exemplos

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

EXECUTE TASK mytask;
Copy