Introdução às tarefas¶
Use tarefas para automatizar, programar e otimizar procedimentos comerciais em seu pipeline de dados.
No Snowflake, uma tarefa pode executar uma chamada para um procedimento armazenado usando linguagens e ferramentas compatíveis como SQL, JavaScript, Python, Java, Scala ou Snowflake Scripting. Para obter mais exemplos de Python, consulte Gerenciamento de tarefas e gráficos de tarefas do Snowflake com Python.
Você pode combinar uma sequência de tarefas criando gráficos de tarefas. Os gráficos de tarefas podem usar a lógica para realizar um comportamento dinâmico, executando tarefas em paralelo ou em sequência.
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.
Teste manualmente as tarefas usando EXECUTE TASK.
Permita que a tarefa seja executada continuamente usando ALTER TASK … RESUME.
Refine a tarefa conforme necessário usando ALTER TASK.
Para obter informações sobre a execução de tarefas, consulte:
Atribuir 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 esse 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. 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.
Esse modelo é recomendado para tarefas que são executadas regularmente ou semirregularmente, como as seguintes:
Tarefas que sempre começam ao mesmo tempo.
Tarefas que só são executadas quando chegam novos dados. (Para obter mais informações, consulte Tarefas acionadas.)
Limitações¶
O tamanho máximo de computação para uma tarefa sem servidor é equivalente a um warehouse virtual XXLARGE.
O tempo total da tarefa pode incluir um atraso antes do início da tarefa. Para obter mais informações, consulte Duração da tarefa.
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: a janela de tempo em que a tarefa deve ser executada.
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.
Você pode definir o período de tempo de destino usando 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 de tempo que seja um fator menor do que o período de tempo desejado), o Snowflake reduzirá os recursos nas execuções subsequentes em um tamanho de warehouse até o SERVERLESS_TASK_MIN_STATEMENT_SIZE.
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. Quando SERVERLESS_TASK_MAX_STATEMENT_SIZE é atingido, as tarefas continuam (possivelmente excedendo o tempo de destino) até serem concluídas ou atingirem um tempo limite.
Exemplos¶
Exemplo 1: criar uma tarefa sem servidor para ser executada a cada hora. O Snowflake atribui recursos de computação sem servidor que são estimados para concluir a tarefa dentro do tempo programado.
CREATE TASK SCHEDULED_T1
SCHEDULE='60 MINUTES'
AS SELECT 1;
from datetime import timedelta
from snowflake.core.task import Cron, Task
tasks = root.databases["TEST_DB"].schemas["TEST_SCHEMA"].tasks
task = tasks.create(
Task(
name="SCHEDULED_T1",
definition="SELECT 1",
schedule=timedelta(minutes=60),),
),
)
Exemplo 2: criar uma tarefa sem servidor para ser executada todos os dias, começando à meia-noite e funcionando por 2 horas. O cronograma (usando CRON) define quando a tarefa começa, incluindo o fuso horário. O intervalo de conclusão de destino define quando a tarefa deve ser concluída. O Snowflake estima e atribui a computação sem servidor para que a tarefa seja concluída dentro do tempo programado.
CREATE TASK SCHEDULED_T2
SCHEDULE='USING CRON 0 * * * * America/Los_Angeles'
TARGET_COMPLETION_INTERVAL='120 MINUTE'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
AS SELECT 1;
from datetime import timedelta
from snowflake.core.task import Cron, Task
tasks = root.databases["TEST_DB"].schemas["TEST_SCHEMA"].tasks
task = tasks.create(
Task(
name="SCHEDULED_T2",
definition="SELECT 1",
schedule=Cron("0 * * * *", "America/Los_Angeles"),
target_completion_interval=timedelta(minutes=120),
serverless_task_max_statement_size="LARGE",
),
)
Exemplo 3: criar uma tarefa sem servidor programada uma vez por dia dentro de um intervalo de conclusão de destino e 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'
SERVERLESS_TASK_MIN_STATEMENT_SIZE='MEDIUM'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
AS SELECT 1;
from datetime import timedelta
from snowflake.core.task import Cron, Task
tasks = root.databases["TEST_DB"].schemas["TEST_SCHEMA"].tasks
task = tasks.create(
Task(
name="SCHEDULED_T3",
definition="SELECT 1",
schedule=Cron("0 0 * * *", "UTC"),
target_completion_interval=timedelta(minutes=180),
serverless_task_min_statement_size="MEDIUM",
serverless_task_max_statement_size="LARGE",
),
)
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.
Exemplo 4: criar uma tarefa sem servidor programada para ser executada a cada 10 segundos sem um intervalo de conclusão de destino:
CREATE TASK SCHEDULED_T4
SCHEDULE='10 SECONDS'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
AS SELECT 1;
from datetime import timedelta
from snowflake.core.task import Cron, Task
tasks = root.databases["TEST_DB"].schemas["TEST_SCHEMA"].tasks
task = tasks.create(
Task(
name="SCHEDULED_T4",
definition="SELECT 1",
schedule=timedelta(seconds=10),
serverless_task_max_statement_size="LARGE",
),
)
Com essa configuração, a tarefa sem servidor é executada a cada 10 segundos. 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 obter mais informações, consulte Duração da tarefa.
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. |
O intervalo do cronograma refere-se ao intervalo de tempo entre as execuções agendadas de uma tarefa autônoma ou tarefa raiz em um gráfico de tarefa. Aumentar os recursos de computação pode reduzir o tempo de execução de alguns, mas não todos, códigos SQL, mas não garante que uma execução de 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.
Observação: mesmo que um cronograma ou acionador seja definido, a tarefa começa em um estado suspenso. Posteriormente, você pode iniciar uma única execução da tarefa usando EXECUTE TASK, ou permitir que ela seja executada continuamente usando ALTER TASK … RESUME.
Executar uma tarefa em um cronograma fixo¶
Para executar tarefas em um cronograma fixo, defina o cronograma ao criar ou alterar a tarefa usando CREATE TASK ou ALTER TASK, ou ao editar a tarefa na Snowsight, usando o parâmetro SCHEDULE.
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 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;
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 3h 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;
Para obter mais informações, consulte CREATE TASK … SCHEDULE.
Executar uma tarefa sempre que um fluxo tiver novos dados¶
Use Tarefas acionadas para executar tarefas sempre que um fluxo definido tiver novos dados, como nos fluxos de trabalho Extract, Load, Transform - ELT (extrair, carregar, transformar). 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. 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;
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 programada com uma tarefa acionada. Por exemplo, você pode definir uma tarefa para ser executada a cada hora, mas somente se o fluxo tiver novos dados. Exemplo:
CREATE TASK triggered_task_stream
SCHEDULE = '1 HOUR'
WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
AS SELECT 1;
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);
ALTER TASK my_task
SET USER_TASK_TIMEOUT_MS = 10000 -- Changes maximum runtime to 10 seconds
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 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).
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.
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>') ) );
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;
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 |
|
Funções com privilégios necessários |
---|---|---|---|
ACCOUNT_USAGE |
SERVERLESS_TASK |
Função ACCOUNTADMIN função de banco de dados USAGE_VIEWER |
|
ACCOUNT_USAGE |
SERVERLESS_TASK |
Função ACCOUNTADMIN função de banco de dados USAGE_VIEWER |
|
ORGANIZATION_USAGE |
SERVERLESS_TASK |
Função ACCOUNTADMIN função de banco de dados USAGE_VIEWER |
|
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;
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;
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 entre o momento em que uma tarefa está programada para começar e o momento em que a execução é concluída. Essa duração inclui os dois itens a seguir:
Tempo de fila: o tempo que uma tarefa gasta aguardando a disponibilidade de recursos de computação antes de iniciar a execução. Para calcular o tempo de fila, consulte Exibição TASK_HISTORY e compare SCHEDULED_TIME com QUERY_START_TIME.
Tempo de execução: o tempo que a tarefa leva para executar suas 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 que está programada para ser executada a cada 15 segundos. A duração total da execução dessa tarefa é de 12 segundos, o que inclui 5 segundos de tempo de fila e 7 segundos de tempo de execução.
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 ambos STATEMENT_TIMEOUT_IN_SECONDS e label-user_task_timeout_ms
são definidos, o tempo limite é o valor mais baixo 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 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, conceda a ela o privilégio EXECUTE TASK e, em seguida, 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: