Estudando DBT
dbt
foi desenvolvido para desenvolver o processo de transformação do fluxo "extract-load-transform" para plataformas de dados. dbt
cria conexão com a plataforma de dados e exeecuta SQL para transformação dos dados.
This course will assume you are using dbt Cloud, but the concepts and practices can easily be extended to dbt CLI.
Alguns conceitos:
Adapters: DBT conecta e executa SQL em base de dados, warehouse, lake, or query engine. Todas essas coisas-SQL são agrupadas em um bucket, chamado plataforma de dados (data platforms). DBT pode ser extendido a qualquer plataforma de dados usando um adapter. Esses adapters são criados como módulos python que o dbt
core identifica se estão instalados no sistema.
CLI: dbt
provê uma interface de linha de comando (CLI) para execução do projeto. A CLI também está disponível para o dbt Cloud
. Panorama geral da CLI.
dbt
CLI
Instalação
É possível instalar o DBT core e seus complementos por docker ou por pip
. Sendo recomendado, para este último, o uso de ambientes virtuais.
Preparando ambiente de desenvolvimento
Ambiente virtual Python:
mkdir DBT_tutorial
cd DBT_tutorial
python -m venv .venv
source .venv/bin/activa
pip install --upgrade pip wheel setuptools
Tip: You can create an alias for the source command in your $HOME/.bashrc, $HOME/.zshrc, or whichever rc file your shell draws from. For example, you can add a command like alias env_dbt='source <PATH_TO_VIRTUAL_ENV_CONFIG>/bin/activate', replacing <PATH_TO_VIRTUAL_ENV_CONFIG> with the path to your virtual environment configuration.
Listando docker containers, para certificar existencia de container com postgre
docker container ls --all
# 8c928baa5d8d postgres "docker-entrypoint.s…" 5 months ago Exited (0) 2 days ago postgres
Instalando adapter
Neste estudo, vou usar o adaptador postgres
:
pip install dbt-postgres
Com esse comando serão instalados o dbt-core
e dbt-postgres
.
Confirmando a instalação:
dbt --version
#Core:
# - installed: 1.3.0
# - latest: 1.3.0 - Up to date!
#Plugins:
# - postgres: 1.3.0 - Up to date!
Criando um projeto
dbt
core inclui o comando init
que ajuda a estruturar um projeto dbt
.
dbt init jaffle_shop
02:00:44 Running with dbt=1.3.0
02:00:44 Creating dbt configuration folder at /home/felipe/.dbt
Which database would you like to use?
[1] postgres
(Don't see the one you want? https://docs.getdbt.com/docs/available-adapters)
Enter a number: 1
02:00:55 Profile jaffle_shop written to /home/felipe/.dbt/profiles.yml using target's sample configuration. Once updated, you'll be able to start developing with dbt.
02:00:55
Your new dbt project "jaffle_shop" was created!
For more information on how to configure the profiles.yml file,
please consult the dbt documentation here:
https://docs.getdbt.com/docs/configure-your-profile
One more thing:
Need help? Don't hesitate to reach out to us via GitHub issues or on Slack:
https://community.getdbt.com/
Happy modeling!
Resultado:
Conjunto de pastas já estruturadas com alguns arquivos .sql
e .yml
com alguns parâmetros pré-configurados:
.
├── jaffle_shop
│ ├── analyses
│ ├── dbt_project.yml
│ ├── macros
│ ├── models
│ │ └── example
│ │ ├── my_first_dbt_model.sql
│ │ ├── my_second_dbt_model.sql
│ │ └── schema.yml
│ ├── README.md
│ ├── seeds
│ ├── snapshots
│ └── tests
├── logs
│ └── dbt.log
└── README.md
Confirgurando profile.yml
O arquivo profile.yml
possui todas as informações e parâmetros necessários para o dbt
poder acessar a base de dados. Para conhecer os parâmetros necessários a cada caso, veja a pagina de cada adapter
. Para o caso o postgres
;
dbt debug
dbt debug
02:44:16 Running with dbt=1.3.0
dbt version: 1.3.0
python version: 3.9.0
python path: /media/felipe/DATA/Repos/DBT_tutorial/.venv/bin/python
os info: Linux-5.4.0-131-generic-x86_64-with-glibc2.27
Using profiles.yml file at /media/felipe/DATA/Repos/DBT_tutorial/jaffle_shop/profiles.yml
Using dbt_project.yml file at /media/felipe/DATA/Repos/DBT_tutorial/jaffle_shop/dbt_project.yml
Configuration:
profiles.yml file [OK found and valid]
dbt_project.yml file [OK found and valid]
Required dependencies:
- git [OK found]
Connection:
host: localhost
port: 5433
user: postgres
database: dbt_tutorial
schema: public
search_path: None
keepalives_idle: 0
sslmode: None
Connection test: [OK connection ok]
All checks passed!
dbt run
dbt run
02:45:43 Running with dbt=1.3.0
02:45:43 Partial parse save file not found. Starting full parse.
02:45:43 Found 2 models, 4 tests, 0 snapshots, 0 analyses, 289 macros, 0 operations, 0 seed files, 0 sources, 0 exposures, 0 metrics
02:45:43
02:45:44 Concurrency: 1 threads (target='dev')
02:45:44
02:45:44 1 of 2 START sql table model public.my_first_dbt_model ......................... [RUN]
02:45:44 1 of 2 OK created sql table model public.my_first_dbt_model .................... [SELECT 2 in 0.11s]
02:45:44 2 of 2 START sql view model public.my_second_dbt_model ......................... [RUN]
02:45:44 2 of 2 OK created sql view model public.my_second_dbt_model .................... [CREATE VIEW in 0.06s]
02:45:44
02:45:44 Finished running 1 table model, 1 view model in 0 hours 0 minutes and 0.28 seconds (0.28s).
02:45:44
02:45:44 Completed successfully
02:45:44
02:45:44 Done. PASS=2 WARN=0 ERROR=0 SKIP=0 TOTAL=2
Criando modelo
Para criar um novo modelo, basta criar um arquivo .sql
na pasta models
. Exemplo: models/customer.sql