Cómo instalar dbt con Docker y PostgreSQL
En este artículo, cubriré la instalación de dbt usando Docker y PostgreSQL como fuente de datos y destino.
Te explicaré cada paso con suficiente detalle para que puedas reproducirlo sin errores.
Si algo sale mal, dígame para que pueda actualizar el contenido y mantener esta guía correcta el mayor tiempo posible
1. Comprueba la instalación de Docker
Primero, verifique que Docker esté correctamente instalado en su computadora.
Para hacer esto, puede escribir los siguientes dos comandos:
docker --version
Docker version 20.10.12, build e91ed57docker-compose --version
Docker Compose version v2.2.3
Si no es así, lo más sencillo es instalar Docker Desktop (que también cuenta con una cómoda interfaz gráfica) e instalar la versión correspondiente a tu sistema operativo.
Probé las manipulaciones propuestas en Windows 10, Ubuntu 20.04 y Mac OS X Montery.
2. Cree el archivo de redacción de Docker
Por ahora (marzo de 2023), no existe una receta oficial de Docker para configurar un entorno Docker local para dbt. Tenemos que confiar en las imágenes de Docker de la comunidad y construir nuestra configuración.
Usaremos la imagen de Docker del repositorio Article 1 DataOps Github [1], donde puede encontrar varias imágenes de Docker que se ajusten a sus necesidades.
Comencemos fácil y usemos la imagen "completa" en una configuración 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 archivo en una carpeta llamada dbt_app . Luego, usando una terminal, puede iniciar el pedido de Docker para instalar 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.
Finalmente, también puede mirar dentro del cliente de la interfaz de usuario de Docker Desktop: si la barra de estado es verde, ¡el motor se inicia y funciona como se esperaba!
VERDE = ✅
Una vez que la imagen esté instalada, en el futuro, solo necesitará la instrucción docker-compose up "como de costumbre".
4. Inicie su proyecto: el comando dbt init
Ahora podemos usar dbt para inicializarse usando el 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 su base de datos PostgreSQL de prueba
Es posible que haya notado que mi configuración de Docker contiene una imagen de postgres con una base de datos. Si bien no es obligatorio , me gustaría que creara vistas y tablas a partir de este tutorial, al igual que con cualquier otra base de datos con la que tenga que trabajar.
Primero, agreguemos algunas tablas y datos a nuestra base de datos:
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: ✅
La configuración de las fuentes de datos debe realizarse en el archivo profiles.yml [3] .
Debido a que ya hemos seleccionado PostgreSQL como nuestro "almacén de datos", dbt ha generado una plantilla para nosotros:
# 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
La propiedad targetconfigura el objetivo principal cuando no lo especifica: como puede leer en el archivo, de forma predeterminada, enviamos las transformaciones dbt a la devconfiguración.
Puede completar la información requerida con la configuración de la configuración de Docker. Puede elegir la cantidad de hilos de acuerdo con la potencia de su computadora. La mayoría de las veces, elegí 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: ✅
Si desea profundizar en el código, puede consultar el repositorio de GitHub [4] que creé para este artículo.
Conclusión: ¿Qué has aprendido?
- Cómo configurar un proyecto dbt con Docker;
- Cómo configurar y preparar una fuente de datos para dbt: aquí, usamos una base de datos PostgreSQL dockerizada
- Cómo ejecutar transformaciones en la base de datos y verificar si funciona.
[1] imagen acoplable dbt
[2] Ejemplos de datos de la documentación de Airbyte
[3] Complemento de Postgres de la documentación de dbt
[4] Repositorio de proyectos , en GitHub
Codificación de nivel superior
¡Gracias por ser parte de nuestra comunidad! Antes de que te vayas:
- Aplaude la historia y sigue al autor
- Ver más contenido en la publicación Level Up Coding
- Curso gratuito de entrevista de codificación ⇒ Ver curso
- Síguenos: Twitter | LinkedIn | Boletin informativo

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































