Snowflake DCM Projects

Os Snowflake DCM Projects (Database Change Management Projects) permitem uma abordagem declarativa para gerenciar objetos Snowflake como código. Você define o estado de destino desejado de seus bancos de dados, esquemas, tabelas e outros objetos nos arquivos de definição, e o Snowflake determina e aplica as alterações necessárias para atingir esse estado. Isso permite implantações repetíveis e controladas por versão nos ambientes, como desenvolvimento, preparação e produção, usando um fluxo de trabalho «planejar depois implantar» comum entre as ferramentas de infraestrutura como código.

Se as suas definições contiverem padrões repetitivos, será possível parametrizar seu código usando a modelagem Jinja, incluindo dicionários, loops, condições e macros.

Veja a seguir o fluxo de trabalho de alto nível para gerenciar um DCM project:

  1. Crie arquivos de DCM project (arquivos de definição manifest.yml e SQL) em um Snowflake Workspace, repositório Git remoto ou diretório local.

  2. Crie um novo DCM project para cada ambiente de destino.

  3. Defina objetos Snowflake nos arquivos de DCM project.

    Converta os scripts de implantação SQL existentes usando a palavra-chave DEFINE (para tipos de objetos compatíveis).

  4. (Opcional) Adicione variáveis e macros de modelagem compartilhadas ou alternativas.

  5. Execute o comando DCM PLAN para imitar uma implantação e visualizar as alterações.

  6. Implante a versão do projeto para aplicar as alterações ao Snowflake.

  7. Monitore as execuções do projeto.

  8. Faça a iteração em seu projeto DCM. Atualize os arquivos do projeto, revise a saída do plano e implante novas versões conforme necessário.

Esse ciclo de vida ajuda você a criar, testar, implantar e monitorar alterações no banco de dados de forma controlada, com versão e auditável.

O diagrama a seguir ilustra o ciclo de vida dos DCM Projects descrito acima.

Ciclo de vida do projeto DCM

Principais termos

Veja a seguir os principais termos que você deve saber ao trabalhar com os DCM Projects.

Definições declarativas

Nos DCM Projects, você define o estado desejado do seu ambiente Snowflake, como quais tabelas, esquemas ou funções devem existir, seja qual for o estado atual dos objetos. Você não especifica cada etapa para criá-los ou modificá-los. Você descreve o que deseja, e o Snowflake descobre como fazer isso acontecer.

Especificamente, os DCM Projects usam as instruções DEFINE com recursos de modelagem. Isso torna os arquivos de projeto reutilizáveis e personalizáveis para diferentes ambientes. A ordem e o local das instruções DEFINE em um projeto não afetam os resultados. O Snowflake coleta e classifica todas as instruções antes de aplicar as alterações, para que você não precise lidar manualmente com a sequenciação ou as dependências.

Arquivos do projeto DCM

Um DCM project é baseado em um conjunto de arquivos de origem SQL e YAML, geralmente gerenciados em um repositório Git ou em seu espaço de trabalho local. Você define os objetos Snowflake e seus atributos, relacionamentos e restrições para um DCM project nos arquivos de definição do projeto (arquivos SQL). Você atualiza os arquivos do projeto em um espaço de trabalho de desenvolvimento. As alterações só entram em vigor no Snowflake depois que você as implanta por meio de um objeto DCM project.

Objeto de projeto DCM

Um DCM project é um objeto no nível do esquema no Snowflake que você usa para implantar e gerenciar os objetos definidos nos arquivos de DCM project. Você precisa de um objeto DCM project para cada ambiente de destino.

O objeto DCM project é usado para executar comandos DCM e armazena os artefatos imutáveis e os arquivos de definição de todas as implantações executadas.

O DCM project é um objeto no nível do esquema, mas você pode usá-lo para criar e gerenciar objetos em outros bancos de dados. Você também pode executar um DCM project para efetuar dry run das alterações em seu fluxo de trabalho de modo que possa visualizá-las antes de implantá-las.

Requisitos

  • Use o Snowsight, a Snowflake CLI, o SQL ou a Cortex CLI para gerenciar DCM Projects.

  • Você precisa de um banco de dados e um esquema em que possa criar os objetos DCM project.

  • Armazene as definições do DCM project localmente ou no Snowflake Workspace.

  • Use o Git para colaboração, controle de versão e sincronização de alterações.

  • Se você quiser executar definições locais usando a Snowflake CLI, também precisará de privilégios para criar uma área de preparação temporária no objeto DCM project de destino.

Considerações e limitações

  • Tamanho do projeto

    • Atualmente, os DCM Projects oferecem suporte para até 1.000 arquivos de origem e 10.000 definições ou concessões renderizadas de objetos.

      Acima de 1.000 arquivos ou 10.000 definições, você pode enfrentar uma redução no desempenho e, em alguns casos, falha na execução.

      Consolidar as definições em menos arquivos costuma acelerar os tempos de execução dos comandos PLAN e DEPLOY.

      Esse limite será aumentado durante o período da versão preliminar pública, à medida que o desempenho e a escalabilidade continuam melhorando.

  • Conjunto de alterações

    Ambos os comandos PLAN e DEPLOY listam todas as alterações de DDL no arquivo plan_result.json. O conjunto de alterações lista as operações realizadas ou planejadas (CREATE, ALTER, DROP) e os atributos individuais afetados, como comentário, cronograma e tempo limite.

    Importante

    Durante a fase de versão preliminar dos DCM Projects, não é garantido que o conjunto de alterações capture todas as alterações granulares de todas as propriedades de cada objeto.

  • Modelagem

    • Como os arquivos de definição são modelos Jinja2, são aplicadas todas as limitações referentes aos modelos Jinja2.

    • As variáveis de modelagem do DCM não são destinadas a informações confidenciais, como credenciais. As definições SQL renderizadas não ocultam os valores inseridos pelas variáveis de ambiente.

Principais casos de uso dos DCM Projects

Esta seção descreve os principais casos de uso dos DCM Projects e como eles ajudam a lidar com os desafios que as empresas de dados enfrentam cada vez mais. Os casos de uso se enquadram em duas categorias gerais com base na responsabilidade da equipe:

DCM Projects para gerenciamento de infraestrutura

Os DCM Projects ajudam a resolver os seguintes desafios que as equipes de plataforma costumam enfrentar:

Desafios das equipes de plataforma

Quando as equipes de plataforma desejam implantar e manter uma infraestrutura padronizada para várias unidades de negócios, elas podem usar os DCM Projects para definir um conjunto padrão de objetos no código como arquivos SQL. E com o Jinja, esse modelo pode ser parametrizado, por exemplo, pelo nome da equipe, e implantado várias vezes.

Exemplo: Criar um DCM project dedicado para cada unidade de negócios

Uma abordagem é criar um DCM project dedicado para cada unidade de negócios, com todos os projetos fazendo referência aos mesmos arquivos de definição parametrizados, conforme mostrado no seguinte exemplo de definitions.sql:

DEFINE DATABASE {{team_name}}_DB;

DEFINE ROLE {{team_name}}_ADMIN;

DEFINE WAREHOUSE {{team_name}}_WH WITH
  warehouse_size = '{{wh_size}}'
  auto_suspend = 300;

GRANT OWNERSHIP ON DATABASE {{team_name}}_DB TO ROLE {{team_name}}_ADMIN;

GRANT OWNERSHIP ON WAREHOUSE {{team_name}}_WH TO ROLE {{team_name}}_ADMIN;

GRANT ROLE {{team_name}}_ADMIN TO ROLE SYSADMIN;

Execute o DCM project com o seguinte comando:

EXECUTE DCM PROJECT FINANCE_INFRA PLAN
  USING (team_name => 'Finance', wh_size => 'LARGE')
FROM
  ...

Exemplo: Criar um único DCM project para várias unidades de negócios

Nesta abordagem, você gerencia a infraestrutura de várias unidades de negócios em um DCM project usando loops em seu modelo Jinja, conforme mostrado no seguinte exemplo de definitions.sql:

{% for team_name in teams %}

  DEFINE DATABASE {{team_name}}_DB;
  DEFINE ROLE {{team_name}}_ADMIN;
  DEFINE WAREHOUSE {{team_name}}_WH
    WITH
      warehouse_size = '{{wh_size}}'
      auto_suspend = 300;

  GRANT OWNERSHIP ON DATABASE {{team_name}}_DB TO ROLE {{team_name}}_ADMIN;
  GRANT OWNERSHIP ON WAREHOUSE {{team_name}}_WH TO ROLE {{team_name}}_ADMIN;
  GRANT ROLE {{team_name}}_ADMIN TO ROLE SYSADMIN;

{% endfor %}

Execute o DCM project com o seguinte comando:

EXECUTE DCM PROJECT FINANCE_INFRA PLAN
  USING (teams => ['Finance', 'HR', 'Engineering'], wh_size => 'MEDIUM')
FROM
  ...

Isso facilita para as equipes e os administradores de plataforma fazerem alterações como:

  • Adicionar uma nova equipe à lista para implantar o modelo de infraestrutura existente para essa equipe.

  • Remover uma equipe da lista para descartar a infraestrutura dessa equipe.

  • Adicionar uma nova função READ_ONLY para todas as equipes.

  • Alterar configurações específicas, como concessões ou tamanho de warehouse, para todas as equipes ou uma equipe específica.

  • Executar PLAN para comparar o estado atual com os padrões esperados e reimplantar para restabelecer os padrões.

DCM Projects para pipelines de dados

Os DCM Projects ajudam a resolver os seguintes desafios que as equipes de recursos costumam enfrentar:

Desafios das equipes de recursos

As unidades de negócios que desejam criar e gerenciar facilmente seus pipelines de dados podem usar os DCM Projects para definir, testar, implantar e iterar em sua lógica de negócios.

Você pode:

  • Gerenciar tipos de objetos Snowflake, como tabelas, tabelas dinâmicas, exibições, warehouses, funções, concessões, funções de métricas de dados e expectativas, tudo em um projeto.

  • Testar e implantar alterações incrementais em pipelines. Você pode alterar configurações, implementar lógica de transformação e adicionar colunas e exibições.

  • Visualizar amostras de dados para validar a lógica de transformação antes de implantar objetos.

  • Implantar a mesma definição de pipeline em vários ambientes.

  • Testar as expectativas de qualidade de dados em ambientes pré-produção antes de implantar alterações em produção.

Os DCM Projects oferecem uma funcionalidade adicional para criação e gerenciamento de pipelines de dados. Consulte DCM Projects para pipelines de dados para obter mais detalhes.