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:

ALTER TASK , DROP TASK , SHOW TASKS , DESCRIBE TASK

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> ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  [ AFTER <string> [ , <string> , ... ] ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ FINALIZE = <string> ]
[ WHEN <boolean_expr> ]
AS
  <sql>
Copy

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>
  [ COPY GRANTS ]
  [ ... ]
Copy

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 (ou seja, nome) 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 (por exemplo, "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 gerenciados pelo Snowflake para a execução desta tarefa. Também chamadas de tarefas sem servidor, esses recursos de computação são automaticamente redimensionados pelo Snowflake, 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): SMALL, MEDIUM, LARGE etc. 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 REPLACETASK).

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 DAG 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 secundárias em um DAG.

  • 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)
    # | | | | |
    # | | | | |
      * * * * *
    
    Copy

    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 (ou seja, 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:

    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. Note que fazemos o melhor para assegurar precisão absoluta, mas apenas garantimos que as tarefas não sejam executadas antes que ocorra seu intervalo definido (por exemplo, no exemplo atual, a tarefa poderia ser executada primeiro às 9:14h AM, mas definitivamente não será executada às 9:12h AM).

    Nota

    O valor máximo suportado é 11520 (8 dias). Tarefas que têm um valor num 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 na DAG. 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 DAG.

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 DAG sejam executadas simultaneamente.

Nota

Este parâmetro só pode ser definido em uma tarefa raiz. O ajuste se aplica a todas as tarefas no DAG.

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 às tarefas secundárias. Se a próxima execução agendada da tarefa raiz ocorrer enquanto a execução atual de uma tarefa secundária ainda estiver em operação, outra instância do DAG é iniciada.

  • FALSE assegura que apenas uma instância de um determinado DAG seja autorizada a funcionar de cada vez. A próxima execução de uma tarefa raiz só é programada depois que todas as tarefas secundárias no DAG tiverem terminado. Isto significa que se o tempo acumulado necessário para executar todas as tarefas no DAG exceder o tempo explicitamente programado determinado na definição da tarefa raiz, pelo menos uma execução do DAG é 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.

Definir o parâmetro em uma tarefa autônoma ou na tarefa raiz em um DAG. 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 DAG:

  • 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 DAG falhar ou atingir o tempo limite pelo número especificado de vezes, em execuções consecutivas.

A configuração se aplica a tarefas que dependem de recursos computacionais gerenciados pelo Snowflake (ou seja, modelo computacional sem servidor) ou recursos computacionais gerenciados pelo usuário (ou seja, um warehouse virtual).

Para obter mais informações sobre este parâmetro, consulte SUSPEND_TASK_AFTER_NUM_FAILURES.

Valores: 0 - Sem limite superior.

Padrão: 0 (sem suspensão automática)

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.

COPY GRANTS

Especifica manter as permissões de acesso da tarefa original quando uma nova tarefa é criada usando qualquer uma das seguintes variantes CREATE TASK:

  • CREATE OR REPLACE TASK

  • CREATE TASK … CLONE

O parâmetro copia todas as permissões, exceto OWNERSHIP, da tarefa existente para a nova tarefa. Por padrão, a função que executa o comando CREATE TASK é a proprietária da nova tarefa.

Nota:

  • Se a instrução CREATE TASK fizer referência a mais de uma tarefa (por exemplo, create or replace task t1 clone t2;), a cláusula COPY GRANTS dá precedência à tarefa que está sendo substituída.

  • A saída SHOW GRANTS para a tarefa de substituição relaciona o cessionário para os privilégios copiados como a função que executou a instruçãoCREATE TASK, com o carimbo de data/hora atual quando a instrução foi executada.

  • A operação de cópia de concessões ocorre atomicamente no comando CREATE TASK (ou seja, dentro da mesma transação).

Nota

Este parâmetro não é suportado atualmente.

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 DAG de tarefas ou adicionar essa tarefa a um DAG existente. Um DAG é 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 DAG 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 DAG 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 tarefa predecessora definida (ou seja, tarefas especificadas usando o parâmetro AFTER) para ligar as tarefas entre si.

  • Uma tarefa é limitada a 100 tarefas predecessoras e 100 tarefas filho. Além disso, um DAG é 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 DAG devem ter o mesmo proprietário (ou seja, uma única função deve ter o privilégio OWNERSHIP sobre todas as tarefas no DAG).

  • Todas as tarefas em um DAG 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 DAG 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 ou AFTER), 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 é executada.

    Nota

    SYSTEM$STREAM_HAS_DATA foi projetado para evitar falsos negativos (ou seja, retornar um valor FALSE mesmo quando o fluxo contém dados alterados). No entanto, esta função não tem garantia de evitar falsos positivos (ou seja, 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 anterior em um DAG 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
    
    Copy
    WHEN SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name') != 'VALIDATION'
    
    Copy
    WHEN SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name')::FLOAT < 0.2
    
    Copy

    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 estejam muito fora de sincronia com a execução de tarefas reais. 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 mais detalhes 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 uma DAG. É 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

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 gerenciados pelo Snowflake para execuções (tarefas sem servidor).

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 utilizando os privilégios concedidos ao proprietário da tarefa (ou seja, a função que tem o privilégio OWNERSHIP na 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 gerenciados pelo Snowflake (ou seja, tarefas 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 gerenciados pelo Snowflake 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 DAG. A execução de tarefas individuais em um DAG pode contar com recursos de computação do Snowflake ou gerenciados pelo usuário. A habilitação deste modelo de computação sem servidor para todas as tarefas no DAG 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 (ou seja, 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;
Copy

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;
Copy

Exemplos adicionais de prazos:

Valor SCHEDULE

Descrição

* * * * * UTC

A cada minuto. Fuso horário UTC.

0 2 * * * UTC

Todas as noites às 2:00h AM. Fuso horário UTC.

0 5,17 * * * UTC

Duas vezes ao dia, às 5:00h AM e 5:00h PM (no início da hora). Fuso horário UTC.

30 2 L 6 * 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);
Copy

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);
Copy

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';
Copy

Crie uma tarefa secundária sem servidor em um DAG 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 DAG seja task1 e que task2, task3 e task4 sejam tarefas secundárias de task1. Este exemplo acrescenta a tarefa secundária task5 ao DAG 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);
Copy

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();
Copy

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=";"
Copy

Lógica de procedimentos usando o 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;
  $$;

Examples:
Copy

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;
Copy