Ingesta de 5 formatos de origen sin relación temática entre sí (XML, CSV/Excel/Parquet, JSON de API, geoespacial vía OpenStreetMap, y texto+embeddings) hacia Databricks Lakebase, el motor OLTP (Postgres gestionado, Autoscaling) de Databricks — con las 7 tablas resultantes consultables en vivo desde Unity Catalog vía Lakehouse Federation. Cuarto proyecto de la serie, y el primero que trabaja sobre un motor OLTP en vez de OLAP.
XML (RSS), JSON (API Open-Meteo), CSV/Excel/Parquet (datos.gob.ar, INDEC, sample DuckDB), geoespacial (Overpass/OSM) y texto+embeddings (Gutenberg + OpenRouter) se ingestan con upsert hacia 7 tablas en Lakebase, el Postgres administrado y autoscaling nativo de Databricks. Infra completa con Terraform: project → branch → endpoint → catalog. El catálogo registra la base directamente en Unity Catalog vía Lakehouse Federation — consultable en vivo desde SQL/notebooks, sin copiar el dato.
GEOGRAPHY en vez de geometry para los puntos de OSM — las consultas de demo son de distancia real en metros (ST_DWithin, ST_Distance), y geography la calcula directo sobre la esfera terrestre sin reproyectar.(fecha, region, categoria) en vez de replicar el layout ancho del Excel original — el archivo fuente cambia de columnas entre publicaciones, y un esquema normalizado no se rompe con eso.generate_database_credential).dev como fork copy-on-write de production (ttl 48h) — aislamiento probado insertando una fila marcada en dev y confirmando que nunca aparece en production.INET, GEOGRAPHY, VECTOR).ON CONFLICT ... DO UPDATE) escribiendo a Lakebase, el OLTP administrado de Databricks con PostGIS y pgvector habilitados. El puente hacia el lado analítico es Lakehouse Federation: las 7 tablas quedan consultables en vivo desde Unity Catalog sin mover el dato ni armar CDC.| Pregunta típica de entrevista | Dónde está la respuesta |
|---|---|
| ¿Cuándo OLTP y cuándo OLAP? | reglas/03-conceptos-oltp-postgres.md — Lakebase (este proyecto) vs. Delta Lake (los 3 anteriores) |
| ¿Cómo modelás datos heterogéneos? | schemas/*.sql — una tabla por formato, tipo Postgres específico para cada uno |
| ¿Cómo autenticás sin password estática? | OAuth M2M + generate_database_credential — ingestion/_lakebase.py |
| ¿Cómo garantizás idempotencia en la ingesta? | ON CONFLICT ... DO UPDATE en los 5 scripts de ingestion/ |
| ¿Cómo conectás OLTP con el lado analítico? | Lakehouse Federation (databricks_postgres_catalog), no copia CDC |
| ¿Cómo aislás un ambiente de desarrollo? | Branch copy-on-write (dev, fork de production, ttl 48h) |