Salta el contingut

Pràctica 5: Pipeline ETL - API a Base de Dades

Objectiu

Crear un pipeline ETL que extregui dades d'una API pública, les transformi i les carregui en una base de dades PostgreSQL.

Descripció

Extreure dades d'usuaris d'una API (JSONPlaceholder), netejar i transformar les dades, i carregar-les a PostgreSQL.

Part A: Preparació de la base de dades

Crear contenidor PostgreSQL:

docker run --name n8n-postgres-test \
  -e POSTGRES_PASSWORD=postgres \
  -e POSTGRES_DB=n8n_test \
  -p 5432:5432 \
  -d postgres:15

Crear taula:

CREATE TABLE usuaris (
    id SERIAL PRIMARY KEY,
    user_id INTEGER UNIQUE,
    nom VARCHAR(100),
    username VARCHAR(50),
    email VARCHAR(100),
    ciutat VARCHAR(100),
    empresa VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Part B: Configurar credencials a N8N

  1. Credentials > New Credential
  2. Seleccionar Postgres
  3. Configurar:
  4. Host: localhost (o IP del contenidor)
  5. Database: n8n_test
  6. User: postgres
  7. Password: postgres
  8. Port: 5432

Part C: Crear el workflow ETL

Nodes del workflow:

  1. Schedule Trigger
  2. Configurar: cada 1 hora
  3. Per testing: usar Manual Trigger

  4. HTTP Request - Extract

  5. Method: GET
  6. URL: https://jsonplaceholder.typicode.com/users
  7. Name: "Extreure_Usuaris"

  8. Function - Transform

    // Netejar i transformar dades
    const items = $input.all();
    
    return items.map(item => {
      const data = item.json;
      return {
        json: {
          user_id: data.id,
          nom: data.name,
          username: data.username,
          email: data.email,
          ciutat: data.address.city,
          empresa: data.company.name
        }
      };
    });
    

  9. Postgres - Load

  10. Operation: Insert
  11. Table: usuaris
  12. Columns: automàtic
  13. Options > On Conflict: "Update"

Part D: Verificació

SELECT * FROM usuaris;
SELECT COUNT(*) FROM usuaris;
SELECT ciutat, COUNT(*) as total FROM usuaris GROUP BY ciutat;

Repte addicional

  • Afegir node de validació abans de carregar
  • Implementar gestió d'errors
  • Afegir logs a una taula separada
  • Crear un report d'execució que s'enviï per email

Lliurables

  • Workflow exportat
  • Script SQL amb l'estructura de taules
  • Captures de dades carregades a PostgreSQL
  • Document explicant les transformacions realitzades