Introdução às tarefas

As tarefas são uma maneira poderosa de automatizar o processamento de dados e otimizar procedimentos de negócios em seu pipeline de dados.

As tarefas podem ser executadas em horários agendados ou podem ser acionadas por eventos, como quando novos dados chegam em um fluxo.

As tarefas podem executar comandos SQL e procedimentos armazenados que usam linguagens e ferramentas aceitas, incluindo JavaScript Python, Java, Scala e script Snowflake.

Para fluxos de trabalho complexos, você pode criar sequências de tarefas chamadas gráficos de tarefas. Os gráficos de tarefas podem usar lógica para executar comportamento dinâmico, executando tarefas em paralelo ou em série.

Neste tópico:

Limitações

Visão geral do fluxo de trabalho de criação de tarefas

  1. Crie uma função de administrador de tarefa que possa executar os comandos nas etapas a seguir.

  2. Defina uma nova tarefa usando CREATE TASK.

  3. Teste manualmente as tarefas usando EXECUTE TASK.

  4. Permita que a tarefa seja executada continuamente usando ALTER TASK … RESUME.

  5. Monitore os custos das tarefas

  6. Refine a tarefa conforme necessário usando ALTER TASK.

Para obter informações sobre a execução de tarefas, consulte:

Definir recursos de computação

As tarefas exigem recursos de computação para executar instruções e procedimentos. Você pode escolher entre os dois modelos a seguir:

Tarefas sem servidor

Com este modelo, você define quando deseja que a tarefa seja executada, e o Snowflake prevê e atribui os recursos de computação necessários para concluí-la nesse período. A previsão é baseada em uma análise dinâmica das 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 XXLARGE.

Criação de uma tarefa usando o modelo de computação sem servidor

Use CREATE TASK para definir a tarefa. Não inclua 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, consulte Segurança de tarefas.

O exemplo a seguir cria uma tarefa que é executada a cada hora.

CREATE TASK SCHEDULED_T1
  SCHEDULE='60 MINUTES'
  AS SELECT 1;
Copy
Diagrama que ilustra o modelo de computação de tarefas sem servidor.

Custo e desempenho: tamanhos de warehouse

Para garantir que as tarefas sem servidor sejam executadas com eficiência, você pode definir os tamanhos mínimo e máximo de warehouse <label-warehouse_size> definindo os seguintes parâmetros:

  • SERVERLESS_TASK_MIN_STATEMENT_SIZE: o tamanho mínimo do warehouse para desempenho previsível (padrão: XSMALL).

  • SERVERLESS_TASK_MAX_STATEMENT_SIZE: o tamanho máximo do warehouse para evitar custos inesperados (padrão: XXLARGE).

Após a conclusão de uma tarefa, o Snowflake analisa o desempenho e ajusta os recursos de computação para execuções futuras dentro desses limites.

O exemplo a seguir mostra uma tarefa executada a cada 30 segundos, com um tamanho mínimo de warehouse de SMALL e um tamanho máximo de warehouse de LARGE.

CREATE TASK SCHEDULED_T2
  SCHEDULE='30 SECONDS'
  SERVERLESS_TASK_MIN_STATEMENT_SIZE='SMALL'
  SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
  AS SELECT 1;
Copy

Intervalo de conclusão desejado

Você pode definir uma meta anterior para a conclusão de uma tarefa sem servidor. Um intervalo de conclusão desejado é necessário para tarefas acionadas sem servidor.

Quando definido, o Snowflake estima e dimensiona os recursos para serem concluídos dentro do intervalo de conclusão desejado. Quando uma tarefa já atingiu o tamanho máximo de warehouse e está sendo executada por muito tempo, o intervalo de conclusão desejado é ignorado.

No exemplo a seguir, uma tarefa é executada todos os dias à meia-noite, com a meta de conclusão às duas da manhã. O horário de início e o fuso horário são definidos por USING CRON. Se a tarefa atingir o maior tamanho de warehouse, ela poderá ser executada por até três horas antes de finalmente atingir um tempo limite.

CREATE TASK SCHEDULED_T3
  SCHEDULE='USING CRON 0 * * * * America/Los_Angeles'
  TARGET_COMPLETION_INTERVAL='120 MINUTE'
  SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
  USER_TASK_TIMEOUT_MS = 10800000         -- (3 hours)
  SUSPEND_TASK_AFTER_NUM_FAILURES = 3
  AS SELECT 1;
Copy
Diagrama mostrando uma tarefa sem servidor agendada diariamente entre meia-noite e duas da manhã

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.

Escolher um warehouse

Ao escolher um warehouse, considere o seguinte:

  • Revise as práticas recomendadas em Considerações sobre warehouses.

  • Analise os tempos médios de execução de tarefas usando diferentes warehouses com base no clustering e no tamanho do warehouse. Para obter mais informações, consulte Duração da tarefa.

  • Se o warehouse for compartilhado por vários processos, considere o impacto da tarefa em outras cargas de trabalho.

Criar uma tarefa usando o modelo de computação gerenciado pelo usuário

Use CREATE TASK e inclua 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, consulte Segurança de tarefas.

O exemplo a seguir cria uma tarefa que é executada a cada hora.

CREATE TASK SCHEDULED_T1
  WAREHOUSE='COMPUTE_WH'
  SCHEDULE='60 MINUTES'
  AS SELECT 1;
Copy

Recomendações para a escolha de um modelo de cálculo

A tabela a seguir descreve vários fatores que podem ajudar você a decidir quando usar tarefas sem servidor versus tarefas gerenciadas pelo usuário:

Categoria

Tarefas sem servidor

Tarefas gerenciadas pelo usuário

Notas

Número, duração e previsibilidade de cargas de trabalho de tarefas simultâneas

Recomendado para warehouses subutilizados com poucas tarefas sendo executadas simultaneamente ou concluídas rapidamente.

As tarefas com execuções relativamente estáveis são boas candidatas para tarefas sem servidor.

Recomendado para warehouses totalmente utilizados com múltiplas tarefas simultâneas.

Também recomendado para cargas imprevisíveis nos recursos de computação. Warehouses multicluster com suspensão automática e retomada automática habilitadas podem ajudar a reduzir seu consumo de crédito.

Para tarefas sem servidor, o Snowflake faz o faturamento sua conta com base no uso real dos recursos de computação.

Para tarefas gerenciadas pelo usuário, o faturamento dos warehouses é baseado no tamanho do warehouse, com um mínimo de 60 segundos cada vez que o warehouse é retomado.

Intervalo programado

Recomendado quando o cumprimento do intervalo programado é altamente importante.

Se a execução de uma tarefa autônoma ou de um gráfico de tarefa agendada exceder o intervalo, o Snowflake aumentará o tamanho dos recursos de computação.

Recomendado quando o cumprimento do intervalo programado é menos importante.

Intervalo de agendamento refere-se ao intervalo de tempo entre execuções agendadas de uma tarefa autônoma ou da tarefa raiz em um gráfico de tarefas.

Aumentar os recursos de computação pode reduzir o tempo de execução de alguns códigos SQL, mas não de todos. Isso não garante que a execução de uma tarefa seja concluída dentro da janela do lote.

O tamanho máximo para uma execução de tarefa sem servidor é equivalente a um warehouse XXLARGE. Se a carga de trabalho de uma tarefa exigir um warehouse maior, crie uma tarefa gerenciada pelo usuário com um warehouse do tamanho exigido.

Definir cronogramas ou acionadores

Uma tarefa pode ser definida para ser executada em um cronograma fixo ou pode ser acionada por um evento, por exemplo, quando um fluxo tiver novos dados.

Quando uma tarefa é criada, ela inicia como suspensa. Para permitir que uma tarefa siga um agendamento ou detecte eventos continuamente, use ALTER TASK … RESUME. Para executar a tarefa uma vez, use EXECUTE TASK.

Executar uma tarefa em um cronograma fixo

Para executar tarefas com um agendamento fixo, defina o agendamento ao criar ou alterar a tarefa usando CREATE TASK ou ALTER TASK, ou editando a tarefa no Snowsight, usando o parâmetro SCHEDULE.

O Snowflake garante que apenas uma instância de uma tarefa com agendamento seja executada por vez. Se uma tarefa ainda estiver em execução quando ocorrer o próximo horário de execução agendado, esse horário agendado será ignorado.

O exemplo a seguir cria uma tarefa que é executada a cada 10 segundos:

CREATE TASK task_runs_every_10_seconds
  SCHEDULE='10 SECONDS'
  AS SELECT 1;
Copy

Para definir um cronograma com base em um horário ou dia específico, use o parâmetro SCHEDULE =”USING CRON…”.

O exemplo a seguir cria uma tarefa que é executada todos os domingos às três da manhã, usando o fuso horário Américas/Los Angeles:

CREATE TASK task_sunday_3_am_pacific_time_zone
  SCHEDULE='USING CRON 0 3 * * SUN America/Los_Angeles'
AS SELECT 1;
Copy

Para obter mais informações, consulte CREATE TASK … SCHEDULE.

Executar uma tarefa sempre que um fluxo tiver novos dados

Para executar tarefas sempre que um fluxo definido </user-guide/streams-intro> tiver novos dados, use Tarefas acionadas. Essa abordagem é útil para fluxos de trabalho de extração, carregamento e transformação (ELT), pois elimina a consulta frequente à fonte quando a chegada de novos dados é imprevisível. Ela também reduz a latência, processando os dados imediatamente. Por exemplo:

CREATE TASK triggered_task_stream
  WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
  AS
    INSERT INTO completed_promotions
    SELECT order_id, order_total, order_time, promotion_id
    FROM orders_stream;
Copy

Para obter mais informações, consulte Tarefas acionadas.

Executar em um cronograma, mas somente se um fluxo tiver novos dados

Você pode combinar uma tarefa agendada com uma tarefa acionada. Por exemplo, o código a seguir cria uma tarefa que verifica se há novos dados em um fluxo a cada hora:

CREATE TASK triggered_task_stream
  SCHEDULE = '1 HOUR'
  WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
  AS SELECT 1;
Copy

Definir o que acontece quando uma tarefa falha

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.

Definir parâmetros de sessão adicionais

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.

Para definir parâmetros de sessão para uma tarefa, adicione o parâmetro à definição da tarefa com CREATE TASK ou modifique a tarefa usando ALTER TASK … SET. Exemplos:

CREATE TASK my_task
  SCHEDULE = 'USING CRON 0 * * * * UTC'
  TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
  AS
    INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);
Copy
ALTER TASK my_task
  SET USER_TASK_TIMEOUT_MS = 10000  -- Changes maximum runtime to 10 seconds
Copy

Tarefas em execução

Esta seção descreve as diferentes maneiras pelas quais uma tarefa pode ser programada e executada, e como a versão de uma tarefa é determinada.

Execução manual de uma tarefa

Depois de configurar uma nova tarefa e seus parâmetros usando CREATE TASK ou ALTER TASK, você pode iniciar uma única execução da tarefa usando EXECUTE TASK. Esse comando é útil para testar tarefas novas ou modificadas.

Nota

  • Você pode chamar este comando SQL diretamente em scripts ou em procedimentos armazenados.

  • Esse comando oferece suporte à integração de tarefas em pipelines de dados externos.

  • Qualquer serviço de terceiros que possa se autenticar na sua conta Snowflake e autorizar ações SQL pode executar tarefas com o comando EXECUTE TASK.

Controle de versão de execuções de tarefas

Quando uma tarefa autônoma é retomada ou executada manualmente pela primeira vez, uma versão inicial da tarefa é definida. A tarefa autônoma ou é executada utilizando esta versão. Depois que uma tarefa é 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 estava em vigor quando a tarefa iniciou a 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).

Visualização do histórico de tarefas para sua conta

Você pode visualizar o histórico de tarefas da sua conta usando SQL ou o Snowsight.

Para visualizar o histórico de tarefas no Snowsight, consulte Exibição do histórico de tarefas.

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 visualizar detalhes sobre uma execução de gráfico de tarefas que está agendada ou em execução:

SQL:

Consulte a função de tabela CURRENT_TASK_GRAPHS (no Snowflake Information Schema).

Para visualizar o histórico de execuções de gráfico de tarefas que foram concluídas 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 o código SQL variam dependendo da origem dos recursos de computação da tarefa:

Warehouse gerenciado pelo usuário

O Snowflake cobra da sua conta o uso de créditos com base 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.

  • Configure Tarefas acionadas para tarefas que só precisam ser executadas em determinadas condições, como quando um fluxo de dados tem novos dados.

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

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

Monitoramento de custo

As tarefas sem servidor geram um custo de computação quando em uso. Você pode usar exibições relacionadas ao custo nos esquemas ACCOUNT_USAGE e ORGANIZATION_USAGE para rastrear os custos associados às tarefas sem servidor. Ao consultar essas exibições, filtre a coluna service_type para encontrar os valores SERVERLESS_TASK ou SERVERLESS_TASK_FLEX.

Exibição

Esquema

service_type

Funções com privilégios necessários

METERING_HISTORY

ACCOUNT_USAGE

SERVERLESS_TASK

Função ACCOUNTADMIN função de banco de dados USAGE_VIEWER

METERING_DAILY_HISTORY

ACCOUNT_USAGE

SERVERLESS_TASK

Função ACCOUNTADMIN função de banco de dados USAGE_VIEWER

METERING_DAILY_HISTORY

ORGANIZATION_USAGE

SERVERLESS_TASK

Função ACCOUNTADMIN função de banco de dados USAGE_VIEWER

USAGE_IN_CURRENCY_DAILY

ORGANIZATION_USAGE

SERVERLESS_TASK

Função ORGADMIN função GLOBALORGADMIN função de banco de dados ORGANIZATION_USAGE_VIEWER

Exemplo: veja o custo total da conta gerado pelas tarefas sem servidor em toda a organização.

Exemplo: veja o custo total da conta gerado pela tarefa sem servidor entre 1º de dezembro de 2024 e 31 de dezembro de 2024.

SELECT
 name,
 SUM(credits_used_compute) AS total_credits
FROM
  SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY
WHERE
 service_type ILIKE '%SERVERLESS_TASK%'
 AND start_time >= '2024-12-01'
 AND end_time <= '2024-12-31'
GROUP BY
 name
ORDER BY
 name ASC;
Copy

Exemplo: veja o custo total da conta gerado pelas tarefas sem servidor em toda a organização.

SELECT
  usage_date AS date,
  account_name,
  SUM(usage) AS credits,
  currency,
  SUM(usage_in_currency) AS usage_in_currency
FROM
  SNOWFLAKE.ORGANIZATION_USAGE.USAGE_IN_CURRENCY_DAILY
WHERE
  USAGE_TYPE ILIKE '%SERVERLESS_TASK%'
GROUP BY
  usage_date, account_name, currency
ORDER BY
  USAGE_DATE DESC;
Copy

Para obter informações sobre quantos créditos são cobrados por hora de computação para a operação do Trust Center, consulte a tabela 5 em Snowflake Service Consumption Table.

Duração da tarefa

A duração da tarefa inclui o tempo desde o momento em que uma tarefa é agendada para iniciar até quando ela é concluída. Essa duração inclui estes dois itens:

  • Tempo de espera: o tempo que uma tarefa gasta aguardando a disponibilidade de recursos de computação antes de começar. Para calcular o tempo de espera, consulte Exibição TASK_HISTORY e compare SCHEDULED_TIME com QUERY_START_TIME.

  • Tempo de execução: o tempo gasto pela tarefa para executar as instruções SQL ou outras operações. Para calcular o tempo de execução, consulte Exibição TASK_HISTORY e compare QUERY_START_TIME com COMPLETED_TIME.

Por exemplo, o diagrama a seguir mostra uma tarefa sem servidor agendada para ser executada a cada 15 segundos. A duração total da execução desta tarefa é de 12 segundos, incluindo 5 segundos de tempo de espera e 7 segundos de tempo de execução.

Um diagrama de uma tarefa, incluindo um tempo de espera de 5 segundos e um tempo de execução de 7 segundos. A tarefa está agendada para ser executada a cada 15 segundos.

Tempo limite

Se a execução de uma tarefa exceder o tempo programado ou o intervalo de conclusão de destino, por padrão, a tarefa continuará a ser executada até ser concluída, atingir o tempo limite ou falhar.

Quando STATEMENT_TIMEOUT_IN_SECONDS e USER_TASK_TIMEOUT_MS são definidos, o tempo limite é o menor valor diferente de zero dos dois parâmetros.

Quando ambos STATEMENT_QUEUED_TIMEOUT_IN_SECONDS e USER_TASK_TIMEOUT_MS são definidos, o valor de USER_TASK_TIMEOUT_MS tem precedência.

Para obter informações sobre tempo limite com gráficos de tarefas, consulte Tempo limite do gráfico de tarefas.

Considerações

  • Para tarefas sem servidor, o Snowflake dimensiona automaticamente os recursos para garantir que as tarefas sejam concluídas dentro de um intervalo de conclusão desejado, incluindo o tempo de fila.

  • Para tarefas gerenciadas pelo usuário, é comum haver períodos mais longos de fila quando as tarefas são programadas para serem executadas em um warehouse compartilhado ou ocupado.

Segurança de tarefas

Para executar tarefas, você deve 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.';
Copy
USE ACCOUNTADMIN;

GRANT CREATE TASK
  ON SCHEMA schema1
  TO ROLE warehouse_task_creation;
Copy
GRANT USAGE
  ON WAREHOUSE warehouse1
  TO ROLE warehouse_task_creation;
Copy

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.';
Copy
USE ACCOUNTADMIN;

GRANT CREATE TASK
  ON SCHEMA schema1
  TO ROLE serverless_task_creation;
Copy
GRANT EXECUTE MANAGED TASK ON ACCOUNT
  TO ROLE serverless_task_creation;
Copy

Criação de uma função personalizada para administrar tarefas

Crie uma função personalizada, conceda a ela o privilégio EXECUTE TASK e, em seguida, conceda essa função personalizada a qualquer função de proprietário da tarefa para permitir a alteração de suas próprias tarefas. Para remover a capacidade da função de proprietário da tarefa de executar a tarefa, revogue essa função personalizada da função de proprietário da 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;
Copy

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

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

Para obter mais informações sobre como criar 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 de tarefas não são agendadas até que o novo proprietário a retome.

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.

Tarefas executadas por um serviço do sistema

Por padrão, as tarefas são executadas como um serviço do sistema desacoplado de um usuário.

O serviço do sistema executa a tarefa usando os mesmos privilégios do proprietário da tarefa.

Isso evita complicações associadas ao gerenciamento de usuários: por exemplo, se um usuário for removido, bloqueado devido a problemas de autenticação ou tiver funções removidas, a tarefa continuará sendo executada sem interrupção.

O histórico de consultas para execuções de tarefas está associado ao serviço do sistema. Não há credenciais de usuário para esse 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.

Executar tarefas com privilégios de usuário

As tarefas podem ser configuradas para serem executadas com os privilégios de um usuário específico, além dos privilégios da função de proprietário da tarefa. Tarefas que especificam EXECUTE AS USER são executadas em nome do usuário nomeado, em vez do serviço do sistema.

  • Gerenciar privilégios de múltiplas funções: em situações em que os usuários têm funções secundárias, eles podem executar uma tarefa usando os privilégios combinados de suas funções primária e secundária. Esta configuração garante que a tarefa tenha as permissões necessárias para acessar todos os recursos necessários.

  • Aproveitar as políticas de acesso a linhas e mascaramento de dados baseado em usuário: em situações em que as políticas de governança de dados consideram o usuário que faz a consulta, executar uma tarefa como um usuário garante que ela seja compatível com as políticas aplicáveis.

  • Fornecer responsabilidade por todas as operações: todas as instâncias de uma tarefa executadas com EXECUTE AS USER são atribuídas ao usuário configurado em vez do usuário SYSTEM. Essa atribuição ajuda a manter uma trilha de auditoria clara para todas as operações.

Controle de acesso

A função de proprietário da tarefa deve receber o privilégio IMPERSONATE no usuário especificado por EXECUTE AS USER, e o usuário especificado deve receber a função de proprietário da tarefa.

Quando a tarefa for executada, a função principal da sessão da tarefa será a função de proprietário da tarefa, e as funções secundárias padrão do usuário serão ativadas. Os usuários poderão alternar as funções principais com o comando USE ROLE e ajustar as funções secundárias na sessão de tarefas com o comando USE SECONDARY ROLES.

Compartilhar tarefas usando um usuário de serviço e uma função

Para ambientes de produção, recomendamos criar um usuário de serviço separado para representar sua equipe ou processo de negócios. Ao contrário de executar como um usuário de serviço ou pessoa existente, essa prática recomendada ajuda a tornar o fluxo de trabalho mais seguro:

  • Quando uma tarefa é executada como um usuário de serviço dedicado, ela obtém acesso apenas aos privilégios pretendidos. Se, em vez disso, um usuário se passar por um usuário diferente, ele obtém acesso a todos os privilégios associados ao outro usuário, o que pode incluir privilégios não pretendidos, incluindo privilégios de usuário concedidos após a criação e retomada da tarefa.

  • Uma tarefa executada como um usuário pode ser interrompida se a pessoa sair do departamento ou da organização.

Exemplos: Configurar o usuário de serviço e a função de equipe

  1. Usando a função de administrador, configure um usuário de serviço a ser usado para a tarefa.

    O exemplo a seguir cria um usuário de serviço chamado task_user:

    USE ROLE ACCOUNTADMIN;
    CREATE USER task_user;
    
    Copy
  2. Crie uma função de tarefa e conceda-a ao usuário de serviço:

    CREATE ROLE task_role;
    GRANT ROLE task_role to USER task_user;
    
    Copy
  3. Permita que a função de tarefa execute consultas em nome da função de usuário da equipe:

    GRANT IMPERSONATE ON USER task_user TO ROLE task_role;
    
    Copy
  4. Conceda os privilégios apropriados à função de tarefa.

    USE ROLE ACCOUNTADMIN;
    
    -- Grant the team role the privileges to create tasks in a specific schema
    GRANT CREATE TASK
      ON SCHEMA schema1
      TO ROLE task_role;
    
    -- Grant the team role the privileges to use a specific warehouse
    GRANT USAGE
      ON WAREHOUSE warehouse1
      TO ROLE task_role;
    
    -- Grant the team role the privileges to run tasks on a serverless compute model
    GRANT EXECUTE MANAGED TASK ON ACCOUNT TO ROLE task_role;
    
    Copy

Executar uma tarefa em nome de um usuário de serviço

Após a função de equipe assumir a propriedade da tarefa, os membros da equipe poderão modificá-la e executá-la em nome do usuário de serviço.

Exemplo:

USE ROLE task_owner;

CREATE TASK team_task
  SCHEDULE='12 HOURS'
  EXECUTE AS USER task_user
  AS SELECT 1;
Copy

No exemplo anterior, os logs resultantes mostrariam que task_user modificou a tarefa.

(Somente para teste) Permitir que um usuário se passe diretamente por outro

Ao testar ou criar protótipos de alterações, você, como administrador, pode permitir que usuários se passem diretamente por outro usuário. Esse cenário, embora aceito, não é recomendado em um ambiente de produção.

  1. Configure uma função para representação:

    USE ROLE ACCOUNTADMIN;
    CREATE ROLE janes_role;
    GRANT ROLE janes_role to USER jane;
    GRANT IMPERSONATE ON USER jane TO ROLE janes_role;
    
    Copy
  2. Crie uma tarefa usando a nova função:

    USE ROLE janes_role;
    
    CREATE TASK janes_task
      SCHEDULE='60 M' AS SELECT 1;
    
    Copy
  3. Conceda a função a outro usuário.

    No exemplo a seguir, a usuária Jane concede acesso ao usuário Billy:

    --Logged in as Jane or account admin
    GRANT ROLE janes_role to USER billy;
    
    Copy
  4. O outro usuário modifica a tarefa.

    No exemplo a seguir, o usuário Billy modifica a tarefa:

    -- Logged in as billy
    USE ROLE janes_role;
    
    ALTER TASK janes_task
      SET EXECUTE AS USER jane;
    
    Copy
  5. Revise os logs.

    O comando SHOW GRANTS TO ROLE mostraria que Jane concedeu a função a Billy. A exibição QUERY_HISTORY mostraria que Billy modificou a tarefa. Execuções futuras de tarefas ainda apareceriam como executadas por Jane.

    USE ROLE ACCOUNTADMIN;
    
    SHOW GRANTS TO ROLE janes_role;
    
    QUERY_HISTORY()
      WHERE QUERY_TEXT ILIKE '%janes_task%';
    
    Copy

Operações da linguagem de definição de dados (DDL) da tarefa

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:

Funções de tarefa

Para apoiar a recuperação de informações sobre tarefas, o Snowflake fornece o seguinte conjunto de funções:

Mais exemplos em Python

Para obter mais exemplos em Python, consulte Gerenciamento de tarefas e gráficos de tarefas do Snowflake com Python.