Un pipeline ELT para centralizar datos bibliográficos de la API pública de Open Library en una base de datos analítica local, permitiendo exploración estructurada de metadata de libros y autores para apoyar decisiones basadas en datos y su consumo analítico posterior.
Arquitectura y Stack
- Ingesta → Fuente de API REST de
dltconrest_api_resources() - Almacenamiento → DuckDB (base de datos analítica embebida, basada en archivo)
- Transformación y Consultas → Capa de abstracción SQL de Ibis
- Visualización → Altair dentro de un notebook interactivo de Marimo
- Entorno →
uvcon un lock file determinista
Logros Técnicos Clave
Ingesta declarativa de API REST — Se configuró una fuente de API REST de dlt usando @dlt.source y rest_api_resources(), con una disposición de escritura replace que garantiza cargas idempotentes de refresco completo e inferencia automática de esquema a partir de respuestas JSON anidadas (por ejemplo, la tabla hija books__authors autogenerada por dlt).
Aislamiento de dependencias y herramientas modernas — Dependencias del proyecto declaradas en pyproject.toml y bloqueadas con uv.lock vía uv, asegurando entornos completamente reproducibles. Los secretos y la configuración en tiempo de ejecución se aíslan en .dlt/secrets.toml y .dlt/config.toml (excluidos del control de versiones), siguiendo buenas prácticas de seguridad para el manejo de credenciales.
Capa de consultas estructurada — Las respuestas crudas anidadas de la API son normalizadas por dlt en tablas relacionales de DuckDB (books, books__authors). Una capa de consultas Ibis se sitúa encima para realizar agregaciones a nivel autor (conteo de libros por autor, ranking top-10), desacoplando el almacenamiento crudo del consumo analítico y proporcionando una abstracción SQL reutilizable lista para evolucionar hacia un modelo dimensional.