Snowflake DevOps¶
Você pode combinar as ferramentas Snowflake com suas ferramentas existentes para construir processos DevOps para gerenciar códigos e dados com segurança e eficiência.
O que é Snowflake DevOps?¶
A Snowflake oferece uma abordagem integrada para acelerar os ciclos de vida de desenvolvimento e melhorar a produtividade geral das equipes de dados. Esta abordagem integra o controle de versão Git, APIs de Python, gerenciamento de objetos declarativos e automação contínua CI/CD.
Repositório Git para todas as suas fontes |
Ao manter seus ativos de dados, código e configurações gerenciados centralmente e controlados por versão, você pode garantir consistência, simplificar a colaboração e agilizar reversões, se necessário. O uso de seu repositório Git do Snowflake permite que você faça tudo isso dentro do perímetro seguro do Snowflake, o que é crucial para ambientes prontos para produção. |
Sintaxe declarativa |
Ao adotar uma abordagem declarativa para o gerenciamento de mudanças no banco de dados — definindo e gerenciando objetos Snowflake usando Python ou SQL — você elimina a necessidade de scripts complexos e ao mesmo tempo promove a legibilidade. |
Automação CI/CD |
Você pode fazer a integração com suas ferramentas de CI/CD existentes ou Snowflake CLI para executar comandos automaticamente e orquestrar todo o seu pipeline para implantações eficientes e confiáveis. |
Quais são os elementos básicos do Snowflake DevOps?¶
O Snowflake oferece vários recursos que se integram para tornar as tarefas de DevOps mais simples e seguras.
CREATE OR ALTER para tabelas ou tarefas. |
Você pode usar o comando CREATE OR ALTER para aplicar atualizações para consistência em objetos de banco de dados, simplificando o gerenciamento de alterações no banco de dados. Para obter mais informações, consulte Gerenciamento de alterações com código declarativo e controle de versão. |
Com o comando EXECUTE IMMEDIATE FROM do Snowflake, você pode executar código SQL e Python de um repositório Git no Snowflake. Para obter mais informações, consulte Parametrização de scripts com modelos Jinja. |
|
Em scripts para conduzir seu pipeline CI/CD, você pode executar comandos do Snowflake CLI para automatizar implantações, colaborar com o controle de versão e fazer a integração com outras ferramentas CI/CD. Para obter mais informações, consulte Automatização de trabalhos CI/CD nas ações do GitHub. |
|
Usando as APIs de Python do Snowflake, você pode gerenciar recursos do Snowflake, incluindo bancos de dados, esquemas, tabelas e tarefas. Para obter mais informações, consulte Orquestração da execução do código Snowflake com tarefas Snowflake. |
|
Você pode buscar a configuração do projeto e os pipelines de dados (esquema, tabelas, scripts) de um repositório Git para acionar o fluxo de trabalho de implantação. Para obter mais informações, consulte Simplifique os fluxos de trabalho mantendo os ativos em um repositório Git conectado ao Snowflake. |
Uso de recursos do Snowflake em fluxos de trabalho de DevOps¶
Usando o Snowflake com suas ferramentas existentes, você pode atingir as seguintes metas de DevOps:
Simplifique os fluxos de trabalho mantendo os ativos em um repositório Git conectado ao Snowflake.
Você pode aproveitar seu investimento existente no Git conectando o repositório à sua conta Snowflake. Depois que essa conexão estiver estabelecida, com o repositório clonado localmente no próprio Snowflake, você poderá navegar e executar seu código diretamente no Snowflake.
Minimize o risco mantendo ambientes separados para desenvolvimento, testes e produção.
Ao usar bancos de dados Snowflake separados para cada ambiente, você pode minimizar o risco de alterações indesejadas que afetam os sistemas ativos. Para gerenciar implantações com mais facilidade, use scripts que parametrizam o processo de implantação.
Gerence alterações no banco de dados de forma controlada e repetível para desenvolvimento, teste e produção usando scripts e código declarativo.
Automatize os trabalhos de CI/CD, incluindo a implantação de código e dados, usando ações de GitHub.
Orquestre a execução do código Snowflake usando tarefas do Snowflake.
Nota
Com o Snowflake Extension for Visual Studio Code, você pode escrever e executar instruções de Snowflake SQL diretamente em código VS. Ao conectar o código VS ao mesmo repositório que você conectou ao Snowflake, você pode desenvolver o código localmente no código VS, manter seu trabalho no seu repositório Git e então acessar seu código de dentro do Snowflake.
Simplifique os fluxos de trabalho mantendo os ativos em um repositório Git conectado ao Snowflake¶
Você pode garantir consistência, simplificar a colaboração e agilizar reversões, se necessário, mantendo seus ativos de dados, código e configurações gerenciados centralmente e controlados por versão em um repositório Git e usando o repositório do Snowflake.
Você pode conectar sua conta Snowflake ao seu repositório Git para que o Snowflake possa executar código em arquivos clonados do repositório. O resultado é um estágio de repositório Git que representa um clone completo do seu repositório. De dentro do Snowflake, você pode acessar arquivos controlados por versão em um determinado commit, ramificação ou tag.
Por exemplo, com arquivos de repositório clonados no Snowflake, você pode usar o comando EXECUTE IMMEDIATE FROM para executar código em um arquivo clonado. Dessa forma, você pode criar declarativamente objetos de banco de dados com SQL e então executar este SQL de outro código, como uma ação GitHub.

Manutenção de ambientes separados para desenvolvimento, teste e produção¶
Ao manter ambientes separados para desenvolvimento, teste e produção, suas equipes podem isolar as atividades de desenvolvimento do ambiente de produção, reduzindo a probabilidade de consequências não intencionais e corrupção de dados.
Quando você separa fluxos de trabalho em vários ambientes, cada um obtém seu próprio banco de dados Snowflake — normalmente uma cópia idêntica.
Parametrização de scripts com modelos Jinja¶
Para dar suporte à implantação e execução de código de maneiras essencialmente idênticas entre ambientes de desenvolvimento e produção, você pode parametrizar referências a especificações do ambiente — como qual banco de dados usar durante a implantação. Dessa forma, você pode habilitar um pipeline de CI/CD para escolher o destino de implantação apropriado para o ambiente.
Para parametrizar scripts, você pode usar Jinja, uma linguagem de modelagem popular com recursos que vão desde a parametrização simples de scripts até a criação de scripts extensivos em uma linguagem semelhante ao Python. O Snowflake oferece suporte à execução de scripts de modelos SQL com EXECUTE IMMEDIATE FROM.
Para alterar um destino de implantação, por exemplo, você usaria a substituição de variáveis com Jinja. Nos scripts SQL, você indica uma variável Jinja com {{...}}
. Você pode fornecer um valor para uma variável na cláusula USING de EXECUTE IMMEDIATE FROM.
A seguinte linha de SQL usa uma variável Jinja {{environment}}
como um espaço reservado para uma parte do nome do banco de dados que diferencia este banco de dados de outros cujos nomes são semelhantes:
CREATE IF NOT EXISTS DATABASE MYDB_{{environment}};
Por exemplo, você pode usar o comando CREATE DATABASE de jobs.<job_id>.steps[*].run em um Github Action.
run:
snow sql -q "EXECUTE IMMEDIATE FROM @myco_common.public.my_repo/branches/main/deploy_parameterized_pipeline.sql USING (environment => 'prod', retention_time => 1)" \
Código neste fluxo de trabalho de GitHub Action inclui os seguintes comandos:
run
executa o comandosnow sql
do Snowflake CLI.snow sql
executa o conteúdo do arquivodeploy_parameterized_pipeline.sql
da ramificaçãomain
do repositório do GitHub clonado para o estágio do repositório do Gitrepository myco_common.public.my_repo
no Snowflake.deploy_parameterized_pipeline.sql
contém o comando CREATE DATABASE.
Com o Snowflake CLI, você pode criar, gerenciar, atualizar e visualizar aplicativos em execução no Snowflake em todas as cargas de trabalho.
Gerenciamento de alterações com código declarativo e controle de versão¶
Você pode gerenciar mais facilmente as alterações nos recursos do seu banco de dados com arquivos de configuração reutilizáveis no seu repositório Git.
Você pode definir objetos de banco de dados usando o comando CREATE OR ALTER, que cria o objeto ou o altera para corresponder à definição especificada pelo comando. Ao usar este comando a partir de um arquivo com controle de versão em um repositório, você pode reverter mais facilmente as alterações para uma versão anterior: você simplesmente executa uma versão anterior do arquivo.
CREATE OR ALTER TABLE vacation_spots (
city VARCHAR,
airport VARCHAR,
avg_temperature_air_f FLOAT,
avg_relative_humidity_pct FLOAT,
avg_cloud_cover_pct FLOAT,
precipitation_probability_pct FLOAT
) data_retention_time_in_days = 1;
from snowflake.core import Root
from snowflake.core.table import PrimaryKey, Table, TableColumn
my_table = root.databases["my_db"].schemas["my_schema"].tables["vacation_spots"].fetch()
my_table.columns.append(TableColumn(name="city", datatype="varchar", nullable=False]))
my_table.columns.append(TableColumn(name="airport", datatype="varchar", nullable=False]))
my_table.columns.append(TableColumn(name="avg_temperature_air_f", datatype="float", nullable=False]))
my_table.columns.append(TableColumn(name="avg_relative_humidity_pct", datatype="float", nullable=False]))
my_table.columns.append(TableColumn(name="avg_cloud_cover_pct", datatype="float", nullable=False]))
my_table.columns.append(TableColumn(name="precipitation_probability_pct", datatype="float", nullable=False]))
my_table_res = root.databases["my_db"].schemas["my_schema"].tables["vacation_spots"]
my_table_res.create_or_alter(my_table)
Nota
Você também pode usar o Snowflake Python APIs e Snowflake CLI para gerenciar os recursos do Snowflake.
Automatização de trabalhos CI/CD nas ações do GitHub¶
Conforme indicado brevemente em Parametrização de scripts com modelos Jinja, você pode usar ações GitHub para automatizar os trabalhos que constituem um canal CI/CD. Com GitHub Actions, você pode definir fluxos de trabalho que automatizam tarefas de criação, teste e implantação.
Nesses fluxos de trabalho, você pode usar outros recursos do Snowflake e GitHub para juntar as peças. Você pode executar as seguintes tarefas:
Armazene suas credenciais Snowflake em um segredo do GitHub para que GitHub Actions possam se conectar ao Snowflake.
Execute comandos no Snowflake usando o Snowflake CLI.
Use o Snowflake CLI para executar código contido em arquivos recuperados de um repositório Git conectado e mantidos pelo Snowflake.
O trecho do fluxo de trabalho do GitHub Actions no exemplo a seguir implanta um pipeline. O fluxo de trabalho é autenticado com o Snowflake recuperando os valores necessários de segredos configurados anteriormente.
Para implantar o pipeline, o fluxo de trabalho executa os dois seguintes comandos SQL com o comando snow sql
:
ALTER GIT REPOSITORY busca as últimas novidades do repositório do GitHub clonado para o estágio de repositório do Git
repository myco_common.public.my_repo
no Snowflake.EXECUTE IMMEDIATE FROM executa código no arquivo
deploy_parameterized_pipeline.sql
da ramificaçãomain
do repositório.
name: Deploy data pipeline to prod
# Controls when the action will run.
on:
push:
branches:
- main
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Python 3.10
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Install Python packages
run: pip install -r requirements.txt
- name: Deploy data pipeline
env:
SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_USER }}
SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}
SNOWFLAKE_ROLE: ${{ secrets.SNOWFLAKE_ROLE }}
SNOWFLAKE_WAREHOUSE: ${{ secrets.SNOWFLAKE_WAREHOUSE}}
run: |
snow sql -q "ALTER GIT REPOSITORY quickstart_common.public.quickstart_repo FETCH" --temporary-connection --account $SNOWFLAKE_ACCOUNT --user $SNOWFLAKE_USER --role $SNOWFLAKE_ROLE --warehouse $SNOWFLAKE_WAREHOUSE
snow sql -q "EXECUTE IMMEDIATE FROM @quickstart_common.public.quickstart_repo/branches/main/deploy_parameterized_pipeline.sql USING (environment => 'prod', retention_time => 1)" --temporary-connection --account $SNOWFLAKE_ACCOUNT --user $SNOWFLAKE_USER --role $SNOWFLAKE_ROLE --warehouse $SNOWFLAKE_WAREHOUSE
Orquestração da execução do código Snowflake com tarefas Snowflake¶
Você pode criar tarefas Snowflake para orquestrar a execução de instruções SQL no Snowflake. As tarefas incluem a capacidade de executar de acordo com um cronograma, tentar novamente, suspender após falhas e executar após outras tarefas específicas terem sido concluídas.
Com uma tarefa, você pode unir exibições, enviar notificações por e-mail, alimentar dados para outras partes do seu aplicativo e assim por diante.
Depois de criar uma tarefa que coordene essas instruções SQL, você pode executar a tarefa em uma única execução. Conforme mencionado em outra parte deste tópico, por exemplo, você pode executar uma tarefa incluindo EXECUTE TASK em um arquivo de repositório que você executa com EXECUTE IMMEDIATE FROM.
Para obter informações sobre como criar tarefas com SQL, consulte CREATE TASK.
Para obter informações sobre como criar tarefas usando uma API de Python, consulte Gerenciamento de tarefas e gráficos de tarefas do Snowflake com Python.
Você pode monitorar tarefas, incluindo o histórico de execução de tarefas, usando SQL ou Snowsight.
Para obter informações sobre tarefas de monitoramento com SQL, consulte Exibição TASK_HISTORY.
Para obter informações sobre tarefas de monitoramento em Snowsight, consulte Visualização de tarefas e gráficos de tarefa no Snowsight.
Para obter informações sobre como gerenciar tarefas usando uma API de Python, consulte Gerenciamento de tarefas e gráficos de tarefas do Snowflake com Python.
A tarefa no exemplo a seguir seleciona a partir de uma tabela vacation_spots
. Então, com base no resultado, a tarefa chama SYSTEM$SEND_EMAIL para enviar uma notificação por e-mail.
CREATE OR ALTER TASK email_notification
WAREHOUSE = 'quickstart_wh'
AFTER vacation_spots_update
AS
BEGIN
LET OPTIONS VARCHAR := (
SELECT TO_VARCHAR(ARRAY_AGG(OBJECT_CONSTRUCT(*)))
FROM vacation_spots
WHERE TRUE
AND punctual_pct >= 50
AND avg_temperature_air_f >= 70
-- STEP 5: INSERT CHANGES HERE
LIMIT 10);
IF (:OPTIONS = '[]') THEN
CALL SYSTEM$SEND_EMAIL(
'email_integration',
'<insert your email here>', -- INSERT YOUR EMAIL HERE
'New data successfully processed: No suitable vacation spots found.',
'The query did not return any results. Consider adjusting your filters.');
END IF;
LET QUERY VARCHAR := 'Considering the data provided below in JSON format, pick the best city for a family vacation in summer?
Explain your choice, offer a short description of the location and provide tips on what to pack for the vacation considering the weather conditions?
Finally, could you provide a detailed plan of daily activities for a one week long vacation covering the highlights of the chosen destination?\n\n';
LET RESPONSE VARCHAR := (SELECT SNOWFLAKE.CORTEX.COMPLETE('mistral-7b', :query || :options));
CALL SYSTEM$SEND_EMAIL(
'email_integration',
'<insert your email here>', -- INSERT YOUR EMAIL HERE
'New data successfully processed: The perfect place for your summer vacation has been found.',
:response);
EXCEPTION
WHEN EXPRESSION_ERROR THEN
CALL SYSTEM$SEND_EMAIL(
'email_integration',
'<insert your email here>', -- INSERT YOUR EMAIL HERE
'New data successfully processed: Cortex LLM function inaccessible.',
'It appears that the Cortex LLM functions are not available in your region');
END;
Para um passo a passo interativo sobre como usar o Snowflake DevOps, consulte o guia de início rápido Introdução ao Snowflake DevOps.