CREATE TASK¶
Cria uma nova tarefa no esquema atual/especificado ou substitui uma tarefa existente.
Este comando também oferece suporte à seguinte variante:
CREATE TASK … CLONE (cria um clone de uma tarefa existente)
- Consulte também:
Importante
As tarefas recém-criadas ou clonadas são criadas suspensas. Para obter mais informações sobre como retomar tarefas suspensas, consulte ALTER TASK … RESUME.
Sintaxe¶
CREATE [ OR REPLACE ] TASK [ IF NOT EXISTS ] <name>
[ { WAREHOUSE = <string> } | { USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = <string> } ]
[ SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }' ]
[ CONFIG = <configuration_string> ]
[ ALLOW_OVERLAPPING_EXECUTION = TRUE | FALSE ]
[ <session_parameter> = <value> [ , <session_parameter> = <value> ... ] ]
[ USER_TASK_TIMEOUT_MS = <num> ]
[ SUSPEND_TASK_AFTER_NUM_FAILURES = <num> ]
[ ERROR_INTEGRATION = <integration_name> ]
[ COMMENT = '<string_literal>' ]
[ FINALIZE = <string> ]
[ TASK_AUTO_RETRY_ATTEMPTS = <num> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ AFTER <string> [ , <string> , ... ] ]
[ WHEN <boolean_expr> ]
AS
<sql>
Sintaxe da variante¶
CREATE TASK … CLONE
Cria uma nova tarefa com os mesmos valores de parâmetro:
CREATE [ OR REPLACE ] TASK <name> CLONE <source_task> [ ... ]
Para obter mais detalhes, consulte CREATE <objeto> … CLONE.
Nota
A clonagem de tarefas usando CREATE TASK <nome> CLONE, ou a clonagem de um esquema contendo tarefas, copia todas as propriedades de tarefas subjacentes, a menos que seja explicitamente anulado.
Parâmetros obrigatórios¶
name
Cadeia de caracteres que especifica o identificador da tarefa; deve ser único para o esquema no qual a tarefa é criada.
Além disso, o identificador deve começar com um caractere alfabético e não pode conter espaços ou caracteres especiais, a menos que toda a cadeia de caracteres do identificador esteja entre aspas duplas, como
"My object"
. Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.Para obter mais detalhes, consulte Requisitos para identificadores.
sql
Qualquer uma das seguintes opções:
Instrução SQL única
Chamada de um procedimento armazenado
Lógica de procedimentos usando Script Snowflake
Observe que, atualmente, Snowsight e a Classic Console não oferecem suporte à criação ou modificação de tarefas para usar o Script Snowflake. Em vez disso, use SnowSQL ou outro cliente de linha de comando.
O código SQL é executado quando a tarefa é executada.
Nota
O código SQL deve ser executável por si só. Recomendamos fortemente que você verifique se o
sql
executa como esperado antes de você criar a tarefa. As tarefas destinam-se a automatizar instruções SQL e procedimentos armazenados que já tenham sido testados exaustivamente.As tarefas sem servidor não podem chamar os seguintes tipos de objetos:
UDFs (funções definidas pelo usuário) que contêm código Java ou Python.
Procedimentos armazenados gravados em Scala (usando Snowpark), ou que chamam UDFs que contêm código Java ou Python.
Parâmetros opcionais¶
WAREHOUSE = string
ou . USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = string
WAREHOUSE = string
Especifica o warehouse virtual que fornece recursos de computação para a execução de tarefas.
Omita este parâmetro para usar recursos de computação sem servidor para a execução desta tarefa. O Snowflake redimensiona e dimensiona automaticamente os recursos de computação sem servidor conforme necessário para cada carga de trabalho. Quando um cronograma é especificado para uma tarefa, o Snowflake ajusta o tamanho do recurso para concluir futuras execuções da tarefa dentro do prazo especificado. Para especificar o tamanho inicial do warehouse para a tarefa, defina o parâmetro
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = string
.USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = string
Aplicado somente a tarefas sem servidor.
Especifica o tamanho dos recursos de computação a serem provisionados para a primeira execução da tarefa, antes que um histórico de tarefas esteja disponível para que o Snowflake determine um tamanho ideal. Quando uma tarefa é concluída com sucesso, o Snowflake ignora esta configuração de parâmetros.
Observe que se o histórico de tarefas não estiver disponível para uma determinada tarefa, os recursos de computação voltam para este tamanho inicial.
Nota
Se um valor de parâmetro
WAREHOUSE = string
for especificado, então a definição deste parâmetro produz um erro do usuário.O tamanho é equivalente aos recursos de computação disponíveis ao criar um warehouse (usando CREATE WAREHOUSE), como
SMALL
,MEDIUM
ouLARGE
. O maior tamanho suportado pelo parâmetro éXXLARGE
. Se o parâmetro for omitido, as primeiras execuções da tarefa são realizadas utilizando um warehouse de tamanho médio (MEDIUM
).Você pode mudar o tamanho inicial (usando ALTER TASK) após a criação da tarefa, mas antes de ela já ter sido executada com sucesso uma vez. A alteração do parâmetro após a primeira execução desta tarefa não tem efeito sobre os recursos de computação para execuções de tarefa atuais ou futuras.
Observe que suspender e retomar uma tarefa não remove o histórico de tarefas usado para dimensionar os recursos de computação. O histórico de tarefas só é removido se a tarefa for recriada (usando a sintaxe CREATE OR REPLACE TASK).
Para obter mais informações sobre este parâmetro, consulte USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE.
SCHEDULE ...
Especifica o cronograma para a execução periódica da tarefa:
Nota
Um cronograma deve ser definido para uma tarefa autônoma ou tarefa raiz em um gráfico de tarefas; caso contrário, a tarefa só é realizada se for manualmente executada usando EXECUTE TASK.
Um cronograma não pode ser especificado para tarefas filho em um gráfico de tarefas.
USING CRON expr time_zone
Especifica uma expressão cron e um fuso horário para executar periodicamente a tarefa. Oferece suporte a um subconjunto de sintaxe de utilitário cron padrão.
Para uma lista de fusos horários, consulte a lista de fusos horários do banco de dados tz (no Wikipedia).
A expressão cron consiste nos seguintes campos:
# __________ minute (0-59) # | ________ hour (0-23) # | | ______ day of month (1-31, or L) # | | | ____ month (1-12, JAN-DEC) # | | | | _ day of week (0-6, SUN-SAT, or L) # | | | | | # | | | | | * * * * *
Os seguintes caracteres especiais são suportados:
*
Curinga. Especifica qualquer ocorrência do campo.
L
Significa “último”. Quando usado no campo do dia da semana, permite especificar construções como “a última sexta-feira” (“5L”) de um determinado mês. No campo do dia do mês, ele especifica o último dia do mês.
/n
Indica a enésima instância de uma determinada unidade de tempo. Cada quanta de tempo é computada independentemente. Por exemplo, se
4/3
estiver especificado no campo do mês, então a tarefa está programada para abril, julho e outubro, que é a cada 3 meses, começando com o quarto mês do ano. O mesmo cronograma é mantido nos anos seguintes. Ou seja, a tarefa não está programada para ser executada em janeiro (3 meses após a execução de outubro).
Nota
Atualmente, a expressão cron avalia apenas em relação ao fuso horário especificado. Alterar o valor do parâmetro TIMEZONE para a conta (ou definir o valor no nível do usuário ou da sessão) não altera o fuso horário para a tarefa.
A expressão cron define todos os tempos de execução válidos de execução para a tarefa. O Snowflake tenta executar uma tarefa com base neste cronograma; no entanto, qualquer tempo de execução válido é ignorado se uma execução anterior não tiver sido concluída antes do próximo tempo de execução válido começar.
Quando tanto um dia específico do mês como um dia da semana são incluídos na expressão cron, então a tarefa é programada em dias que satisfaçam tanto o dia do mês ou o dia da semana. Por exemplo,
SCHEDULE = 'USING CRON 0 0 10-20 * TUE,THU UTC'
programa uma tarefa no horário 0AM em qualquer dia de 10 a 20 e também em qualquer terça-feira ou quinta-feira fora dessas datas.A granularidade de tempo mais curta em cron é de minutos. Se uma tarefa é retomada durante o minuto definido em sua expressão cron, a primeira execução programada da tarefa é a próxima ocorrência da instância da expressão cron. Por exemplo, se a tarefa programada para funcionar diariamente à meia-noite (
USING CRON 0 0 * * *
) for retomada à meia-noite mais 5 segundos (00:00:05
), a primeira tarefa será programada para a meia-noite seguinte.
num MINUTE
Especifica um intervalo (em minutos) de espera inserido entre as execuções da tarefa. Aceita apenas números inteiros positivos.
Também oferece suporte à sintaxe
num M
.Para evitar ambiguidade, um tempo de intervalo base é definido quando:
Quando a tarefa é retomada (usando ALTER TASK … RESUME) ou
Quando um intervalo diferente é definido (usando ALTER TASK … SET SCHEDULE)
O tempo de intervalo base inicia o contador de intervalo a partir da hora atual do relógio. Por exemplo, se um valor INTERVAL de
10
estiver definido e a tarefa estiver habilitada para 9:03h AM, então a tarefa será executada às 9:13h AM, 9:23h AM, e assim por diante. Observe que nos esforçamos ao máximo para garantir a precisão absoluta, mas apenas garantimos que as tarefas não sejam executadas antes de ocorrer o intervalo definido. Por exemplo, no exemplo atual, a tarefa poderia ser executada primeiro às 9:14 AM, mas não será executada às 9:12 AM.Nota
O valor máximo suportado é
11520
(8 dias). Tarefas que têm um valornum MINUTE
maior nunca são executadas.
CONFIG = configuration_string
Especifica uma representação de cadeia de caracteres de pares chave-valor que podem ser acessados por todas as tarefas no gráfico de tarefas. Deve estar no formato JSON. Para obter mais informações sobre como obter a cadeia de caracteres de configuração da tarefa que está em execução no momento, consulte SYSTEM$GET_TASK_GRAPH_CONFIG.
Nota
Este parâmetro só pode ser definido em uma tarefa raiz. O ajuste se aplica a todas as tarefas no gráfico de tarefas.
O parâmetro pode ser definido em tarefas autônomas, mas não afeta o comportamento da tarefa. O Snowflake garante que apenas uma instância de uma tarefa autônoma esteja em execução em um determinado momento.
ALLOW_OVERLAPPING_EXECUTION = TRUE | FALSE
Especifica se deve permitir que múltiplas instâncias do gráfico de tarefas sejam executadas simultaneamente.
Nota
Este parâmetro só pode ser definido em uma tarefa raiz. O ajuste se aplica a todas as tarefas no gráfico de tarefas.
O parâmetro pode ser definido em tarefas autônomas, mas não afeta o comportamento da tarefa. O Snowflake garante que apenas uma instância de uma tarefa autônoma esteja em execução em um determinado momento.
TRUE
garante que apenas uma instância de uma tarefa raiz esteja em execução em um determinado momento. Se uma tarefa raiz ainda estiver em execução quando o próximo tempo de execução agendado ocorrer, então esse tempo agendado é ignorado. Esta garantia não se estende a tarefas filho. Se a próxima execução agendada da tarefa raiz ocorrer enquanto a execução atual de uma tarefa filho ainda estiver em operação, outra instância do gráfico de tarefas será iniciada.FALSE
assegura que apenas uma instância de um determinado gráfico de tarefas seja autorizada a funcionar de cada vez. A próxima execução de uma tarefa raiz só é programada depois que todas as tarefas filho no gráfico de tarefas tiverem terminado. Isto significa que se o tempo acumulado necessário para executar todas as tarefas no gráfico da tarefa exceder o tempo explicitamente programado determinado na definição da tarefa raiz, pelo menos uma execução do gráfico de tarefas é ignorada.
Padrão:
FALSE
session_parameter = value [ , session_parameter = value ... ]
Especifica uma lista separada por vírgula dos parâmetros da sessão a serem definidos para a sessão quando a tarefa for executada. Uma tarefa oferece suporte a todos os parâmetros da sessão. Para a lista completa, consulte Parâmetros de sessão.
USER_TASK_TIMEOUT_MS = num
Especifica o limite de tempo em uma única execução da tarefa antes que ele se esgote (em milissegundos).
Nota
Antes de aumentar significativamente o limite de tempo de uma tarefa, considere se a instrução SQL iniciada pela tarefa poderia ser otimizada (seja gravando novamente a instrução ou usando um procedimento armazenado) ou se o tamanho do warehouse deveria ser aumentado.
Em algumas situações, o parâmetro STATEMENT_TIMEOUT_IN_SECONDS tem maior precedência do que USER_TASK_TIMEOUT_MS. Para obter mais detalhes, consulte STATEMENT_TIMEOUT_IN_SECONDS.
Para obter mais informações sobre este parâmetro, consulte USER_TASK_TIMEOUT_MS.
Valores:
0
-86400000
(1 dia).Padrão:
3600000
(1 hora)SUSPEND_TASK_AFTER_NUM_FAILURES = num
Especifica o número de execuções consecutivas de tarefas falhadas após as quais a tarefa atual é suspensa automaticamente. Execuções de tarefas falhadas incluem execuções nas quais o código SQL no corpo da tarefa produz um erro do usuário ou atinge o tempo limite. Execuções de tarefas que são puladas, canceladas ou que falham devido a um erro do sistema são consideradas indeterminadas e não são incluídas na contagem de execuções de tarefas falhadas.
Defina o parâmetro em uma tarefa autônoma ou na tarefa raiz em um gráfico de tarefas. Quando o parâmetro é definido como um valor maior que
0
, o seguinte comportamento se aplica a execuções da tarefa autônoma ou do gráfico da tarefas:Tarefas autônomas são automaticamente suspensas após o número especificado de execuções consecutivas de tarefas falhar ou atingir o tempo limite.
A tarefa raiz é automaticamente suspensa após a execução de qualquer tarefa única em um gráfico da tarefas falhar ou atingir o tempo limite pelo número especificado de vezes, em execuções consecutivas.
Quando o parâmetro é definido como
0
, as tarefas com falha não são suspensas automaticamente.A configuração se aplica a tarefas que dependem de recursos de computação sem servidor ou de recursos de computação de warehouse virtual.
Para obter mais informações sobre este parâmetro, consulte SUSPEND_TASK_AFTER_NUM_FAILURES.
Valores:
0
- Sem limite superior.Padrão:
10
ERROR_INTEGRATION = 'integration_name'
Exigido apenas ao configurar uma tarefa para enviar notificações de erro usando o Amazon Simple Notification Service (SNS), Microsoft Azure Event Grid ou Google Pub/Sub.
Especifica o nome da integração da notificação utilizada para se comunicar com o Amazon SNS, MS Azure Event Grid ou Google Pub/Sub. Para obter mais informações, consulte Habilitação de notificações de erro para tarefas.
COMMENT = 'string_literal'
Especifica um comentário para a tarefa.
Padrão: sem valor
AFTER string [ , string , ... ]
Especifica uma ou mais tarefas predecessoras para a tarefa atual. Use essa opção para criar um gráfico de tarefas ou adicionar essa tarefa a um gráfico da tarefa existente. Um gráfico de tarefas é uma série de tarefas que começa com uma tarefa raiz programada e está ligada entre si por dependências.
Observe que a estrutura de um gráfico de tarefas pode ser definida depois que todas suas tarefas componentes forem criadas. Execute instruções ALTER TASK … ADD AFTER para especificar os predecessores de cada tarefa no gráfico de tarefas planejado.
Uma tarefa é executada depois de todas as tarefas predecessoras terem terminado com sucesso suas próprias execuções (após um breve atraso).
Nota
A tarefa raiz deve ter um cronograma definido. Cada tarefa filho deve ter uma ou mais tarefas predecessoras definidas, especificadas usando o parâmetro
AFTER
para vincular as tarefas entre si.Uma tarefa é limitada a 100 tarefas predecessoras e 100 tarefas filho. Além disso, um gráfico de tarefas é limitado a um máximo de 1.000 tarefas no total (incluindo a tarefa raiz) em um estado resumido ou suspenso.
As contas estão atualmente limitadas a um máximo de 30.000 tarefas retomadas.
Todas as tarefas em um gráfico de tarefas devem ter o mesmo proprietário da tarefa. Uma única função deve ter o privilégio OWNERSHIP em todas as tarefas no gráfico de tarefas.
Todas as tarefas em um gráfico de tarefas devem existir no mesmo esquema.
A tarefa raiz deve ser suspensa antes que qualquer tarefa seja recriada (usando a sintaxe CREATE OR REPLACE TASK) ou uma tarefa filho seja adicionada (usando CREATE TASK … AFTER ou ALTER TASK … ADD AFTER) ou removida (usando ALTER TASK … REMOVE AFTER).
Se qualquer tarefa em um gráfico de tarefas for clonada, a função que clona a tarefa se torna a proprietária do clone por padrão.
Se o proprietário da tarefa original cria o clone, então o clone da tarefa mantém o vínculo entre a tarefa e a tarefa predecessora. Isso significa que a mesma tarefa predecessora aciona tanto a tarefa original quanto o clone da tarefa.
Se outra função cria o clone, então o clone de tarefa pode ter um cronograma, mas não um predecessor.
Limitações atuais:
O Snowflake garante que no máximo uma tarefa com um cronograma definido esteja em execução em um determinado momento; no entanto, não podemos dar a mesma garantia para tarefas com uma tarefa predecessora definida.
WHEN boolean_expr
Especifica uma expressão SQL booleana; múltiplas condições juntas com AND/OR são suportadas. Quando uma tarefa é acionada (com base em sua configuração
SCHEDULE
ouAFTER
), ela valida as condições da expressão para determinar se deve ser executada. Se as condições da expressão não forem atendidas, então a tarefa pulará a execução atual. Qualquer tarefa que identifique esta tarefa como predecessora também não é executada.Os itens a seguir são suportados em uma cláusula de tarefa WHEN:
SYSTEM$STREAM_HAS_DATA é suportado para avaliação na expressão SQL.
Esta função indica se um fluxo especificado contém dados de rastreamento de alterações. Você pode usar esta função para avaliar se o fluxo especificado contém dados de modificação antes de iniciar a execução atual. Se o resultado for FALSE, então a tarefa não será executada.
Nota
SYSTEM$STREAM_HAS_DATA foi projetado para evitar retornar um valor FALSE mesmo quando o fluxo contém dados alterados. No entanto, esta função não tem garantia de evitar retornar um valor TRUE quando o fluxo não contém dados alterados.
SYSTEM$GET_PREDECESSOR_RETURN_VALUE é suportado para avaliação na expressão SQL.
A função recupera o valor de retorno da tarefa predecessora em um gráfico de tarefas. O valor de retorno pode ser usado como parte de uma expressão booleana. Ao usar SYSTEM$GET_PREDECESSOR_RETURN_VALUE, você pode converter o valor retornado para o tipo numérico, cadeia de caracteres ou booleano apropriado, se necessário.
Os exemplos simples incluem:
WHEN NOT SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name')::BOOLEAN
WHEN SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name') != 'VALIDATION'
WHEN SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name')::FLOAT < 0.2
Nota
O uso de PARSE_JSON em expressões TASK … WHEN não é suportado, pois requer recursos de computação baseados em warehouse.
Operadores booleanos como AND, OR, NOT e outros.
Converte entre tipos numéricos, cadeia de caracteres e booleanos.
Operadores de comparação como igual, diferente, maior que, menor que e outros.
A validação das condições da expressão WHEN não requer recursos de computação. Em vez disso, a validação é processada na camada de serviços de nuvem. Uma taxa nominal acumula cada vez que uma tarefa avalia sua condição WHEN e não é executada. As taxas se acumulam cada vez que a tarefa é acionada até que ela funcione. Naquele momento, a taxa é convertida em créditos do Snowflake e adicionada ao uso de recursos de computação para a execução da tarefa.
Geralmente o tempo de computação para validar a condição é insignificante em comparação com o tempo de execução da tarefa. Como prática recomendada, o alinhamento das tarefas programadas e das reais é feito o mais próximo possível. Evite agendamentos de tarefas que não estejam alinhados com as execuções de tarefas. Por exemplo, se os dados forem inseridos em uma tabela com um fluxo aproximadamente a cada 24 horas, não programe uma tarefa que verifique os dados do fluxo a cada minuto. A taxa para validar a expressão WHEN com cada execução é geralmente insignificante, mas as taxas são cumulativas.
Observe que o consumo diário de serviços de nuvem que fica abaixo da cota de 10% do uso diário dos recursos de computação não acumula nenhuma taxa de serviços de nuvem.
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
Especifica o nome da tag e o valor da cadeia de caracteres dela.
O valor de tag é sempre uma cadeia de caracteres, e o número máximo de caracteres do valor da tag é 256.
Para obter informações sobre como especificar tags em uma instrução, consulte Cotas de tags para objetos e colunas.
FINALIZE = string
Especifica o nome de uma tarefa raiz à qual a tarefa finalizadora está associada. Uma tarefa finalizadora trata da liberação e limpeza de recursos utilizados por um gráfico de tarefas. É garantido que uma tarefa finalizadora será executada se o gráfico for executado. No entanto, se um gráfico for ignorado (por exemplo, a tarefa raiz for ignorada), a tarefa finalizadora não será executada.
Uma tarefa raiz só pode ter uma tarefa finalizadora. Se você criar diversas tarefas finalizadoras para uma tarefa raiz, a criação da tarefa falhará.
Uma tarefa finalizadora não pode ter tarefas secundárias. Qualquer comando que tentar transformar a tarefa finalizadora em uma predecessora falhará.
Uma tarefa finalizadora não pode ter um cronograma. A criação de uma tarefa finalizadora com um cronograma falhará.
Padrão: sem valor
TASK_AUTO_RETRY_ATTEMPTS = num
Especifica o número de tentativas automáticas de repetição do gráfico de tarefas. Se algum gráfico de tarefas for concluído em um estado FAILED, o Snowflake poderá tentar novamente automaticamente os gráficos da tarefa da última tarefa no gráfico que falhou.
A nova tentativa automática do gráfico de tarefas está desabilitada por padrão. Para ativar esse recurso, defina TASK_AUTO_RETRY_ATTEMPTS com um valor maior que
0
na tarefa raiz de um gráfico de tarefas.Observe que este parâmetro deve ser definido como a tarefa raiz de um gráfico de tarefas. Se estiver definido como uma tarefa filho, um erro será retornado.
Valores:
0
-30
.Padrão:
0
Requisitos de controle de acesso¶
Uma função usada para executar este comando SQL deve ter os seguintes privilégios no mínimo:
Privilégio |
Objeto |
Notas |
---|---|---|
EXECUTE MANAGED TASK |
Conta |
Necessário somente para tarefas que dependem de recursos de computação sem servidor para execuções. |
CREATE TASK |
Esquema |
|
USAGE |
Warehouse |
Necessário apenas para tarefas que dependem de warehouses gerenciados pelo usuário para execuções. |
Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.
Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.
Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.
Notas de uso¶
As tarefas são executadas usando os privilégios do proprietário da tarefa. Para a lista de privilégios mínimos necessários para executar tarefas, consulte Segurança de tarefas.
Recomendamos que você execute uma instrução SQL ou chame um procedimento armazenado antes de incluí-lo em uma definição de tarefa. Conclua esta etapa com a função de proprietário da tarefa para garantir que a função tenha todos os privilégios necessários em quaisquer objetos referenciados por SQL.
Os recursos de computação para execuções individuais de uma tarefa podem ser tanto sem servidor quanto por um warehouse virtual especificado pelo usuário. Para utilizar tarefas sem servidor, omita o parâmetro
WAREHOUSE = string
na instrução CREATE TASK.Os recursos de computação sem servidor para uma tarefa podem variar do equivalente a
XSMALL
atéXXLARGE
no tamanho de warehouses. Se você quiser incluir tamanhos de warehouse maiores nessa faixa, entre em contato com o suporte Snowflake para solicitar um aumento de tamanho.O modelo sem servidor pode ser habilitado para uma ou mais tarefas em um gráfico de tarefas. A execução de tarefas individuais em um gráfico de tarefas pode contar com recursos de computação sem servidor ou gerenciados pelo usuário. A habilitação deste modelo de computação sem servidor para todas as tarefas no gráfico de tarefas não é necessária.
Depois de criar uma tarefa, você deve executar ALTER TASK … RESUME antes que a tarefa seja executada com base nos parâmetros especificados na definição da tarefa. Observe que as contas estão atualmente limitadas a um máximo de 30.000 tarefas retomadas.
Além disso, quando uma tarefa é clonada, a execução da tarefa clonada é suspensa por padrão e deve ser habilitada explicitamente usando o mesmo comando.
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.
Por padrão, uma instrução DML executada sem iniciar explicitamente uma transação é automaticamente confirmada com o sucesso ou revertida com o fracasso no fim da instrução. Este comportamento é chamado de confirmação automática e é controlado com o parâmetro AUTOCOMMIT. Este parâmetro deve ser definido como TRUE. Se o parâmetro AUTOCOMMIT for definido como FALSE no nível de conta, então defina o parâmetro como TRUE para a tarefa individual (usando ALTER TASK … SET AUTOCOMMIT = TRUE); caso contrário, qualquer instrução DML executada pela tarefa falhará.
Múltiplas tarefas que consomem dados de mudança de um único fluxo de tabela recuperam diferentes deltas. Quando uma tarefa consome os dados de alteração em um fluxo usando uma instrução DML, o fluxo avança segundo o offset. Os dados da alteração não estão mais disponíveis para a próxima tarefa a ser consumida. Atualmente, recomendamos que apenas uma única tarefa consuma os dados de alteração de um fluxo. Vários fluxos podem ser criados para a mesma tabela e consumidos por diferentes tarefas.
Quando a sintaxe CREATE OR REPLACE é usada, a tarefa existente é descartada e recriada usando a definição especificada. Observe os seguintes comportamentos:
A tarefa recriada é suspensa por padrão.
Qualquer execução atual da tarefa (como uma execução com um estado EXECUTING na saída TASK_HISTORY) é concluída. Para interromper a execução da tarefa especificada, execute a função SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS.
Se uma tarefa autônoma ou raiz for recriada, a próxima execução programada da tarefa é cancelada.
Instruções CREATE OR REPLACE <object> são atômicas. Ou seja, quando um objeto é substituído, o objeto antigo é excluído e o novo objeto é criado em uma única transação.
Em relação aos metadados:
Atenção
Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.
Exemplos¶
Instrução SQL única¶
Crie uma tarefa sem servidor que consulte o carimbo de data/hora atual a cada hora, começando às 9:00h AM e terminando às 5:00h PM aos domingos (fuso horário América/Los_Angeles).
O tamanho inicial do warehouse é XSMALL:
CREATE TASK t1
SCHEDULE = 'USING CRON 0 9-17 * * SUN America/Los_Angeles'
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
AS
SELECT CURRENT_TIMESTAMP;
O mesmo que o exemplo anterior, mas a tarefa depende de um warehouse gerenciado pelo usuário para fornecer os recursos de computação para as execuções:
CREATE TASK mytask_hour
WAREHOUSE = mywh
SCHEDULE = 'USING CRON 0 9-17 * * SUN America/Los_Angeles'
AS
SELECT CURRENT_TIMESTAMP;
Exemplos adicionais de prazos:
Valor SCHEDULE |
Descrição |
---|---|
|
A cada minuto. Fuso horário UTC. |
|
Todas as noites às 2:00h AM. Fuso horário UTC. |
|
Duas vezes ao dia, às 5:00h AM e 5:00h PM (no início da hora). Fuso horário UTC. |
|
Em junho, no último dia do mês, às 2:30h AM. Fuso horário UTC. |
Crie uma tarefa sem servidor que insere o carimbo de data/hora atual em uma tabela a cada hora. A tarefa define o parâmetro TIMESTAMP_INPUT_FORMAT para a sessão em que a tarefa é executada. Este parâmetro de sessão especifica o formato do carimbo de data/hora inserido:
CREATE TASK t1
SCHEDULE = '60 MINUTE'
TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
AS
INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);
Criar uma tarefa que insere o carimbo de data/hora atual em uma tabela a cada 5 minutos:
CREATE TASK mytask_minute
WAREHOUSE = mywh
SCHEDULE = '5 MINUTE'
AS
INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);
Crie uma tarefa que insere dados de rastreamento de alterações para operações INSERT de um fluxo em uma tabela a cada 5 minutos. A tarefa pesquisa o fluxo usando a função SYSTEM$STREAM_HAS_DATA para determinar se existem dados de alteração e, se o resultado for FALSE
, ignora a execução atual:
CREATE TASK mytask1
WAREHOUSE = mywh
SCHEDULE = '5 minute'
WHEN
SYSTEM$STREAM_HAS_DATA('MYSTREAM')
AS
INSERT INTO mytable1(id,name) SELECT id, name FROM mystream WHERE METADATA$ACTION = 'INSERT';
Crie uma tarefa filho sem servidor em um gráfico de tarefas e adicione múltiplas tarefas predecessoras. A tarefa secundária só é executada depois que todas as tarefas predecessoras especificadas tiverem completado com sucesso suas próprias tarefas.
Suponha que a tarefa raiz de um gráfico da tarefa seja task1
e que task2
, task3
e task4
sejam tarefas filho de task1
. Este exemplo acrescenta a tarefa filho task5
ao gráfico de tarefas e especifica task2
, task3
e task4
como tarefas predecessoras:
-- Create task5 and specify task2, task3, task4 as predecessors tasks.
-- The new task is a serverless task that inserts the current timestamp into a table column.
CREATE TASK task5
AFTER task2, task3, task4
AS
INSERT INTO t1(ts) VALUES(CURRENT_TIMESTAMP);
Procedimento armazenado¶
Criar uma tarefa chamada my_copy_task
que chame um procedimento armazenado para descarregar dados da tabela mytable
no estágio mystage
nomeado (usando COPY INTO <local>) a cada hora:
-- Create a stored procedure that unloads data from a table
-- The COPY statement in the stored procedure unloads data to files in a path identified by epoch time (using the Date.now() method)
CREATE OR REPLACE PROCEDURE my_unload_sp()
returns string not null
language javascript
AS
$$
var my_sql_command = ""
var my_sql_command = my_sql_command.concat("copy into @mystage","/",Date.now(),"/"," from mytable overwrite=true;");
var statement1 = snowflake.createStatement( {sqlText: my_sql_command} );
var result_set1 = statement1.execute();
return my_sql_command; // Statement returned for info/debug purposes
$$;
-- Create a task that calls the stored procedure every hour
CREATE TASK my_copy_task
WAREHOUSE = mywh
SCHEDULE = '60 minute'
AS
CALL my_unload_sp();
Múltiplas instruções SQL usando o SnowSQL¶
Crie uma tarefa que execute múltiplas instruções SQL. Neste exemplo, a tarefa modifica o TIMESTAMP_OUTPUT_FORMAT para a sessão e depois consulta a função CURRENT_TIMESTAMP.
Nota
O código SQL na definição da tarefa inclui instruções múltiplas. Para executar a instrução CREATE TASK, você deve definir temporariamente um caractere diferente de um ponto-e-vírgula como delimitador para instruções SQL; caso contrário, a instrução CREATE TASK retornaria um erro do usuário. O comando para mudar o delimitador de SQL no SnowSQL é !set sql_delimiter = <caractere>
.
!set sql_delimiter=/
CREATE OR REPLACE TASK test_logging
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
SCHEDULE = 'USING CRON 0 * * * * America/Los_Angeles'
AS
BEGIN
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
SELECT CURRENT_TIMESTAMP;
END;/
!set sql_delimiter=";"
Lógica de procedimentos usando Script Snowflake¶
Crie uma tarefa sem servidor que declara uma variável, usa a variável e retorna o valor da variável a cada 2 minutos:
CREATE TASK t1
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
SCHEDULE = '2 minute'
AS
EXECUTE IMMEDIATE
$$
DECLARE
radius_of_circle float;
area_of_circle float;
BEGIN
radius_of_circle := 3;
area_of_circle := pi() * radius_of_circle * radius_of_circle;
return area_of_circle;
END;
$$;
Tarefa raiz com configuração¶
Crie uma tarefa que especifique a configuração e, em seguida, leia essa configuração.
CREATE OR REPLACE TASK root_task_with_config
WAREHOUSE=mywarehouse
SCHEDULE='10 m'
CONFIG=$${"output_dir": "/temp/test_directory/", "learning_rate": 0.1}$$
AS
BEGIN
LET OUTPUT_DIR STRING := SYSTEM$GET_TASK_GRAPH_CONFIG('output_directory')::string;
LET LEARNING_RATE DECIMAL := SYSTEM$GET_TASK_GRAPH_CONFIG('learning_rate:v1')::DECIMAL;
...
END;
Tarefa finalizadora¶
Crie uma tarefa finalizadora, associada à tarefa raiz de um gráfico de tarefas, que envia um alerta por e-mail após a conclusão da tarefa. Para obter mais informações sobre as tarefas finalizadoras, consulte Tarefa finalizadora.
CREATE TASK finalize_task
WAREHOUSE = my_warehouse
FINALIZE = my_root_task
AS
CALL SYSTEM$SEND_EMAIL(
'my_email_int',
'first.last@example.com, first2.last2@example.com',
'Email Alert: Task A has finished.',
'Task A has successfully finished.\nStart Time: 10:10:32\nEnd Time: 12:15:45\nTotal Records Processed: 115678'
);