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:
Sintaxe¶
EXECUTE TASK <name>
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.
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 Habilitação de notificações de erro para tarefas.