Arquivos e modelos dos DCM Projects¶
Um DCM project requer um arquivo de manifesto e um ou mais arquivos de definição de objeto SQL. Esses arquivos normalmente são armazenados e gerenciados em um repositório Git ou em seu espaço de trabalho local.
O arquivo de manifesto
Especifica quais arquivos de definição de objeto devem ser incluídos.
Define configurações para diferentes ambientes com variáveis de modelo.
Os arquivos de definição de objeto
Definem um grupo de objetos Snowflake que você deseja gerenciar juntos no DCM project.
O fluxo de trabalho de alto nível para criar arquivos de DCM project é:
Criar uma pasta de DCM project para armazenar seus arquivos de definição¶
Para criar um novo DCM project, crie uma pasta para armazenar seu arquivo de manifesto (manifest.yml) e os arquivos de definição de objeto SQL.
O comando snow init com o modelo DCM_PROJECT cria arquivos de definição de exemplo no diretório do projeto. Você pode abrir e editar esses arquivos para definir seu DCM project.
Os DCM Projects seguem a estrutura de pastas padronizada:
Os arquivos de definição de objeto dos DCM Projects devem ser colocados em
sources/definitions/.Os arquivos de macro globais opcionais podem ser colocados em
sources/macros/.A nomeação e o aninhamento de arquivos dentro desses diretórios de projeto são flexíveis.
Os artefatos de saída salvos dos comandos DCM são sempre gravados em
out/.Se você tiver scripts ou arquivos de projeto adicionais que deseja usar para comandos DCM, poderá adicioná-los a
sources(por exemplo, arquivos de projeto dbt).Se você tiver outros scripts personalizados que deseja armazenar na pasta do projeto que não devem ser usados pelos comandos dos DCM Projects nem carregados do local, adicione-os a uma pasta fora da pasta
sources.Os comandos CLI só carregam arquivos na pasta
sources.
Nota
Se você usa o Git, adicione out/ ao arquivo .gitignore para evitar enviar os arquivos de saída locais para o Git.
Exemplo de uma estrutura de pastas de DCM project:
Criação de um arquivo de manifesto¶
Cada DCM project requer um arquivo manifest.yml. Ele contém os detalhes essenciais de configuração do projeto e permite que a pasta do projeto seja identificada como DCM project.
Você usa o arquivo de manifesto para controlar os objetos e as funções do DCM project que devem ser usados na implantação em ambientes de destino diferentes e para gerenciar conjuntos de valores de modelagem.
O arquivo de manifesto é um YAML que contém as seguintes propriedades:
Propriedade |
Obrigatório |
Descrição |
|---|---|---|
|
Obrigatório |
Versão do esquema do manifesto. A versão atual é 2. |
|
Obrigatório |
Tipo do projeto. Defina como |
|
Opcional |
Se você tem mais de um destino, especifique o destino padrão. A Snowflake CLI e o Workspaces usam o destino padrão se você não especifica um destino usando o sinalizador |
|
Obrigatório |
A seção |
|
Opcional |
A seção |
Destinos do projeto¶
Cada destino no arquivo de manifesto contém as seguintes propriedades:
Propriedade |
Descrição |
|---|---|
|
O identificador da conta Snowflake para o destino. Consulte Como encontrar a região e o localizador de uma conta. |
|
O nome totalmente qualificado do objeto de DCM project, por exemplo, Use o comando SQL SHOW DCM PROJECTS para encontrá-lo. |
|
A função com OWNERSHIP neste objeto de projeto. Use o comando SQL SHOW DCM PROJECTS ou DESCRIBE DCM PROJECT para encontrá-lo. |
|
O nome da configuração de modelagem definida na seção |
Mapear entre definições e objetos de projeto¶
Os arquivos de definição dos DCM Projects não são estritamente vinculados a um objeto de DCM project específico. Você pode usar o mesmo conjunto de definições para implantar em vários projetos, seja em contas Snowflake diferentes ou fazendo referência a perfis de configuração distintos. Por exemplo, os mesmos arquivos de definição em uma ramificação do repositório podem ser implantados em ambas as contas DEV e PROD, como mostrado na figura a seguir.
Da mesma forma, você pode executar um objeto de DCM Projects referenciando arquivos de definição de diferentes caminhos. Por exemplo, a automação de CI/CD pode implantar definições da ramificação principal, e você pode executar manualmente um PLAN dos arquivos de definição locais no mesmo projeto para verificar como as definições divergem da implantação mais recente. Você também pode usar essa abordagem para implantações manuais específicas de outras ramificações ou caminhos locais.
Configurações de modelagem de projeto¶
Veja a seguir a estrutura de alto nível da configuração de modelagem no arquivo de manifesto. Você pode definir apenas defaults, apenas configurations ou ambos.
Propriedade |
Descrição |
|---|---|
|
Os valores de variáveis compartilhadas, em pares chave-valor, que se aplicam a todas as configurações para evitar repetição. |
|
As configurações de modelagem a serem usadas no projeto. As configurações individuais podem substituir os padrões por valores específicos da configuração. Para obter detalhes sobre como as variáveis são resolvidas, consulte Configurações. |
|
O nome da configuração de modelagem. Os nomes de configuração não diferenciam maiúsculas de minúsculas. |
|
O nome da variável. Os nomes das variáveis devem seguir as regras de nomenclatura de variáveis do Python. Todas as variáveis nas definições de projeto devem ser declaradas em padrões, na configuração selecionada ou em tempo de execução. Se você quiser que as variáveis de cadeia de caracteres sejam resolvidas vazias, especifique-as como |
|
O valor da variável. Os valores podem ser cadeias de caracteres, números, boolianos, listas ou dicionários. Os dicionários podem ser definidos no manifesto, mas não podem ser substituídos em tempo de execução. |
Exemplo: manifest.yml¶
Este e um exemplo de arquivo de manifesto de DCM project (manifest.yml) que inclui três configurações, DEV, STAGE e PROD, com variáveis de modelo e os respectivos valores padrão:
Criar arquivos de definição de objeto¶
Um arquivo de definição de DCM project é um modelo resolvido como instruções SQL válidas para gerenciar objetos Snowflake. Cada DCM project requer pelo menos um arquivo de definição.
Você pode organizar suas definições de objetos e concessões em vários arquivos e pastas. A Snowflake recomenda escolher uma estrutura que represente a lógica de negócios do projeto (por exemplo, bronze, prata e ouro) em vez de agrupar por tipo de objeto.
Os arquivos de definição só podem conter instruções DEFINE, GRANT ou ATTACH. Outros comandos SQL não são compatíveis.
Para começar rapidamente a usar os DCM Projects, você pode converter seus scripts de implantação SQL existentes usando a palavra-chave DEFINE para as DDLs existentes (para tipos de objetos compatíveis).
A instrução DEFINE funciona como o comando CREATE OR ALTER <objeto>, mas com as seguintes diferenças importantes:
A ordem e o local das instruções DEFINE não importam. O Snowflake coleta e classifica todas as instruções de todos os arquivos de definição durante a execução do projeto.
Se você remover uma instrução DEFINE, o Snowflake descartará o objeto correspondente na próxima vez que você implantar o projeto.
Apenas um subconjunto de objetos Snowflake é permitido. Para obter mais detalhes, consulte Tipos de objetos compatíveis com DCM Projects.
Todos os objetos devem ser definidos com um nome totalmente qualificado no formato
database.schema.object_name.
Os arquivos de definição podem conter várias opções de modelagem Jinja2 e oferecem suporte a recursos avançados de modelagem, que permitem que você faça o seguinte:
Personalize o conteúdo do arquivo em tempo de execução usando variáveis de modelo.
Use a sintaxe Jinja2 para lógica, como loops e condicionais.
Torne os arquivos de definição reutilizáveis e adaptáveis a diferentes cenários.
Modelagem de definição de objeto¶
Os DCM Projects são compatíveis com a estrutura Jinja2 para instruções de modelagem SQL. É possível declarar variáveis e atribuir valores usando a sintaxe Jinja2 de perfis de configuração, no comando EXECUTE DCM PROJECT, ou do Jinja. Você também pode construir loops usando listas de valores, instruções de caso, funções reutilizáveis e muito mais. Para obter mais informações, consulte a documentação do Jinja2.
As funcionalidades compatíveis do Jinja2 incluem:
Substituições de cadeia de caracteres
Listas
Dicionários e dicionários aninhados
Condições (instruções IF)
Looping
Macros globais e no arquivo
As macros definidas na pasta
sources/macrospodem ser usadas em todos os arquivos de definição.As macros definidas em um arquivo podem ser usadas dentro do arquivo.
As funcionalidades incompatíveis do Jinja2 incluem:
Nota
O identificador _snow é reservado para uso futuro e não pode ser usado como nome de variável ou de macro
Importante
Não use as variáveis de modelagem dos DCM Projects para definições de objeto que contêm informações confidenciais ou credenciais. As definições SQL renderizadas não ocultam valores inseridos por variáveis de ambiente.
Da mesma forma, não insira dados pessoais, dados confidenciais, dados com controle de exportação ou outros dados regulamentados como metadados, por exemplo, nomes de arquivo, nomes de configuração e variável, ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.
Veja a seguir um exemplo de arquivo de definição de DCM project que usa a modelagem Jinja2:
Veja a seguir um exemplo de arquivo de manifesto de DCM project (manifest.yml) que define duas configurações: DEV e PROD.
A renderização desta definição de warehouse com a configuração DEV (selecionada automaticamente por meio da templating_config de destino ou em tempo de execução) é resolvida como:
Macros¶
Arquivos de macros são todos os arquivos SQL localizados na pasta macros e suas subpastas. Eles só podem conter macros.
Um exemplo de uma estrutura de diretórios de um DCM project com arquivos de macros é:
Semelhante às funções nas linguagens de programação regulares, as macros ajudam a organizar as partes do código usadas com frequência em funções reutilizáveis, o que evita a repetição e segue o princípio DRY (Don’t Repeat Yourself). As macros nos DCM Projects funcionam da mesma forma que as macros Jinja2, com as seguintes exceções:
Local dedicado para arquivos de macros na pasta
macros.As macros definidas em arquivos de macros ficam automaticamente visíveis em outros arquivos de origem. A tag import do Jinja não é permitida.
A definição duplicada de uma macro com o mesmo nome é detectada e rejeitada.
Importação automática de macros globais¶
Durante o processo de renderização do arquivo de definição, os arquivos de origem são verificados em busca de possíveis chamadas de macro. Se uma macro chamada for definida em um arquivo de macros, a tag from […] import implícita será adicionada automaticamente, assim não há necessidade de uma importação explícita.
Semelhante às macros Jinja2, você pode definir uma macro local prefixando-a com um sublinhado. Uma macro local pode ser usada somente no arquivo onde foi declarada e não fica visível para outros arquivos.
Comentários de modelo¶
Nos comandos SQL, você pode adicionar -- antes do código para transformar a linha em comentário. O Jinja ainda processa as variáveis no código SQL, mas deixa os comentários SQL.
Por exemplo, o seguinte código Jinja:
É renderizado como:
Os comandos transformados em comentários não são executados em SQL. Você pode usar comentários de modelo para depurar a modelagem Jinja sem afetar seu código SQL.
Para ignorar o código Jinja durante a renderização, adicione # entre colchetes de abertura e fechamento, como mostrado no exemplo a seguir:
Configurações¶
Ao usar modelos em suas definições de objeto, você tem as seguintes opções:
Atribuir valores a variáveis em tempo de execução.
Definir diferentes perfis de configuração em
templating: configurations:nomanifest.yml. Cada destino pode fazer referência a uma configuração por meio detemplating_config. Consulte Configurações de modelagem de projeto para obter mais detalhes.Se os perfis de configuração forem definidos e um destino fizer referência a um deles por meio de
templating_config, a configuração será aplicada automaticamente ao usar esse destino. Para exemplos, consulte Planejar um DCM project.O principal caso de uso dos perfis de configuração nos DCM Projects é para apontar ambientes diferentes. Os perfis de configuração permitem que você faça o seguinte:
Implante o mesmo código em vários ambientes.
Teste o código de produção em um ambiente que não seja de produção em escala reduzida.
Mantenha vários ambientes isolados na mesma conta.
Nem todas as configurações de modelagem precisam ser referenciadas por um perfil de destino. Você pode manter configurações não usadas para alternar a configuração de modelagem em seu destino entre uma e outra.
Definir valores padrão compartilhados em
templating: defaults:para evitar a repetição de variáveis comuns nas configurações. Consulte Configurações de modelagem de projeto para obter mais detalhes.Substituir variáveis específicas por valores únicos em tempo de execução usando o sinalizador
--variablena CLI.
As variáveis são resolvidas com uma hierarquia de três níveis: padrões globais < variáveis de configuração < variáveis de execução em tempo de execução.
Dicionários¶
A modelagem dos DCM Projects oferecem suporte a dicionários como valores de variáveis, permitindo uma configuração estruturada para implantações complexas multilocatário ou de vários recursos.
Ao agrupar os detalhes de configuração relacionados em dicionários, você obtém:
Controle granular: aplique configurações específicas, como tamanhos de warehouse, políticas de retenção e concessões, a recursos individuais sem escrever uma lógica exclusiva para cada variação.
Bases de código mais limpas: substitua scripts repetitivos embutidos em código por loops dinâmicos que se adaptam conforme a configuração.
Escalabilidade: integre novas equipes ou recursos adicionando entradas à sua configuração, em vez de refatorar pipelines de implantação.
Nota
Os dicionários podem ser definidos no manifesto, mas não podem ser substituídos em tempo de execução pelo sinalizador --variable ou por substituições de USING CONFIGURATION (...) em SQL. Somente valores escalares e listas podem ser substituídos em tempo de execução.
Exemplo de caso de uso para dicionários: Provisionamento de ambiente multilocatário¶
Considere uma plataforma compartilhada por vários departamentos, como marketing, finanças e HR, cada um com requisitos de conformidade e computação diferentes. Com os dicionários, você define uma única configuração que captura as necessidades de cada equipe.
Exemplo de manifesto:
Exemplo de definição:
O modelo SQL executa loop por este dicionário. Ele cria esquemas automaticamente, atribui a política de retenção correta e cria condicionalmente recursos extras apenas para as equipes que os solicitam.
