Pular para o conteúdo principal

Uma introdução ao pacote dbt-utils

Saiba como o dbt-utils aprimora o dbt com macros pré-criadas, recursos principais e casos de uso práticos. Simplifique suas transformações de dados com nosso guia passo a passo.
Actualizado 29 de jul. de 2024  · 12 min de leitura

O pacote dbt-utils é um kit de ferramentas avançado que simplifica e aprimora seus processos de transformação de dados. Neste guia, apresentaremos a você o dbt-utils, mostrando como ele pode otimizar seu fluxo de trabalho com suas macros pré-criadas para operações SQL comuns.

O que é o dbt-utils?

Pacote dbt-utils

O dbt-utils é um pacote do dbt que fornece um conjunto de ferramentas de macros pré-criadas que aprimoram a funcionalidade dos projetos do dbt. O dbt-utils reduz a complexidade adicionando camadas de abstração, permitindo uma transformação de dados mais eficiente e consistente.

Se você estiver familiarizado com bibliotecas em Python e pacotes em R, o pacote dbt-utils seria algo semelhante.

Com essas macros padronizadas usadas para operações comuns de SQL (Structured Query Language), o dbt-utils garante que você não precise fazer todo o trabalho pesado de codificar todas as transformações do zero.

O uso desses utilitários elimina a necessidade de reinventar a roda, integrando um conjunto de macros aprovadas pela comunidade aos seus projetos, melhorando a capacidade de manutenção e promovendo uma cultura de práticas recomendadas.

Principais recursos e funcionalidades

O dbt-utils oferece vários recursos e funcionalidades que tornam a transformação de dados mais eficiente e simplificada. Isso inclui:

1. Macros padronizadas

O dbt-utils oferece uma ampla variedade de macros pré-criadas para operações SQL comuns usando modelos Jinja, como junções, agregações, filtragem e muito mais.

Essas macros são padronizadas para garantir a consistência entre os projetos e reduzir a necessidade de codificação repetitiva.

Por exemplo, aqui estão algumas macros usadas por engenheiros de análise:

  • date_spine: Cria uma sequência contínua de datas entre duas datas especificadas, útil para análise de séries temporais.
  • pivot: Transforme linhas em colunas dinamicamente, simplificando as operações de crosstab.
  • star: Obtém todos os campos das tabelas especificadas no modelo, excluindo os do argumento except.
  • union_relations: Combine dados de várias relações com a mesma estrutura usando o site union all.
  • generate_series: Crie uma série de dados numéricos, útil para análise de séries temporais.
  • surrogate_key: Produzir um identificador exclusivo para linhas concatenando vários campos.

Com essas macros, o SQL pode realizar tarefas que, de outra forma, seriam complexas e repetitivas.

2. Assistência de esquema e documentação

O dbt-utils oferece ferramentas úteis para gerenciar esquemas e documentação em modelos de dados. Isso facilita o controle das alterações e a manutenção da organização nos projetos.

4. Recursos de teste

Com o dbt-utils, os usuários podem escrever facilmente testes para garantir a precisão e a qualidade das transformações de dados. Esses testes podem ser automatizados e integrados aos processos de integração contínua, permitindo pipelines de dados mais eficientes e confiáveis.

Por que usar o dbt-utils?

Então, por que usar esse pacote?

Bem, primeiro vamos dar uma olhada em alguns de seus benefícios:

  1. SQL complexo simplificado: Com o uso de macros, o dbt-utils simplifica a criação de consultas SQL complexas. Isso economiza tempo e esforço dos analistas e engenheiros de dados, permitindo que eles se concentrem em análises de nível superior em vez de ficarem atolados em códigos.
  2. Documentação eficiente: Conforme mencionado anteriormente, o dbt-utils pode ajudar a gerar documentação automaticamente.
  3. Maior controle de qualidade: Ao incorporar recursos de teste aos pipelines de dados, o dbt-utils ajuda a garantir a precisão e a confiabilidade das transformações de dados.
  4. Validação automatizada de dados: Com o uso do dbt-utils, a validação de dados pode ser automatizada e integrada ao processo de desenvolvimento. Isso garante que todas as alterações feitas nos modelos de dados sejam imediatamente validadas e que os possíveis problemas sejam detectados logo no início.
  5. Código aberto: o dbt-utils é de código aberto, portanto, muitos desenvolvedores podem contribuir para o desenvolvimento do pacote. Isso significa que o pacote será atualizado constantemente.

Instalação e configuração do dbt-utils

Vamos dar uma olhada em como o pacote dbt-utils pode ser introduzido no seu fluxo de trabalho de dados abaixo.

Pré-requisitos

Antes de usar o dbt-utils, é imprescindível que você esteja familiarizado com SQL e entenda os fundamentos da dbt (ferramenta de criação de dados). Você já deve ter um projeto dbt inicializado e configurado.

Se precisar de uma atualização, você pode conferir nosso curso Introduction to dbt e o tutorial sobre dbt.

Além disso, é necessário um alinhamento de versão claro entre o núcleo do dbt e o pacote dbt-utils. É recomendável que você verifique a compatibilidade entre as versões do dbt para evitar conflitos ou funcionalidades obsoletas.

Instalação passo a passo

Para iniciar a integração do dbt-utils à sua pilha de dados, comece garantindo que o ambiente de desenvolvimento esteja configurado corretamente.

Etapa 1: Instalar o dbt

Primeiro, verifique se o dbt está instalado em seu ambiente. Você pode instalar o dbt via pip:

pip install dbt

Etapa 2: Adicione o dbt-utils ao seu projeto dbt

Para instalar o dbt-utils, adicione o seguinte ao arquivo packages.yml no diretório raiz do projeto dbt.

Crie esse arquivo na raiz do projeto dbt, caso ele não exista, e adicione o seguinte:

packages:
- package: dbt-labs/dbt_utils
version: "1.1.1" # Use the latest version compatible with your dbt version

Nesse arquivo yaml, você também especificará a versão do pacote necessária. Certifique-se de usar a versão mais recente que seja compatível com a versão do dbt que você instalou.

Etapa 3: Instalar o pacote

Após a modificação, a instalação é um simples comando de distância.

A execução bem-sucedida desse comando buscará e instalará o dbt-utils, preparando você para a funcionalidade aprimorada.

Execute o seguinte comando em seu terminal no diretório do projeto dbt:

dbt deps

Esse comando instala todos os pacotes listados em seu packages.yml.

dbt-utils Principais utilitários e seus aplicativos

O pacote dbt-utils fornece um conjunto de funções auxiliares comuns que simplificam as transformações SQL nos projetos dbt.

Essas funções ajudam os desenvolvedores a evitar redundâncias e a se concentrar em sua lógica comercial exclusiva.

Aqui estão algumas funções do dbt-utils:

1. Geradores de SQL

Os geradores de SQL no dbt-utils são úteis para criar código SQL modular.

Por exemplo, as macros deduplicate são excelentes para eliminar linhas duplicadas e, ao mesmo tempo, manter a ordem dos dados. Você pode remover duplicatas de modelos, tabelas e até mesmo de CTEs (Common Table Expressions).

2. Testes genéricos

Os testes genéricos são usados para validar dados em uma tabela ou visualização. Eles podem ser facilmente personalizados para atender a requisitos específicos e fornecer informações valiosas sobre a qualidade dos dados que estão sendo processados.

Por exemplo, a macro expression_is_true verifica se uma determinada expressão é verdadeira. Isso pode ser usado de forma flexível para verificar várias condições, como:

  • Comprimento da coluna
  • Saída de uma operação algébrica básica específica

3. Ajudantes Jinja

Os auxiliares Jinja são úteis para criar consultas SQL dinâmicas que podem ser facilmente personalizadas com base na entrada do usuário ou em dados variáveis. Eles permitem a lógica condicional e o looping nas instruções SQL.

Os modelos Jinja são usados para definir e especificar essas macros.

Um exemplo é a macro pretty_time, que retorna uma cadeia de caracteres com o registro de data e hora atual.

4. Macros da Web

As macros da Web são semelhantes aos auxiliares do Jinja, mas são projetadas especificamente para projetos baseados na Web. Eles permitem a geração e a manipulação dinâmica de HTML, facilitando a criação de páginas da Web interativas e responsivas.

Uma macro útil é a macro get_url_path, que obtém o caminho da página do URL. Veja como é a sintaxe:

{{ dbt_utils.get_url_path(field='page_url') }}

5. Macros introspectivas

As macros introspectivas são macros que podem acessar e manipular dados dentro do escopo atual. Isso permite um processamento de dados dinâmico e eficiente, reduzindo a necessidade de funções ou códigos adicionais.

Um exemplo é a macro get_column_values, que retorna os resultados da consulta como um objeto.

Casos práticos de uso dos utilitários dbt

Caso de uso 1: Simplificando consultas complexas

Exemplo de cenário: Uma empresa tem um grande conjunto de dados que contém informações de clientes, dados de transações e dados de produtos. Eles precisam criar um relatório que mostre o total de vendas de cada categoria de produto no último trimestre.

Em vez de escrever consultas SQL complexas para unir várias tabelas e calcular as vendas de cada categoria, você pode usar os utilitários dbt para extrair facilmente os dados relevantes e manipulá-los em suas macros ou modelos.

Por exemplo, você pode usar o site get_filtered_columns_in_relation para filtrar apenas as colunas necessárias relacionadas aos dados do produto e, em seguida, usar a macro de soma para calcular o total de vendas de cada categoria.

Isso simplifica o processo e o torna mais eficiente, economizando tempo e reduzindo erros.

Implementação do código:

Para implementar essa solução em um banco de dados simulado, você pode seguir estas etapas:

Use a macro get_filtered_columns_in_relation para filtrar apenas as colunas necessárias dos dados do produto. Essa macro ajudará você a selecionar colunas relevantes com eficiência.

-- models/product_data_filtered.sql
with product_data as (
select
{{ dbt_utils.get_filtered_columns_in_relation(
relation=ref('products'),
include=['product_id', 'category']
) }}
from {{ ref('products') }}
)
select * from product_data

Em seguida, crie um modelo para unir os dados do produto, da transação e do cliente. Em seguida, use a função de soma para calcular o total de vendas de cada categoria de produto no último trimestre.

-- models/total_sales_by_category.sql
with product_data as (
select
{{ dbt_utils.get_filtered_columns_in_relation(
relation=ref('products'),
include=['product_id', 'category']
) }}
from {{ ref('products') }}
),
transaction_data as (
select
product_id,
sale_amount,
transaction_date
from {{ ref('transactions') }}
where transaction_date >= date_trunc('quarter', current_date) - interval '1 quarter'
),
joined_data as (
select
p.category,
t.sale_amount
from product_data p
join transaction_data t
on p.product_id = t.product_id
)
select
category,
sum(sale_amount) as total_sales
from joined_data
group by category

Depois de definir os modelos, execute os modelos dbt para executar as transformações e gerar o relatório.

dbt run

Aqui está uma explicação do código acima:

A macro get_filtered_columns_in_relation ajuda você a selecionar apenas as colunas necessárias (product_id and category) da tabela de produtos, simplificando o conjunto de dados.

Em seguida, os dados filtrados do produto são unidos aos dados da transação usando SQL para obter os valores de vendas de cada produto. Em seguida, ele calcula o total de vendas de cada categoria de produto no último trimestre usando a função de agregação de soma.

Caso de uso 2: Garantir a qualidade dos dados com testes genéricos

Exemplo de cenário:

Neste caso de uso, continuaremos a trabalhar com o mesmo conjunto de dados de simulação do Caso de Uso 1. No entanto, em vez de criar um relatório, nosso objetivo é garantir a qualidade dos dados executando testes genéricos nos dados.

Implementação do código:

Abaixo estão exemplos de como você pode implementar esses testes para seu conjunto de dados:

1. Teste de proporção de nulos

Nesse teste genérico, afirmaremos apenas os valores que se encaixam na proporção não nula que especificamos. Faremos isso usando o teste not_null_proportion.

# models/products.yml
version: 2
models:
- name: products
columns:
- name: product_id
tests:
- dbt_utils.not_null_proportion:
at_least: 0.95

Neste exemplo, incluímos um argumento opcional adicional at_least para definir a proporção não nula para ter um máximo de 0,95.

2. Teste de campos vazios

Neste exemplo, usaremos o teste not_empty_string para verificar se há cadeias de caracteres vazias no campo product_id.

# models/products.yml
version: 2
models:
- name: products
columns:
- name: product_id
tests:
- dbt_utils.not_empty_string

3. Teste de integridade referencial

Ao usar a função relationships_where, você garantirá que todos os product_id da tabela de transações existam na tabela de produtos.

# models/transactions.yml
version: 2
models:
- name: transactions
columns:
- name: product_id
tests:
- dbt_utils.relationships_where:
to: ref('products')
field: product_id

Neste exemplo, garantimos que todos os valores de product_id na tabela transactions correspondem a entradas válidas na tabela tabela. Essa é uma verificação básica da integridade do relacionamento.

Observe que você também pode combinar vários testes ao mesmo tempo para poder cobrir várias verificações de integridade.

Depois que todos os testes forem definidos no arquivo de configuração yaml, use o comando dbt test para executar todos os testes de esquema definidos.

dbt test

dbt utils Melhores práticas

Aproveitamento eficiente do dbt-utils

Ao usar o dbt, é importante seguir as práticas recomendadas para garantir que seu projeto seja executado de forma eficiente e eficaz. Ao usar o dbt-utils, você deve ter em mente alguns pontos importantes:

  1. Combine vários testes em vez de defini-los separadamente: Como mencionado anteriormente, você pode combinar vários testes em uma única instrução de teste. Isso ajuda a reduzir a redundância e a melhorar o desempenho geral do seu projeto.
  2. Use a macro dbt_utils.surrogate_key ao criar chaves substitutas: Essa macro gera automaticamente chaves substitutas com base em outras colunas da tabela, o que economiza tempo e esforço para você.

Armadilhas comuns e como evitá-las

Aqui estão algumas armadilhas comuns que os usuários podem encontrar ao usar o dbt-utils, juntamente com dicas sobre como evitá-las:

  1. Você não está configurando corretamente as macros personalizadas: Se você estiver criando suas próprias macros personalizadas, certifique-se de que elas estejam devidamente configuradas e testadas antes de incorporá-las ao seu projeto.
  2. Não está atualizando para a versão mais recente do dbt-utils: É importante que você atualize regularmente para a versão mais recente do dbt-utils para aproveitar os novos recursos e as correções de bugs.

Conclusão

O dbt-utils é uma ferramenta avançada para simplificar, testar e automatizar tarefas no processo de modelagem de dados. É uma parte essencial do uso do dbt e pode poupar tempo e esforço para você desenvolver seus modelos de dados.

Você também pode achar útil este tutorial de dbt ou esta lista de ferramentas alternativas de engenharia de dados.

Se você estiver interessado em começar a usar o dbt e quiser aprender mais, explore também nosso Curso de Introdução ao dbt!

Temas

Continue sua jornada de aprendizado de dbt hoje mesmo!

curso

Introduction to dbt

4 hr
6.3K
This course introduces dbt for data modeling, transformations, testing, and building documentation.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

blog

Uma introdução ao DuckDB: O que é e por que você deve usá-lo?

Explore o DuckDB, o banco de dados analítico rápido e fácil de usar para Python e R. Conheça seus principais recursos, casos de uso e como ele otimiza as tarefas de análise de dados.
Kurtis Pykes 's photo

Kurtis Pykes

7 min

blog

O que é um banco de dados gráfico? Um guia para iniciantes

Explore o intrincado mundo dos bancos de dados gráficos com nosso guia para iniciantes. Entenda as relações entre os dados, aprofunde-se na comparação entre bancos de dados relacionais e gráficos e explore casos de uso práticos.
Kurtis Pykes 's photo

Kurtis Pykes

11 min

blog

Um guia de 8 etapas para se tornar um desenvolvedor do Power BI em 2024

Torne-se um desenvolvedor do Power BI em 2024 com este roteiro completo.
Joleen Bothma's photo

Joleen Bothma

12 min

tutorial

Tutorial do MySQL: Um guia abrangente para iniciantes

Descubra o que é o MySQL e como começar a usar um dos sistemas de gerenciamento de banco de dados mais populares.
Javier Canales Luna's photo

Javier Canales Luna

15 min

tutorial

Tutorial do Chroma DB: Um guia passo a passo

Com o Chroma DB, você pode gerenciar facilmente documentos de texto, converter texto em embeddings e fazer pesquisas de similaridade.
Abid Ali Awan's photo

Abid Ali Awan

10 min

tutorial

Tutorial do SQL Server: Desbloqueie o poder do gerenciamento de dados

Explore o gerenciamento de dados com nosso tutorial do SQL Server. Do básico ao uso avançado, aprimore suas habilidades e navegue no SQL Server com confiança.

Kevin Babitz

13 min

See MoreSee More