Cómo crear un ETL con Chat GPT-4 en 5 pasos (o prompts)

Jean Boudeguer

17-03-2023

17-03-2023

17-03-2023

Tecnología

Tecnología

Tecnología

Tecnología

Post recientes

Post recientes

Post recientes

Cómo crear un ETL con Chat GPT-4 en 5 pasos (o prompts)

Descripción de la imagen

Como muchos, he estado rallando con Chat GPT-3 y ahora con su versión 4. Lejos lo que más cuesta con toda herramienta nueva es poder ver las posibilidades. Cuál es el alcance de una herramienta como esta. Debo decir que paso más tiempo acá que en Google, cosa que no pasaba hace 20 años.

En un principio le pedía que me enseñara a hacer cosas, un poco parecido a lo que uno hace con las búsquedas en Google. Dividimos el problema y vamos aprendiendo poco a poco hasta resolverlo.

Ejemplo de prompts con pudor: cómo se hace un request en la librería fetch.

Pero después perdí el pudor y le empecé a pasar el problema completo:

Ejemplo sin pudor: agrégale “ al principio y al final de cada elemento de esta lista (y le paso la lista)

P5qmGgkXqsja3eY6C, XGJJaZa9eaoXNoogh, 8gCsWXzuHZ9TntYFp, Ehoe77ncWkCWCrYZ6, tMeMRJyAiaSdfxpWG

y me retorna:

"P5qmGgkXqsja3eY6C", "XGJJaZa9eaoXNoogh", "8gCsWXzuHZ9TntYFp", "Ehoe77ncWkCWCrYZ6", "tMeMRJyAiaSdfxpWG"

Hoy me propuse hacer algo un poco más complejo: un migrador de datos de un sistema a otro (caso real).

Uno donde se usa una API para extraer datos de un sistema, para luego descargar un Excel con un procesamiento de esos datos. La idea era hacerlo completamente vía prompts (un texto de entrada/instrucción) via chat.openai.com y funcionó. Sin programar ni una línea de código (pero sí siendo competente en él).

La empresa y los endpoints han sido modificados pero el resto es copy paste de esa interacción. Si bien intenté con la última instrucción hacer este post automático (escribe un artículo para un blog con la interacción de arriba), preferí hacerlo yo manualmente.

A continuación copio las preguntas que le hice. En cada prompt me da una respuesta que voy analizando (yo humano) y preguntando más cosas para sofisticarlo hasta llegar donde quiero.

Disclaimer: no me esforcé mucho en escribir bien la pregunta, lo cual le da más mérito al algoritmo.

## Prompt 1
Quiero hacer un migrador de datos desde una API a un excel en nodeJS.

La idea es ir a buscar a este endpoint
https://apicompany.com/es/api/posts/?empresa=324&ano=2023&mes=1
con un "method": "GET" y "Authorization": "Token " + TOKEN

Y luego de obtener la data, procesarla y pasarla a un Excel.
Tengo instalado Node en mi Mac y quiero que me des el código,
e instrucciones del setup del entorno en mi computador, carpetas o
librerías que tenga que usar e instrucciones en línea de comandos
para Mac OS.

Me dio las instrucciones y usó la librería xlsx, yo prefiero ExcelJS.

## Prompt 2
usa la librería exceljs en vez de xlsx

El resultado que da la API no es un arreglo, la data está dentro de un atributo. ¡Además la API tiene paginación!

## Prompt 3
agrega la condición que en response.next viene el siguiente set de datos,
agrega esta condición para que itere hasta llegar a un next null
cambiando la variable page

Me di cuenta que la cantidad de datos que retorna era muy poca… hay que subir eso.

## Prompt 4
agrega la condición de que en response.count viene la cantidad
total de registros y puedes agregar la opción de page_size: 100

Vamos mejorando, ahora procesemos la data correcta.

## Prompt 5
un ejemplo de resultado de la API es este
{
"count": 369,
"next": "https://apicompany.com/es/api/posts/?ano=2023&empresa=324&mes=1&page=2&page_size=1",
"previous": null,
"results": [
{
"id": 47006439,
"periodo": 101649,
"items": [
{
"tipoItem": "",
"glosa": null
},
{
"tipoItem": "",
"glosa": null
}
],
"detalles":
"fechaCreacion": "2016-12-07T19:03:16.475379-03:00",
"rut": "9-1",
"nombre": "Juan",
"apellidoPaterno": "Perez",
"apellidoMaterno": "Cotapos",
"sexo": "M",
"fechaNacimiento": "1985-08-15",
"nacionalidad": "CL",
"email": "juan@clay.cl"
}
}
]
}

quiero que agregues en el excel la columna nombre, apellido materno,
apellido paterno y rut desde detalles
Y que iteres sobre el atributo items para sacar el tipoItem.
Debe haber una fila por cada tipoItem

The end, ejecuto node index.js y se demora un poco (son hartos datos) y me retorna el Excel que quiero… son 190 mil filas.

## Prompt 6
Escribe un artículo para un blog con la interacción de arriba

Resultado Final

Para empezar, necesitarás instalar algunas dependencias y librerías para poder realizar esta tarea. Aquí te dejo los pasos para hacerlo:

  1. Instalar Node.js: Lo primero que debes hacer es instalar Node.js en tu Mac. Puedes descargarlo desde el sitio oficial: https://nodejs.org/es/. Simplemente descarga la versión recomendada para tu sistema operativo e instálala.

  2. Crear un directorio para tu proyecto: Ahora crea un directorio en tu computadora donde guardarás tu proyecto. Por ejemplo, puedes crear una carpeta llamada “migrador-api-excel” en tu escritorio.

  3. Inicializar el proyecto: Entra a la carpeta que acabas de crear en tu terminal y ejecuta el siguiente comando para inicializar un proyecto de Node.js:

npm init -y

Esto creará un archivo package.json con la configuración básica para tu proyecto.

  1. Instalar las dependencias necesarias: Ahora necesitas instalar las dependencias que usarás en tu proyecto. En este caso, necesitarás la librería axios para hacer las peticiones HTTP a la API, y la librería ExcelJS para generar el archivo de Excel. Ejecuta el siguiente comando en tu terminal:

npm install axios exceljs

Esto instalará las dependencias y las añadirá al archivo package.json.

  1. Crear el archivo index.js: Ahora crea un archivo llamado index.js en la carpeta de tu proyecto y ábrelo con tu editor de código favorito.

  2. Escribir el código: Ahora puedes escribir el código para hacer la petición HTTP a la API, procesar los datos y generar el archivo de Excel. Aquí te dejo un ejemplo:

const axios = require('axios');
const ExcelJS = require('exceljs');

const TOKEN = 'TU_TOKEN';
const EMPRESA_ID = '324';
const PAGE_SIZE = 100;
let page = 1;
let totalRows = 0;

const getData = async () => {
const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet('Posts');

// Añadir los encabezados
worksheet.columns = [
{ header: 'Nombre', key: 'nombre' },
{ header: 'Apellido Paterno', key: 'apellidoPaterno' },
{ header: 'Apellido Materno', key: 'apellidoMaterno' },
{ header: 'Rut', key: 'rut' }
{ header: 'Tipo Item', key: 'tipoItem' },
];

const url = `https://apicompany.com/es/api/posts/?empresa=${EMPRESA_ID}&ano=2023&mes=1&page_size=${PAGE_SIZE}&page=${page}`;
const response = await axios.get(url, {
headers: {
Authorization: `Token ${TOKEN}`,
},
});

totalRows = response.data.count;

while (true) {
// Añadir los datos
response.data.results.forEach(row => {
row.items.forEach(item => {
worksheet.addRow({
nombre: row.detalles.nombre,
apellidoPaterno: row.detalles.apellidoPaterno,
apellidoMaterno: row.detalles.apellidoMaterno,
rut: row.detalles.rut,
tipoItem: item.tipoItem
});
});
});

if (response.data.next === null) {
// Si no hay más páginas, salir del ciclo
break;
}

// Actualizar la página para la próxima iteración
page++;

// Obtener los datos de la siguiente página
const nextUrl = response.data.next;
const nextPage = nextUrl.split('page=')[1];
const newUrl = `${url}&page=${nextPage}`;
const newResponse = await axios.get(newUrl, {
headers: {
Authorization: `Token ${TOKEN}`,
},
});

response.data = newResponse.data;
}

const filename = 'posts.xlsx';
await workbook.xlsx.writeFile(filename);
console.log(`Archivo ${filename} generado correctamente. Se encontraron ${totalRows} registros.`);
}

getData().catch(error => {
console.error(error);
});

Este código hace una petición HTTP a la API con los parámetros que especificaste. Luego procesa los datos obtenidos y genera un archivo de Excel con ellos. Finalmente, guarda el archivo en la carpeta de tu proyecto.

  1. Ejecutar el código: Para ejecutar el código, simplemente abre tu terminal, entra a la carpeta de tu proyecto y escribe el siguiente comando:

node index.js

Esto ejecutará el código que acabas de escribir y generará el archivo de Excel.

Espero que esto te haya sido útil. ¡Buena suerte con tu proyecto!

#Suscríbete a nuestro newletter

No te quedes fuera

Comienza la transformación digital hoy

Con más de 8 años de experiencia, Clay es la fintech que necesitas para llevar las finanzas de tu empresa al siguiente nivel.

Visualizando las finanzas de la empresa desde el celular o móbil

Comienza la transformación digital hoy

Con más de 8 años de experiencia, Clay es la fintech que necesitas para llevar las finanzas de tu empresa al siguiente nivel.

Visualizando las finanzas de la empresa desde el celular o móbil

Comienza la transformación digital hoy

Con más de 8 años de experiencia, Clay es la fintech que necesitas para llevar las finanzas de tu empresa al siguiente nivel.

Visualizando las finanzas de la empresa desde el celular o móbil

Comienza la transformación
digital hoy

Con más de 8 años de experiencia, Clay es la fintech que necesitas para llevar las finanzas de tu empresa al siguiente nivel.

Visualizando las finanzas de la empresa desde el celular o móbil