Como instalar o dbt com Docker e PostgreSQL
Neste artigo, abordarei a instalação do dbt usando Docker e PostgreSQL como fonte de dados e destino.
Vou explicar cada passo com detalhes suficientes para você reproduzi-lo sem erros.
Se algo der errado, por favor me avise para que eu possa atualizar o conteúdo e manter este guia correto o maior tempo possível
1. Verifique a instalação do Docker
Primeiro, verifique se o Docker está instalado corretamente no seu computador.
Para fazer isso, você pode digitar os dois comandos a seguir:
docker --version
Docker version 20.10.12, build e91ed57docker-compose --version
Docker Compose version v2.2.3
Se não for esse o caso, a maneira mais fácil é instalar o Docker Desktop (que também possui uma interface gráfica conveniente) e instalar a versão correspondente ao seu sistema operacional.
Testei as manipulações propostas no Windows 10, Ubuntu 20.04 e Mac OS X Montery.
2. Crie o arquivo de composição do Docker
Por enquanto (março de 2023), não há receita oficial do Docker para configurar um ambiente Docker local para dbt. Temos que confiar nas imagens do Docker da comunidade e construir nossa configuração.
Usaremos a imagem do Docker do repositório Github do Artigo 1 do DataOps [1], onde você pode encontrar várias imagens do Docker que atendem às suas necessidades.
Vamos começar fácil e usar a imagem “completa” em uma configuração docker-compose.yml :
version: '3'
services:
dbt:
image: article1dataops/dbt:latest
volumes:
- .:/usr/app
ports:
- "8080:8080"
# Required for the tutorial
db:
image: postgres
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: my_app
ports:
- "5432:5432"
Para seguir este tutorial, copie este arquivo para uma pasta chamada dbt_app . Em seguida, usando um terminal, você pode iniciar o ask Docker para instalar o dbt:
docker-compose up
docker ps
error during connect: This error may indicate that the docker daemon is not running.: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/json": open //./pipe/docker_engine: The specified file can't be found.
Por fim, você também pode olhar dentro do cliente Docker Desktop UI: se a barra de status estiver verde, o mecanismo foi iniciado e funciona conforme o esperado!
VERDE = ✅
Depois que a imagem estiver instalada, no futuro, você só precisará da instrução docker-compose up “as usual”.
4. Inicie seu projeto: o comando dbt init
Agora podemos usar o dbt para se inicializar usando o comando dbt init [2]:
docker compose run dbt dbt init --profiles-dir /usr/app
# Replace "my_dbt_project" by the name of your dbt project
mv my_dbt_project/* .
rm -r my_dbt_project
5. Configure seu banco de dados PostgreSQL de teste
Você deve ter notado que minha configuração do Docker contém uma imagem postgres com um banco de dados. Embora não seja obrigatório , gostaria que você criasse exibições e tabelas a partir deste tutorial, como com qualquer outro banco de dados com o qual você possa trabalhar.
Primeiro, vamos adicionar algumas tabelas e dados ao nosso banco de dados:
docker-compose exec db psql -U postgres -c "CREATE TABLE users(id SERIAL PRIMARY KEY, name VARCHAR(200), city_code VARCHAR(3));" my_app
docker-compose exec db psql -U postgres -c "INSERT INTO public.users(name, city_code) VALUES('mickael', 'BCN');" my_app
docker-compose exec db psql -U postgres -c "INSERT INTO public.users(name, city_code) VALUES('timmy', 'MAD');" my_app
docker-compose exec db psql -U postgres -c "INSERT INTO public.users(name, city_code) VALUES('jeane', 'PAR');" my_app
docker-compose exec db psql -U postgres -c "CREATE TABLE cities(city_code VARCHAR(3), city VARCHAR(200), country VARCHAR(200));" my_app
docker-compose exec db psql -U postgres -c "INSERT INTO public.cities(city_code, city, country) VALUES('BCN', 'Barcelona', 'Spain');" my_app
docker-compose exec db psql -U postgres -c "INSERT INTO public.cities(city_code, city, country) VALUES('MAD', 'Madrid', 'Spain');" my_app
docker-compose exec db psql -U postgres -c "INSERT INTO public.cities(city_code, city, country) VALUES('PAR', 'Paris', 'France');" my_app
docker-compose exec db psql -U postgres -c "SELECT * FROM users;" my_app
Database Creation: ✅
A configuração das fontes de dados deve ser feita no arquivo profiles.yml [3] .
Como já selecionamos o PostgreSQL como nosso “armazém de dados”, o dbt gerou um modelo para nós:
# profiles.yml
app:
outputs:
dev:
type: postgres
threads: [1 or more]
host: [host]
port: [port]
user: [dev_username]
pass: [dev_password]
dbname: [dbname]
schema: [dev_schema]
prod:
type: postgres
threads: [1 or more]
host: [host]
port: [port]
user: [prod_username]
pass: [prod_password]
dbname: [dbname]
schema: [prod_schema]
target: dev
A propriedade targetconfigura o alvo principal quando você não o especifica: como você pode ler no arquivo, por padrão, enviamos as transformações dbt para o devarquivo configuration.
Você pode preencher as informações necessárias com as configurações da configuração do Docker. Você pode escolher o número de threads de acordo com a potência do seu computador. Na maioria das vezes, escolhi 4:
dev:
type: postgres
threads: 4
host: db
port: 5432
user: postgres
pass: password
dbname: my_app
schema: dev
docker compose run dbt dbt run
docker-compose exec db psql -U postgres -c "\dt" my_app
docker-compose exec db psql -U postgres -c "\dv" my_app
dbt transformations into PostgreSQL Database: ✅
Se você quiser olhar profundamente o código, você pode verificar o repositório GitHub [4] que criei para este artigo.
Conclusão: O que você aprendeu?
- Como configurar um projeto dbt com Docker;
- Como configurar e preparar uma fonte de dados para dbt: aqui, usamos um banco de dados PostgreSQL dockerizado
- Como executar transformações no banco de dados e verificar se funciona.
[1] imagem dbt Docker
[2] Exemplos de dados da documentação da Airbyte
[3] Plug-in Postgres da documentação dbt
[4] Repositório do projeto , no GitHub
Codificação de nível
Obrigado por fazer parte da nossa comunidade! Antes de você ir:
- Bata palmas para a história e siga o autor
- Veja mais conteúdo na publicação Level Up Coding
- Curso gratuito de entrevista de codificação ⇒ Veja o curso
- Siga-nos: Twitter | Linkedin | Boletim de Notícias





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)