Introdução às tarefas¶
Use as tarefas para automatizar, programar e otimizar os procedimentos comerciais em seu pipeline de dados.
No Snowflake, as tarefas podem executar qualquer um dos seguintes tipos de funções:
Uma única instrução SQL.
Uma chamada para um procedimento armazenado.
Lógica processual usando o Snowflake Scripting.
Para procedimentos complicados, como a geração de relatórios ou a manutenção de tabelas periódicas, combine as tarefas criando gráficos de tarefas. Para processar continuamente dados novos ou alterados à medida que eles chegam, como nos fluxos de trabalho extrair, carregar, transformar (ELT), use as tarefas acionadas para combinar tarefas com fluxos de tabela.
Nota
Evolução do esquema da tabela não é compatível com tarefas.
Neste tópico:
Visão geral do fluxo de trabalho de criação de tarefas¶
Crie uma função de administrador de tarefa que possa executar os comandos nas etapas a seguir.
Defina uma nova tarefa usando CREATE TASK. A tarefa está suspensa por padrão. Para obter informações sobre como definir os parâmetros da tarefa, consulte:
Teste manualmente as tarefas usando EXECUTE TASK.
Altere a tarefa ou permita que ela seja executada continuamente usando ALTER TASK … RESUME. Para obter informações sobre a execução de tarefas, consulte:
Recursos de computação¶
As tarefas exigem recursos de computação para executar funções SQL, Python, Java e Scala, bem como procedimentos armazenados. Para cada tarefa, é possível escolher entre permitir que o Snowflake gerencie os recursos criando tarefas sem servidor ou gerenciá-los por conta própria usando o modelo de warehouse virtual gerenciado pelo usuário.
Tarefas sem servidor¶
Com este modelo, as tarefas são executadas na computação gerenciada pelo Snowflake. O Snowflake redimensiona automaticamente os recursos conforme necessário para cada carga de trabalho.
As tarefas que são executadas regularmente são boas candidatas para o modelo de computação sem servidor. Esse modelo também é recomendado quando você tem warehouses subutilizados com poucas tarefas em execução.
O Snowflake determina o tamanho ideal dos recursos de computação para uma determinada execução com base em uma análise dinâmica das estatísticas de execuções mais recentes da mesma tarefa.
Limitações¶
O tamanho máximo de computação para uma tarefa sem servidor é equivalente a um warehouse virtual X2LARGE.
Criação de uma tarefa usando o modelo de computação sem servidor¶
Ao usar CREATE TASK ou ALTER TASK, deixe de fora o parâmetro WAREHOUSE.
A função que executa a tarefa deve ter o privilégio global EXECUTE MANAGED TASK. Para obter mais informações sobre os requisitos de controle de acesso para tarefas, consulte Segurança de tarefas.
É possível ter algum controle sobre o custo e o desempenho das tarefas sem servidor definindo os seguintes parâmetros:
SERVERLESS_TASK_MAX_STATEMENT_SIZE: o tamanho máximo do warehouse para evitar custos inesperados.
SERVERLESS_TASK_MIN_STATEMENT_SIZE: tamanho mínimo do warehouse para um desempenho previsível.
TARGET_COMPLETION_INTERVAL: o tempo desejado para a conclusão da tarefa.
Quando essas configurações são especificadas, a precedência é a seguinte:
SERVERLESS_TASK_MAX_STATEMENT_SIZE
SERVERLESS_TASK_MIN_STATEMENT_SIZE
TARGET_COMPLETION_INTERVAL
Como o Snowflake estima os recursos de computação sem servidor¶
O Snowflake estima automaticamente os recursos de computação necessários para concluir uma tarefa com base no período desejado e desempenho de execuções de tarefas anteriores.
O período desejado pode ser definido por meio de TARGET_COMPLETION_INTERVAL. Se esse valor não for definido, o Snowflake redimensionará os recursos de computação sem servidor para concluir antes do próximo horário de execução programado.
Após a conclusão de uma tarefa, o Snowflake estima os recursos de computação necessários da seguinte forma:
Se as tarefas estiverem sendo concluídas muito rapidamente (dentro de um período que seja um fator menor do que o período desejado), o Snowflake reduzirá os recursos nas execuções subsequentes em um tamanho do warehouse.
Se as tarefas estiverem sendo concluídas muito lentamente (dentro de um período que seja um fator a mais do que o período desejado), o Snowflake aumentará os recursos nas execuções subsequentes em um tamanho do warehouse.
Exemplos¶
Exemplo 1: crie uma tarefa sem servidor para ser executada a cada hora com um intervalo de conclusão desejado de 120 minutos:
CREATE TASK SCHEDULED_T1 SCHEDULE='USING CRON 0 * * * * America/Los_Angeles'
TARGET_COMPLETION_INTERVAL='120 MINUTE' AS SELECT 1;
Ao definir TARGET_COMPLETION_INTERVAL com uma duração relativamente longa, isso indica que é aceitável que a execução da tarefa seja mais longa. O Snowflake dimensiona automaticamente a computação sem servidor para que a execução da tarefa seja concluída dentro do TARGET_COMPLETION_INTERVAL especificado.
Exemplo 2: crie uma tarefa sem servidor para ser executada a cada hora com um tempo de conclusão desejado de 10 minutos:
CREATE TASK SCHEDULED_T2 SCHEDULE='USING CRON 0 * * * * UTC'
TARGET_COMPLETION_INTERVAL='10 MINUTE'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
AS SELECT 1;
Ao definir TARGET_COMPLETION_INTERVAL com uma duração relativamente curta, isso indica uma preferência pela conclusão rápida da tarefa. O Snowflake dimensiona automaticamente a computação sem servidor para que a execução da tarefa seja concluída dentro do TARGET_COMPLETION_INTERVAL especificado até que o SERVERLESS_TASK_MAX_STATEMENT_SIZE seja alcançado.
Exemplo 3: crie uma tarefa sem servidor agendada uma vez por dia em algum momento dentro de um intervalo de conclusão desejado e de um intervalo de tamanhos mínimo e máximo de warehouse:
CREATE TASK SCHEDULED_T3 SCHEDULE='USING CRON 0 0 * * * UTC'
TARGET_COMPLETION_INTERVAL='180 M'
SCHEDULING_MODE = 'FLEXIBLE'
SERVERLESS_TASK_MIN_STATEMENT_SIZE='MEDIUM' SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE' AS SELECT 1;
Com essa configuração, a tarefa sem servidor é executada uma vez por dia, à meia-noite, em pelo menos um warehouse médio com um TARGET_COMPLETION_INTERVAL de 3 horas. O Snowflake dimensiona automaticamente a computação sem servidor para que a execução da tarefa seja concluída dentro do TARGET_COMPLETION_INTERVAL especificado até que o SERVERLESS_TASK_MAX_STATEMENT_SIZE seja alcançado. Ao definir SCHEDULING_MODE como flexível, a tarefa pode começar a qualquer momento do dia.
Exemplo 4: crie uma tarefa sem servidor agendada uma vez por dia sem um intervalo de conclusão desejado:
CREATE TASK SCHEDULED_T4 SCHEDULE='USING CRON 0 0 * * * UTC'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE' AS SELECT 1;
Com essa configuração, a tarefa sem servidor é executada uma vez por dia, à meia-noite. Se uma série de durações de execução de tarefas não for concluída antes do próximo horário programado, o Snowflake dimensiona automaticamente a computação sem servidor para que a execução da tarefa seja concluída dentro do SCHEDULE especificado até que SERVERLESS_TASK_MAX_STATEMENT_SIZE seja alcançado.
Para obter mais informações sobre os parâmetros e a sintaxe, consulte CREATE TASK e ALTER TASK.
Modelo de warehouse virtual gerenciado pelo usuário¶
Com esse modelo, você tem controle total dos recursos de computação usados para cada carga de trabalho.
Esse modelo é recomendado quando você deseja gerenciar manualmente cargas imprevisíveis nos recursos de computação. Warehouses com vários clusters com suspensão e retomada automáticas ativadas também podem ajudar a moderar o consumo de crédito.
Escolha do tamanho de um warehouse¶
Se você optar por utilizar os warehouses existentes para fornecer os recursos de computação para tarefas individuais, siga as práticas recomendadas descritas em Considerações sobre warehouses. Para entender as necessidades de computação para sua tarefa, analise o tempo médio de execução para uma única tarefa ou gráfico de tarefa usando diferentes warehouses com base no tamanho do warehouse e no clustering. Você também deve considerar se o warehouse é compartilhado por vários processos.
Para analisar o tempo médio de execução de suas tarefas, consulte a exibição Account Usage TASK_HISTORY. A diferença média entre os tempos agendados e completados para uma tarefa é o tempo médio de execução esperado para a tarefa. Essa diferença inclui o tempo em que a tarefa ficou na fila enquanto outros processos estavam usando os recursos de computação no warehouse.
Para gráficos de tarefa, há um breve atraso após a conclusão da execução de uma tarefa anterior e o início de qualquer tarefa filho. Escolha um tamanho de warehouse grande o suficiente para acomodar várias tarefas filho secundárias executadas simultaneamente.
O diagrama a seguir mostra um período de 1 minuto no qual uma única tarefa ficou em fila por 20 segundos e depois foi executada por 40 segundos. Isso significa que outros processos estavam usando os recursos do warehouse nos primeiros 20 segundos após a tarefa ter sido agendada.

O diagrama a seguir mostra um gráfico da tarefa que requer 5 minutos, em média, para ser completado em cada execução. O diagrama mostra a janela para a conclusão de 2 execuções do gráfico da tarefa. Esse período é calculado a partir do momento em que a tarefa raiz está agendada para começar até que a última tarefa filho tenha terminado de ser executada.
Neste exemplo, o warehouse no qual o gráfico de tarefa está sendo executado é compartilhado com outras operações simultâneas. Estas operações simultâneas consomem todos os recursos disponíveis quando cada tarefa no gráfico da tarefa termina e antes que a próxima tarefa comece a ser executada. Como resultado, a janela para cada tarefa inclui algum tempo de fila de espera enquanto aguarda que outras operações terminem e liberem os recursos de computação.

Tarefas em execução¶
Esta seção descreve as diferentes maneiras pelas quais uma tarefa pode ser agendada e executada, como falhas de tarefa são tratadas e como a versão de uma tarefa é determinada.
Cronograma de uma tarefa¶
As tarefas geralmente são executadas de acordo com um cronograma.
Você pode definir o cronograma ao criar uma tarefa usando CREATE TASK ou mais tarde usando ALTER TASK. Ao combinar tarefas em um gráfico de tarefas, defina o cronograma usando os comandos CREATE TASK e ALTER TASK na tarefa raiz.
O Snowflake garante que apenas uma instância de uma tarefa com um cronograma seja executada por vez. Se uma tarefa ainda estiver em execução quando o próximo período de execução agendado ocorrer, esse tempo agendado é ignorado.
O Snowflake redimensiona automaticamente os recursos de computação para tarefas sem servidor. Para tarefas gerenciadas pelo usuário, escolha um tamanho de warehouse apropriado para que a tarefa conclua sua carga de trabalho dentro do cronograma. Para obter mais informações, consulte Escolha do tamanho de warehouse.
Agendamento de tarefas e horário de verão¶
A expressão cron em uma definição de tarefa suporta a especificação de um fuso horário. As tarefas agendadas durante a transição do horário padrão para o horário de verão, ou o inverso, podem ter comportamentos inesperados.
Por exemplo:
Durante a mudança do horário de verão para o horário padrão, uma tarefa agendada para começar à 1 AM no fuso horário de America/Los_Angeles (
0 1 * * * America/Los_Angeles
) seria executada duas vezes. Em 1 AM e então novamente à 1:59:59 AM muda para 1:00:00 AM hora local.Durante a mudança do horário padrão para o horário de verão, uma tarefa agendada para começar às 2 AM no fuso horário de America/Los_Angeles (
0 2 * * * America/Los_Angeles
) não seria executada porque a hora local muda de 1:59:59 AM para 3:00:00 AM.
Para evitar execuções de tarefa inesperadas devido ao horário de verão, considere o seguinte:
Não agende tarefas para serem executadas entre 1 AM e 3 AM.
Ajuste manualmente a expressão cron para tarefas agendadas entre 1 AM e 3 AM duas vezes por ano para compensar a mudança de horário.
Utilize um formato de horário que não aplique o horário de verão, tal como UTC.
Tarefas acionadas¶
Use as tarefas acionadas para executar tarefas automaticamente sempre que um fluxo definido tiver novos dados. Isso elimina a necessidade de pesquisar uma fonte com frequência quando a disponibilidade de novos dados é imprevisível. Elas também reduzem a latência porque os dados são processados imediatamente.
Tarefas acionadas não usam recursos de computação até que o fluxo definido tenha dados e acione a execução da tarefa.
A seguir estão as condições de execução para tarefas acionadas:
Quando os dados são alterados na tabela (ou nas tabelas) que o fluxo associado rastreia.
Quando a tarefa é retomada pela primeira vez, para consumir todos os dados já existentes no fluxo.
As tarefas acionadas executam automaticamente uma verificação de integridade a cada 12 horas para evitar que o fluxo fique desatualizado. Se não houver dados no fluxo, o Snowflake ignorará a execução sem usar recursos de computação.
Criação de uma tarefa acionada¶
Use CREATE TASK e defina o fluxo de destino usando a cláusula WHEN
. (Não inclua o parâmetro SCHEDULE
.)
Atribua recursos de computação para a tarefa escolhendo uma das seguintes opções:
Para gerenciar manualmente os recursos (tarefa de warehouse gerenciada pelo usuário), adicione o parâmetro
WAREHOUSE
.Para permitir que o Snowflake gerencie recursos (tarefa sem servidor), adicione o parâmetro
TARGET_COMPLETION_INTERVAL
. O Snowflake estima os recursos necessários e se ajusta para concluir a tarefa nesse tempo.
Migração de uma tarefa existente de uma tarefa agendada para uma tarefa acionada¶
Suspenda a tarefa, cancele a definição do parâmetro SCHEDULE
e retome a tarefa. A tarefa existente deve ter um fluxo de destino definido na cláusula WHEN
.
ALTER TASK task SUSPEND;
ALTER TASK task UNSET SCHEDULE;
ALTER TASK task RESUME;
Migração de uma tarefa acionada gerenciada pelo usuário existente para uma tarefa acionada sem servidor¶
Suspenda a tarefa. Remova o parâmetro WAREHOUSE
e adicione o parâmetro TARGET_COMPLETION_INTERVAL
. Retome a tarefa.
Considerações sobre tarefas acionadas¶
Na saída
SHOW TASKS
eDESC TASK
, as exibições de propriedadeSCHEDULE
NULL
para tarefas acionadas.Na saída da exibição task_history dos esquemas information_schema e account_usage, a coluna SCHEDULED_FROM exibe TRIGGER.
Ao trabalhar com vários fluxos de dados, é possível gerenciar quando as tarefas são iniciadas usando os parâmetros condicionais:
WHEN … AND
eWHEN … OR
.
Limitações das tarefas acionadas¶
Por padrão, as tarefas acionadas são executadas no máximo a cada 30 segundos. É possível modificar o parâmetro USER_TASK_MINIMUM_TRIGGER_INTERVAL_IN_SECONDS para executá-las com mais frequência, até a cada 10 segundos.
Não há suporte para fluxos em tabelas de diretório, tabelas externas e tabelas híbridas.
Exemplos de tarefas acionadas¶
Exemplo 1: crie uma tarefa gerenciada pelo usuário que seja executada sempre que os dados forem alterados em um dos dois fluxos:
CREATE TASK my_task
WHEN SYSTEM$STREAM_HAS_DATA('my_return_stream')
OR SYSTEM$STREAM_HAS_DATA('my_order_stream')
WAREHOUSE = my_warehouse
AS
INSERT INTO customer_activity
SELECT customer_id, return_total, return_date, ‘return’
FROM my_return_stream
UNION ALL
SELECT customer_id, order_total, order_date, ‘order’
FROM my_order_stream;
Exemplo 2: crie uma tarefa para ser executada sempre que forem detectadas alterações de dados em dois fluxos de dados diferentes. Como a tarefa usa o condicional AND, ela será ignorada se apenas um dos dois fluxos tiver novos dados.
Como TARGET_COMPLETION_INTERVAL é de 120 minutos, o Snowflake estima e ajusta os recursos de computação necessários para concluir a tarefa nesse tempo.
CREATE TASK triggeredTask
WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
TARGET_COMPLETION_INTERVAL='120 MINUTES'
AS
INSERT INTO completed_promotions
SELECT order_id, order_total, order_time, promotion_id
FROM orders_stream
WHERE promotion_id IS NOT NULL;
Execução manual de uma tarefa¶
Use CREATE TASK ou ALTER TASK para criar uma nova tarefa e definir os parâmetros da tarefa.
Use EXECUTE TASK para acionar uma única execução da tarefa. Esse comando SQL é útil para testar tarefas novas ou modificadas.
Você pode chamar este comando SQL diretamente em scripts ou em procedimentos armazenados. Além disso, este comando suporta a integração de tarefas em pipelines de dados externos. Qualquer serviço de terceiros que possa autenticar em sua conta Snowflake e autorizar ações SQL pode executar o comando EXECUTE TASK para executar tarefas.
Controle de versão de execuções de tarefas¶
Quando uma tarefa autônoma é retomada primeiro ou executada manualmente, uma versão inicial da tarefa é definida. A tarefa autônoma ou é executada utilizando esta versão. Após uma tarefa ser suspensa e modificada, uma nova versão é definida quando a tarefa autônoma é retomada ou executada manualmente.
Quando a tarefa é suspensa, todas as execuções agendadas futuras da tarefa são canceladas; no entanto, as tarefas em execução no momento continuam sendo executadas usando a versão atual.
Por exemplo, suponha que a tarefa esteja suspensa, mas uma execução agendada desta tarefa já tenha começado. O proprietário da tarefa modifica o código SQL chamado pela tarefa enquanto a tarefa ainda está em execução. A tarefa executa o código SQL em sua definição usando a versão da tarefa que era atual quando a tarefa raiz iniciou sua execução. Quando a tarefa é retomada ou executada manualmente, uma nova versão da tarefa é definida. Esta nova versão inclui as modificações da tarefa filho.
Para recuperar o histórico das versões de tarefas, consulte TASK_VERSIONS Exibição do Account Usage (no banco de dados SNOWFLAKE compartilhado).
Suspensão automática das tarefas após uma execução falhada¶
Opcionalmente, suspende as tarefas automaticamente após um número especificado de execuções consecutivas que falham ou ficam sem tempo. Este recurso pode reduzir custos suspendendo tarefas que consomem créditos do Snowflake, mas que não são executadas até a conclusão.
Defina o parâmetro SUSPEND_TASK_AFTER_NUM_FAILURES = num
em uma tarefa. Quando o parâmetro é definido como um valor maior que 0
, as tarefas são automaticamente suspensas após o número especificado de execuções consecutivas de tarefas falhar ou atingir o tempo limite.
O parâmetro pode ser definido ao criar uma tarefa usando CREATE TASK ou mais tarde usando ALTER TASK. Você também pode alterar esse valor no Snowsight.
O parâmetro SUSPEND_TASK_AFTER_NUM_FAILURES também pode ser definido no nível de conta, banco de dados ou esquema. A configuração se aplica a todas as tarefas contidas no objeto modificado. Observe que a definição explícita do parâmetro em um nível mais baixo sobrepõe-se ao valor do parâmetro definido em um nível mais alto.
Repetição automática das execuções de tarefa que falharam¶
Se alguma tarefa for concluída em um estado FAILED, o Snowflake poderá tentar repetir a execução da tarefa automaticamente. A nova tentativa automática de tarefa está desabilitada por padrão. Para habilitar esse recurso, defina TASK_AUTO_RETRY_ATTEMPTS para um valor maior que 0.
As tarefas que usam notificações de erro enviam notificações para cada tentativa de repetição com falha. Para obter mais informações, consulte Configuração de uma tarefa para enviar notificações de erro.
Quando você define o valor do parâmetro TASK_AUTO_RETRY_ATTEMPTS ao nível da conta, do banco de dados ou do esquema, a alteração é aplicada às tarefas contidas no objeto modificado durante sua próxima execução agendada.
Definição de parâmetros de sessão para tarefas¶
Você pode definir parâmetros para a sessão em que uma tarefa é executada. Para isso, modifique uma tarefa existente e defina os valores dos parâmetros desejados usando ALTER TASK … SET session_parameter = value[, session_parameter = value ... ]
ou edite a tarefa no Snowsight.
Uma tarefa oferece suporte a todos os parâmetros da sessão. Para a lista completa, consulte Parâmetros. As tarefas não oferecem suporte a parâmetros de conta ou usuário.
Visualização do histórico de tarefas para sua conta¶
Você pode visualizar o histórico de tarefas de sua conta usando SQL ou Snowsight. Para ver o histórico de tarefas em Snowsight, consulte Visualização de tarefas e gráficos de tarefa no Snowsight. Para obter mais informações sobre os privilégios necessários, consulte Visualização do histórico de tarefas.
Para ver o histórico de execução de uma única tarefa:
- SQL:
Consulte a função de tabela TASK_HISTORY (no Snowflake Information Schema).
Para ver os detalhes de uma execução do gráfico da tarefa que está agendada ou em execução:
- SQL:
Consulte a função de tabela CURRENT_TASK_GRAPHS (no Snowflake Information Schema).
Para ver o histórico de execuções do gráfico da tarefa que foram executadas com sucesso, falharam ou foram canceladas nos últimos 60 minutos:
- SQL:
Consulte a função de tabela COMPLETE_TASK_GRAPHS (no Snowflake Information Schema).
Consulte a exibição Exibição COMPLETE_TASK_GRAPHS (no Account Usage).
Custos da tarefa¶
Os custos associados à execução de uma tarefa para executar código SQL diferem dependendo da fonte dos recursos de computação para a tarefa:
- Warehouse gerenciado pelo usuário
O Snowflake fatura sua conta por uso de crédito baseado no uso do warehouse enquanto uma tarefa está em execução, semelhante ao uso do warehouse para executar as mesmas instruções SQL em um cliente ou na interface da Web do Snowflake. O faturamento de crédito por segundo e a suspensão automática do warehouse lhe dão a flexibilidade de começar com tamanhos de warehouse maiores e depois ajustar o tamanho para corresponder às cargas de trabalho de suas tarefas.
- Modelo de computação sem servidor
O Snowflake cobra sua conta com base no uso de recursos de computação. As cobranças são calculadas com base em seu uso total dos recursos, incluindo o uso do serviço de nuvem, medido em uso de créditos de horas de computação. O custo das horas de computação muda com base no tamanho do warehouse e no tempo de execução da consulta. Para obter mais informações, consulte Uso de crédito sem servidor ou Consulta: custo total da tarefa sem servidor.
O Snowflake analisa execuções de tarefa no histórico de tarefas para determinar dinamicamente o tamanho e o número corretos de recursos de computação sem servidor. Conforme o Snowflake aumenta e diminui automaticamente os recursos para gerenciar suas execuções de tarefa, o custo para executá-las é dimensionado proporcionalmente.
Para saber quantos créditos são consumidos pelas tarefas, consulte a “Tabela de crédito de recursos sem servidor” na Tabela de consumo de serviços do Snowflake.
Considere as seguintes práticas recomendadas para otimizar custos ao criar tarefas:
Defina SCHEDULE para executar com menos frequência.
Use os parâmetros de suspensão automática e repetição automática para evitar desperdício de recursos em tarefas com falha.
Crie um orçamento e um alerta sobre limites de gastos para recursos sem servidor. Para obter mais informações, consulte Monitorar o uso de crédito com orçamentos.
Para recuperar o uso de créditos atual para uma tarefa específica, consulte a função de tabela SERVERLESS_TASK_HISTORY. Execute a seguinte instrução como proprietário da tarefa, onde
<database_name>
é o banco de dados que contém a tarefa e<task_name>
é o nome da tarefa:SET num_credits = (SELECT SUM(credits_used) FROM TABLE(<database_name>.information_schema.serverless_task_history( date_range_start=>dateadd(D, -1, current_timestamp()), date_range_end=>dateadd(D, 1, current_timestamp()), task_name => '<task_name>') ) );
Para recuperar o uso de créditos atual para todas as tarefas sem servidor, consulte a exibição SERVERLESS_TASK_HISTORY. Execute a seguinte instrução como administrador de conta:
SELECT start_time, end_time, task_id, task_name, credits_used, schema_id, schema_name, database_id, database_name FROM snowflake.account_usage.serverless_task_history ORDER BY start_time, task_id;
Segurança de tarefas¶
Para começar a executar tarefas, você precisa ter os privilégios de acesso corretos. Esta seção descreve como gerenciar o acesso às tarefas.
Para obter mais informações sobre a propriedade do gráfico de tarefa, consulte Gerenciamento da propriedade do gráfico de tarefa.
Privilégios de controle de acesso¶
Criação de tarefas¶
A criação de tarefas requer uma função com um mínimo dos seguintes privilégios:
Objeto |
Privilégio |
Notas |
---|---|---|
Conta |
EXECUTE MANAGED TASK |
Necessário apenas para tarefas que dependem de recursos de computação sem servidor. |
Banco de dados |
USAGE |
|
Esquema |
USAGE, CREATE TASK |
|
Warehouse |
USAGE |
Necessário apenas para tarefas que dependem de warehouses gerenciados pelo usuário. |
Tarefas em execução¶
Após a criação de uma tarefa, o proprietário da tarefa deverá ter os seguintes privilégios para que a tarefa seja executada:
Objeto |
Privilégio |
Notas |
---|---|---|
Conta |
EXECUTE TASK |
Requerido para executar quaisquer tarefas que a função possua. A revogação do privilégio EXECUTE TASK em uma função impede que todas as tarefas subsequentes sejam iniciadas sob essa função. |
Conta |
EXECUTE MANAGED TASK |
Necessário apenas para tarefas que dependem de recursos de computação sem servidor. |
Banco de dados |
USAGE |
|
Esquema |
USAGE |
|
Tarefa |
USAGE |
|
Warehouse |
USAGE |
Necessário apenas para tarefas que dependem de warehouses gerenciados pelo usuário. |
Além disso, a função deve ter as permissões necessárias para executar a instrução SQL executada pela tarefa.
Visualização do histórico de tarefas¶
Para visualizar tarefas, é necessário ter um ou mais dos seguintes privilégios:
A função ACCOUNTADMIN
O privilégio OWNERSHIP na tarefa
O privilégio global MONITOR EXECUTION
Retomada ou suspensão de tarefas¶
Além do proprietário da tarefa, uma função que tenha o privilégio OPERATE para a tarefa pode suspender ou retomar a tarefa. Esta função deve ter o privilégio USAGE para o banco de dados e o esquema que contêm a tarefa. Nenhum outro privilégio é necessário.
Quando uma tarefa é retomada, o Snowflake verifica se a função do proprietário da tarefa tem os privilégios listados em Tarefas em execução.
Criação de funções personalizadas para gerenciar permissões de tarefas¶
Com as funções personalizadas, você pode gerenciar facilmente as permissões concedidas para cada conta ou função no Snowflake. Para fazer alterações nas permissões de todas as contas ou funções usando a função personalizada, atualize a função personalizada. Ou revogue as permissões removendo a função personalizada.
Criação de uma função personalizada para criar tarefas¶
O Snowflake requer permissões diferentes para criar tarefas sem servidor e gerenciadas pelo usuário.
Por exemplo, para criar tarefas gerenciadas pelo usuário, crie a função personalizada nomeada warehouse_task_creation
e conceda a essa função os privilégios CREATE TASK e USAGE no warehouse em que a função pode criar tarefas.
USE SYSADMIN;
CREATE ROLE warehouse_task_creation
COMMENT = 'This role can create user-managed tasks.';
from snowflake.core.role import Role
root.session.use_role("SYSADMIN")
my_role = Role(
name="warehouse_task_creation",
comment="This role can create user-managed tasks."
)
root.roles.create(my_role)
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE warehouse_task_creation;
from snowflake.core.role import Securable
root.session.use_role("ACCOUNTADMIN")
root.roles['warehouse_task_creation'].grant_privileges(
privileges=["CREATE TASK"], securable_type="schema", securable=Securable(name='schema1')
)
GRANT USAGE
ON WAREHOUSE warehouse1
TO ROLE warehouse_task_creation;
from snowflake.core.role import Securable
root.roles['warehouse_task_creation'].grant_privileges(
privileges=["USAGE"], securable_type="warehouse", securable=Securable(name='warehouse1')
)
Como exemplo de uma função que pode criar tarefas sem servidor; crie uma função personalizada nomeada serverless_task_creation
e conceda à função o privilégio CREATE TASK e ao nível da conta o privilégio EXECUTE MANAGED TASK.
USE SYSADMIN;
CREATE ROLE serverless_task_creation
COMMENT = 'This role can create serverless tasks.';
from snowflake.core.role import Role
root.session.use_role("SYSADMIN")
my_role = Role(
name="serverless_task_creation",
comment="This role can create serverless tasks."
)
root.roles.create(my_role)
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE serverless_task_creation;
from snowflake.core.role import Securable
root.session.use_role("ACCOUNTADMIN")
root.roles['serverless_task_creation'].grant_privileges(
privileges=["CREATE TASK"], securable_type="schema", securable=Securable(name='schema1')
)
GRANT EXECUTE MANAGED TASK ON ACCOUNT
TO ROLE serverless_task_creation;
root.roles['serverless_task_creation'].grant_privileges(
privileges=["EXECUTE MANAGED TASK"], securable_type="account"
)
Criação de uma função personalizada para administrar tarefas¶
Crie uma função personalizada e com o privilégio EXECUTE TASK, e conceda essa função personalizada a qualquer função de proprietário de tarefa para permitir a alteração de suas próprias tarefas. Para remover a capacidade de o proprietário executar a tarefa, revogue esta função personalizada da função de proprietário de tarefa.
Por exemplo, crie um nome de função personalizado taskadmin
e conceda a essa função o privilégio EXECUTE TASK. Atribua a função taskadmin
a uma função de proprietário de tarefa chamada myrole
:
USE ROLE securityadmin;
CREATE ROLE taskadmin;
from snowflake.core.role import Role
root.session.use_role("securityadmin")
root.roles.create(Role(name="taskadmin"))
Definia a função ativa para ACCOUNTADMIN antes de conceder privilégios ao nível de conta para a nova função.
USE ROLE accountadmin;
GRANT EXECUTE TASK, EXECUTE MANAGED TASK ON ACCOUNT TO ROLE taskadmin;
root.session.use_role("accountadmin")
root.roles['taskadmin'].grant_privileges(
privileges=["EXECUTE TASK", "EXECUTE MANAGED TASK"], securable_type="account"
)
Defina a função ativa para SECURITYADMIN para mostrar que esta função pode conceder uma função a outra função.
USE ROLE securityadmin;
GRANT ROLE taskadmin TO ROLE myrole;
from snowflake.core.role import Securable
root.session.use_role("securityadmin")
root.roles['myrole'].grant_role(role_type="ROLE", role=Securable(name='taskadmin'))
Para obter mais informações sobre a criação de funções personalizadas e hierarquias de funções, consulte Configuração do controle de acesso.
Descarte de uma função de proprietário de tarefa¶
Quando você exclui a função de proprietário de uma tarefa, a tarefa transfere a propriedade para a função que removeu a função de proprietário. Quando uma tarefa transfere a propriedade, ela é pausada automaticamente e novas execuções não são agendadas até que o novo proprietário retome a tarefa.
Se você descartar a função enquanto a tarefa estiver em execução, a execução da tarefa concluirá o processamento na função descartada.
Execução de tarefa de serviço do sistema¶
O Snowflake executa tarefas com os privilégios do proprietário da tarefa, mas as execuções de tarefa não estão associadas a um usuário. Ao invés disso, cada execução é realizada por um serviço de sistema. As tarefas são desacopladas de usuários específicos para evitar complicações que podem surgir quando os usuários são descartados, bloqueados devido a problemas de autenticação ou têm suas funções removidas.
Como as execuções de tarefas são desacopladas de um usuário, o histórico de consultas das execuções de tarefas está associado ao serviço do sistema. Como tal, não há credenciais de usuário para este serviço, e nenhum indivíduo pode assumir sua identidade. A atividade para o serviço do sistema é limitada à sua conta. As mesmas proteções de criptografia e outros protocolos de segurança são incorporados a este serviço, assim como são aplicados para outras operações.
DDL de tarefas¶
Para oferecer suporte à criação e ao gerenciamento de tarefas, o Snowflake oferece o seguinte conjunto de operações DDL especiais:
Além disso, os provedores podem visualizar, conceder ou revogar o acesso aos objetos de banco de dados necessários para ELT usando o seguinte DDL de controle de acesso padrão:
Métodos DatabaseRoleResource:
grant_future_privileges
grant_privileges
grant_privileges_on_all
grant_role
iter_future_grants_to
iter_grants_to
revoke_future_privileges
revoke_grant_option_for_future_privileges
revoke_grant_option_for_privileges
revoke_grant_option_for_privileges_on_all
revoke_privileges
revoke_privileges_on_all
revoke_role
Métodos RoleResource (função da conta):
grant_future_privileges
grant_privileges
grant_privileges_on_all
grant_role
iter_future_grants_to
iter_grants_of
iter_grants_on
iter_grants_to
revoke_future_privileges
revoke_grant_option_for_future_privileges
revoke_grant_option_for_privileges
revoke_grant_option_for_privileges_on_all
revoke_privileges
revoke_privileges_on_all
revoke_role
Métodos UserResource:
grant_role
iter_grants_to
revoke_role
Funções de tarefa¶
Para apoiar a recuperação de informações sobre tarefas, o Snowflake fornece o seguinte conjunto de funções: