Snowflake DevOps¶
O Snowflake DevOps permite que os desenvolvedores simplifiquem e automatizem o ciclo de vida de desenvolvimento de software para seus ambientes Snowflake. Com ênfase nas práticas recomendadas em CI/CD, automação de implantação e gerenciamento de infraestrutura, as ferramentas e práticas do Snowflake DevOps garantem uma integração suave entre as tarefas operacionais e de desenvolvimento.
Este guia oferece insights sobre como aproveitar os recursos do Snowflake para aprimorar a colaboração, manter a qualidade e obter uma entrega eficiente de software em seus projetos Snowflake.
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.
Você pode usar o comando CREATE OR ALTER para aplicar atualizações aos seus objetos Snowflake e manter sua conta sincronizada com a infraestrutura como código no Git. 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 Snowflake, você pode executar SQL a partir de um repositório Git no Snowflake. O script SQL pode ser um modelo Jinja2. 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 Snowflake Python APIs: Gerenciamento de objetos Snowflake com Python. |
|
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.
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.
Com o estágio do repositório, você pode criar uma função ou um procedimento do Snowpark a partir de um arquivo controlado por versão e executar diretamente os scripts SQL com EXECUTE IMMEDIATE FROM ou usar o Snowflake CLI para executar scripts Python. Dessa forma, você pode definir declarativamente objetos de banco de dados com SQL ou Python e, em seguida, implementar esses objetos com um pipeline CI/CD robusto e fácil de configurar.

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 o Jinja2, uma linguagem de modelos popular com recursos que vão desde a parametrização simples de scripts até a criação de scripts extensos e modulares em uma linguagem semelhante ao Python. O Snowflake oferece suporte à execução de scripts de modelos SQL com EXECUTE IMMEDIATE FROM. Como alternativa, o Snowflake CLI permite que você passe variáveis de ambiente para scripts Python.
Para alterar um destino de implantação, por exemplo, você substituiria o nome do banco de dados de destino por uma variável Jinja, como {{ environment }}
em scripts SQL ou uma variável de ambiente em scripts Python. Essa técnica é mostrada nos exemplos de código SQL e Python a seguir:
CREATE OR ALTER TASK {{ environment }}.my_schema.my_task
WAREHOUSE = my_warehouse
SCHEDULE = '60 minute'
AS select pi();
import os
from snowflake.core import Root, CreateMode
from datetime import timedelta
from snowflake.core.task import Task
my_task = Task(
name="my_task",
warehouse="my_warehouse",
definition="select pi()",
schedule=timedelta(minutes=60)
)
root = Root(Session.builder.getOrCreate())
tasks = root.databases[os.environ["environment"]].schemas["my_schema"].tasks
tasks.create(my_task, mode=CreateMode.or_replace)
Você pode executar os scripts parametrizados com o comando snow git execute
do Snowflake CLI. O CLI pode executar scripts em SQL, Python ou uma combinação de ambos diretamente do estágio do repositório dentro das proteções e dos recursos de desempenho da sua conta do Snowflake.
snow git execute @my_git_repo/branches/main/path/to/my_scripts" \
-D "environment='preprod'"
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 <objeto>, 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. Se preferir fazer seu trabalho de engenharia de dados em Python, a API Python de primeira classe do Snowflake permite que você faça o mesmo gerenciamento de recursos na linguagem em que é mais produtivo.
Automatização de trabalhos CI/CD nas ações do GitHub¶
Você pode usar GitHub Actions para automatizar os trabalhos que constituem um pipeline CI/CD. Com GitHub Actions ou executores semelhantes CI/CD, 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.
Instale facilmente o Snowflake CLI e conecte-se ao Snowflake com a ajuda da ação nativa Snowflake CLI GitHub.
Execute comandos no Snowflake usando o Snowflake CLI. Primeiro, busque as alterações mais recentes do seu repositório Git para o Snowflake. Em seguida, execute seus scripts declarativos e parametrizados para implementar as alterações em um ambiente de sua escolha.
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 seguintes comandos snow git
:
snow git fetch
puxa o mais recente do repositório GitHub para o estágio clonado do repositóriomy_git_repo
Git no Snowflake.snow git execute
executa scripts Python e SQL no diretório/scripts
a partir do ramomain
do repositório.
name: Deploy scripts to preprod
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
env:
SNOWFLAKE_CONNECTIONS_DEFAULT_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
SNOWFLAKE_CONNECTIONS_DEFAULT_USER: ${{ secrets.SNOWFLAKE_USER }}
SNOWFLAKE_CONNECTIONS_DEFAULT_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install snowflake-cli
uses: Snowflake-Labs/snowflake-cli-action@v1.5
with:
cli-version: "latest"
default-config-file-path: ".snowflake/config.toml"
- name: Fetch repository changes
run: snow git fetch my_git_repo
- name: Deploy scripts to preprod environment
run: snow git execute @my_git_repo/branches/main/scripts/* \
-D "environment='preprod'"
Introdução ao Snowflake DevOps¶
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.