Projetos dbt no Snowflake

dbt Core é uma ferramenta e estrutura de transformação de dados de código aberto que você pode usar para definir, testar e implantar transformações SQL. Com o dbt Projects on Snowflake, você pode usar os recursos familiares do Snowflake para criar, editar, testar, executar e gerenciar os projetos dbt Core. O projeto dbt é um diretório que contém um arquivo dbt_project.yml e um conjunto de arquivos que definem os ativos dbt, como modelos e fontes.

Você pode usar Espaços de trabalho na Snowsight para trabalhar com arquivos e diretórios de projeto dbt e, em seguida, implantar um projeto como um objeto DBT PROJECT no nível do esquema. Você também pode usar o SQL para trabalhar com objetos de projeto dbt, usar os comandos do Snowflake CLI para integrar a implantação e a execução aos fluxos de trabalho CI/CD, usar as tarefas para agendar e orquestrar as execuções dos projetos dbt e usar as ferramentas de monitoramento do Snowflake para inspecionar, gerenciar e ajustar as execuções dos projetos.

Uso de espaços de trabalho para dbt Projects on Snowflake

O Workspaces na Snowsight oferece um ambiente de desenvolvimento integrado (Integrated Development Environment, IDE) baseado na Web para projetos dbt que podem se conectar e sincronizar com um repositório Git. Cada espaço de trabalho para dbt Projects on Snowflake pode representar um único ou vários projetos dbt, dependendo de como você organiza os arquivos e as pastas.

Você pode usar um espaço de trabalho para dbt Projects on Snowflake para visualizar, testar e executar projetos dbt diretamente no Snowflake. Você também pode conectar o espaço de trabalho a um objeto de projeto dbt no Snowflake, para poder criar e atualizar objetos de dentro do espaço de trabalho. O Workspaces também oferece uma maneira rápida de inicializar (ou montar) um novo projeto dbt, o que cria os arquivos e diretórios necessários para um projeto dbt, incluindo o arquivo dbt_project.yml.

Além de oferecer suporte a projetos dbt, o Workspaces oferece um editor unificado para você criar, organizar e gerenciar código em vários tipos de arquivos e projetos no Snowflake. Para obter mais informações, consulte Espaços de trabalho.

Explicação dos objetos de projeto dbt

Um PROJECT DBT é um objeto no nível do esquema que contém arquivos de origem com controle de versão para o projeto dbt no Snowflake. Você pode conectar um objeto de projeto dbt a um espaço de trabalho, ou criar e gerenciar o objeto independentemente de um espaço de trabalho.

Você pode CREATE, ALTER e DROP objetos de projeto dbt assim como outros objetos no nível do esquema no Snowflake. Os objetos de projeto dbt também oferecem suporte ao controle de acesso baseado em função (Role-Based Access Control, RBAC). Você pode usar o comando EXECUTE DBT PROJECT de um warehouse Snowflake para executar comandos do dbt como test e run. Você também pode usar as tarefas para agendar a execução desses comandos.

Normalmente, um objeto de projeto dbt é baseado em um diretório de projeto dbt que contém um arquivo dbt-project.yml. Esse é o padrão que o Snowflake usa quando você implanta (cria) um objeto de projeto dbt de dentro de um espaço de trabalho.

Você também criar um projeto dbt de um diretório pai que contenha vários projetos dbt em subdiretórios. Quando você cria um objeto de projeto dbt dessa maneira, deve usar o parâmetro PROJECT_ROOT em qualquer comando EXECUTE DBT PROJECT usado com o projeto. Esse parâmetro especifica o caminho para o subdiretório que contém o arquivo dbt_project.yml do projeto.

Fluxos de trabalho CI/CD para objetos de projeto dbt

Os objetos de projeto dbt oferecem suporte a comandos do Snowflake CLI que você pode usar para criar e gerenciar projetos dbt da linha de comando. Isso é útil para integrar projetos dbt aos fluxos de trabalho de engenharia de dados e pipelines CI/CD. Para obter mais informações, consulte Snowflake CLI, Integração de CI/CD com Snowflake CLI e Comandos snow dbt.

Controle de versão para objetos e arquivos de projeto dbt

O Snowflake mantém as versões dos objetos de projeto dbt e seus arquivos de projeto correspondentes. Você pode usar esse controle de versão para rastrear e gerenciar alterações durante todo o ciclo de vida de desenvolvimento e implantação de dados. O Snowflake identifica versões de objeto de projeto dbt na área de preparação do projeto dbt, conforme mostrado no seguintes exemplo:

snow://dbt/my_db.my_schema.my_dbt_project_object/versions/version_id

version_id pode ser qualquer um dos seguintes identificadores:

  • VERSION$<num>: especifica um identificador de versão no formato VERSION$<num>, em que <num> is a positive integer, for example, VERSION$1.

    O número da versão começa em 1, quando você cria um objeto de projeto dbt, e é incrementado por um a cada nova versão do objeto de projeto dbt.

    O Snowflake incrementa o identificador de versão quando você executa as seguintes tarefas:

    • Redeploy dbt project de um espaço de trabalho (executa o comando ALTER).

    • Atualize o projeto usando o comando ALTER DBT PROJECT.

    • Execute o comando snow dbt deploy do Snow CLI sem a opção --force.

    O Snowflake redefine o identificador de versão para 1 e remove todos os aliases de versão quando você executa os seguintes comandos:

    • O comando CREATE DBT PROJECT em SQL com a opção OR REPLACE.

    • O comando snow dbt deploy com a opção --force no Snowflake CLI.

  • LAST: indica a versão mais recente do objeto de projeto dbt.

  • FIRST: indica a versão mais antiga do objeto de projeto dbt.

  • version_name_alias: indica um alias de nome de versão personalizado que você criou para uma versão específica do objeto de projeto dbt usando o comando ALTER DBT PROJECT com a opção ADD VERSION. Um alias de nome de versão sempre mapeia para um identificador de versão específico, como VERSION$3.

Os arquivos do projeto armazenados na área de preparação do projeto dbt são organizados por versão, sendo que cada versão tem o próprio subdiretório. Por exemplo, um objeto de projeto dbt chamado my_dbt_project_object com o identificador de versão VERSION$3 e o arquivo do projeto dbt chamado dbt_project.yml pode ser referenciado conforme mostrado no seguinte exemplo:

snow://dbt/my_db.my_schema/my_dbt_project_object/versions/VERSION$3/dbt_project.yml

Requisitos, considerações e limitações

Antes de usar o dbt Projects on Snowflake, revise os requisitos, as considerações e as limitações desta seção.

Projetos dbt

Os seguintes requisitos, considerações e limitações se aplicam às configurações de projeto dbt compatíveis com dbt Projects on Snowflake:

  • Somente projetos dbt Core são compatíveis. Projetos dbt Cloud não são compatíveis. O dbt Projects on Snowflake executa a versão dbt-core 1.9.4 e a versão dbt-snowflake 1.9.2. Quando você migra um projeto dbt existente para o Snowflake, suas versões dbt não precisam estar alinhadas às versões do Snowflake.

  • Cada pasta do projeto dbt no seu espaço de trabalho Snowflake deve conter um arquivo profiles.yml que especifica um warehouse, database, schema e role de destino para o projeto no Snowflake. O type deve ser definido como snowflake. O dbt requer account e user, mas esses valores podem ser deixados com uma cadeia de caracteres vazia ou arbitrária porque o projeto dbt é executado no Snowflake de acordo com a conta atual e o contexto do usuário.

  • Um projeto dbt em espaço de trabalho não pode ter mais de 20.000 arquivos na estrutura de pastas. Esse limite inclui todos os arquivos no diretório e nos subdiretórios do projeto dbt, incluindo os diretórios target/dbt_packages/logs, em que os arquivos de log são salvos quando um projeto dbt é executado de dentro do espaço de trabalho.

Procedimentos armazenados

Quando você usa um procedimento armazenado para chamar EXECUTE DBT PROJECT, usa um procedimento armazenado dos direitos do autor da chamada. Para obter mais informações, consulte CREATE PROCEDURE e Criação de um procedimento armazenado.

Espaços de trabalho para dbt Projects on Snowflake

Os seguintes requisitos, considerações e limitações se aplicam a espaços de trabalho para dbt Projects on Snowflake:

Requisito de banco de dados pessoal

Os espaços de trabalho são criados dentro de um banco de dados pessoal e não podem ser compartilhados com outros usuários. Os bancos de dados pessoais devem ser habilitados no nível da conta, o que requer permissões de ACCOUNTADMIN. Para obter mais informações, consulte Gerenciar o Espaços de Trabalho.

Funções secundárias são necessárias por projeto e sessão

Para executar comandos dbt de dentro de um espaço de trabalho para dbt Projects on Snowflake, é necessário habilitar as funções secundárias. Se as funções secundárias não estiverem habilitadas para um projeto e uma sessão, será solicitado que você habilite as funções secundárias da lista Profile ao executar um comando pela primeira vez. Essa seleção deve ser feita para cada projeto, e a seleção não persiste além da sessão atual do navegador.

Se você tem uma conta Enterprise Edition, as políticas de sessão podem ser configuradas para proibir funções secundárias na conta ou para usuários específicos. Esses usuários não poderão executar comandos do dbt de dentro de um espaço de trabalho para dbt Projects on Snowflake. Para obter mais informações sobre as políticas de sessão, consulte Especificar funções secundárias em uma política de sessão.

Repositórios Git

Os seguintes requisitos, considerações e limitações se aplicam quando você conecta um espaço de trabalho para dbt Projects on Snowflake a um repositório Git:

  • A configuração de uma integração de API no Snowflake é necessária para configurar um objeto de repositório Git no Snowflake. Para obter mais informações, consulte Configuração do Snowflake para usar o Git.

  • Não há suporte para repositórios Git que podem ser acessados somente por PrivateLink.

  • Não há suporte para repositórios Git maiores que 2GB.

  • Não é possível se conectar a um repositório Git vazio. Você deve ter pelo menos um commit.

Dependências do dbt

Os seguintes requisitos, considerações e limitações se aplicam às dependências do dbt para projetos dbt em dbt Projects on Snowflake:

  • Você deve executar o comando deps do dbt de dentro de um espaço de trabalho para dbt Projects on Snowflake ou usando o comando snow dbt execute do Snowflake CLI para criar e preencher a pasta do projeto dbt_packages. Não é possível executar o comando deps usando o comando EXECUTE DBT PROJECT SQL. Como alternativa, execute deps em seu projeto dbt local antes de implantar no Snowflake como um objeto de projeto dbt.

  • Não é permitido especificar pacotes Git no arquivo packages.yml.

  • Uma regra de rede e a integração de acesso externo são necessárias para permitir que o Snowflake acesse os repositórios para as dependências. Para obter mais informações, consulte Criação de integração de acesso externo no Snowflake para dependências de dbt. Para obter mais informações sobre limitações de acesso à rede externa, consulte Limitações de acesso à rede externa.

Telemetria, registro em log e rastreamento

Os seguintes requisitos, considerações e limitações se aplicam à telemetria, ao registro em log e ao rastreamento para o dbt no Snowflake:

  • O Workspaces para dbt Projects on Snowflake não transmite o stdout dinamicamente, e o stdout só pode ser visualizado após a conclusão do comando.

  • A visualização de logs e o rastreamento exigem que você defina LOG_LEVEL e TRACE_LEVEL no objeto de projeto dbt. Para obter mais informações, consulte Controle de acesso para projetos de dbt no Snowflake e Monitoramento de projetos dbt no Snowflake.

  • Por padrão, o Snowflake coleta a telemetria na tabela padrão SNOWFLAKE.TELEMETRY.EVENTS. Se você tem uma tabela de eventos personalizada definida como a tabela de eventos em sua conta, os dados de telemetria serão coletados dela. Se você usa uma conta Enterprise Edition, pode criar uma tabela de eventos para coletar os dados de telemetria e associá-los ao banco de dados em que o objeto de projeto dbt está implantado. Para obter mais informações, consulte Visão geral da tabela de evento.

Comandos do dbt permitidos

A tabela a seguir mostra os comandos do dbt permitidos no dbt Projects on Snowflake. Qualquer comando do dbt que não está listado aqui não é permitido.

dbt Projects on Snowflake, comandos do dbt permitidos por método de execução

Comando do dbt

Espaços de trabalho

EXECUTE DBT PROJECT

snow dbt execute (CLI)

build

compile

deps

list

parse

run

run-operation

seed

show

snapshot

test