Published

⭐⭐ LA CUÑA — el catálogo gobernado sobre fuentes disgregadas

Connect any source, model it as an ontology, transform it, and operationalize it, analytics, automation and machine learning, under one governed, self-hostable roof. --- Most teams stitch the...

⭐⭐ LA CUÑA — el catálogo gobernado sobre fuentes disgregadas

Sesión del owner, 2026-08-07. Ésta es la cuña pulida del producto: qué duele
en el cliente, qué le vendemos, y por qué la arquitectura que tenemos es la que
responde a eso y no otra.

Manda sobre value-wedge.md, que dice cosas correctas pero está
escrito sobre el primitivo Pod, ya suprimido. Y se apoya en la tesis afilada:
platform-thesis.md §«LA TESIS AFILADA».


0 · El dolor, dicho como lo vive el cliente

No es «mis queries van lentas». Es:

«Mi información está disgregada y mis agentes no tienen contexto.»

Un cliente empresarial típico tiene, a la vez:

DóndeQué
PostgreSQL / MySQL / SQL Serverlas tablas operacionales
S3 / Azure Blob / GCSun lakehouse con Parquet / Delta / Iceberg
Kafkalos flujos en tiempo real
Snowflake / BigQuery / Redshiftel almacén analítico que ya compró
Google Workspace / Microsoft 365documentos, correos, PDFs — no estructurado

Nadie tiene UN almacén. Los tiene todos. Y el contexto que un agente necesita para responder bien vive repartido entre ellos, con permisos distintos en cada uno.


1 · La arquitectura, de punta a punta

[ Fuentes Disgregadas ] ──▶ ( Conectores Trino ) ──▶ [ Catálogo Gobernado Nativo ] ──▶ ( Proyección Ontológica ) ──▶ [ Grafo · Neo4j ] ──▶ [ Agentes · LLMs · Humanos ]
  S3 · Postgres · Kafka        abstracción                RBAC · linaje                   mapeo de entidades           latencia de ms
  Snowflake · Mongo · …        ZERO-COPY                  política · metadata                                          contexto

🏁 PROBADO EN VIVO — 2026-08-07

No es un diagrama: es una query que corrió. Tres fuentes en UNA sola sentencia:

FuenteDónde viveFilas
Iceberg / R2el Warehouse gobernado, por nuestra cara (/api/iceberg)3
PostgreSQL / Neonus-east-1 — una fuente real del Data Gateway5
tpchconector interno de Trino25

Y un JOIN correlacionado Iceberg × Postgres devolvió norte=6, sur=3 — correcto.
Sin mover un byte. El puente que lo hace posible —de una fuente del Data Gateway
a un catálogo de Trino— es
scripts/dataspaces/trino-connector-from-source.ts.

⚠️ Y midiendo se cayó una premisa operativa: de las 14 fuentes conectadas,
8 tienen conector de Trino y 6 no (excel, dynamodb, restapi, azure
CosmosDB, hubspot, hbase). Peor: la Postgres que la UI daba por sana
discovery_complete, 210 tablas— tiene la credencial ilegible (no descifra
con la clave actual). La metadata dice sano y el secreto dice que no, y ningún
chequeo de salud que sólo mire metadata lo ve.

Cuatro propiedades, y ninguna es retórica:

  1. No hay migración. Trino se enchufa donde el dato ya vive. El cliente no mueve un byte para empezar.
  2. Una sola sintaxis. Todas las fuentes bajo un punto de acceso único, en SQL.
  3. Onboarding en minutos. El cliente da credenciales y el catálogo mapea la metadata de la organización.
  4. Y la que importa: la gobernanza es NUESTRA, no de cada fuente. El catálogo nativo aplica RBAC, linaje y política sobre fuentes heterogéneas — que es exactamente lo que ninguna de esas fuentes puede hacer por las demás.

2 · ⭐ Por qué Trino y no otra cosa: la arquitectura desacoplada por conectores

Adoptar Trino no fue comprar un motor rápido. Fue comprar una frontera de integración que ya existe y está mantenida por el ecosistema:

Un único clúster de Trino puede consultar, EN LA MISMA SENTENCIA SQL, un Delta
Lake sobre S3, una base PostgreSQL y un clúster de Kafka.

Eso es lo que convierte «el cliente tiene sus datos en siete sitios» de problema en característica. Y viene con su insignia de madurez en gobernanza y seguridad: no hay que construir el control de acceso por fuente, se hereda del punto único.

El equivalente sin Trino sería escribir un integrador por sistema, un mapeo de permisos por modelo de seguridad y un job de sincronización por fuente. Eso es lo que un equipo pequeño no puede permitirse — y es la razón presupuestaria, no estética, por la que la pila abierta es la palanca.

3 · ⭐⭐ La cuña frente a Stardog — y es ESTRUCTURAL, no de producto

Stardog apunta a un mercado parecido. La diferencia no es de calidad: es de dónde se apoyan.

Stardog (y toda capa semántica sobre catálogo ajeno)Carbon
Sobre qué construye el grafoel catálogo de Databricks / Snowflake / el que seael catálogo PROPIO
Cómo llega la metadatase IMPORTA — ETL de metadatos con job programadose PROYECTA — deriva; si se pierde, se reproyecta
Permisos y políticashay que reimplementarlos o aproximarlos: viven en el sistema de otrose HEREDAN por relación — mismo securable, misma política
Linajese reconstruye parseando SQL ajenose emite desde la escritura
Frescurano se puede garantizar: no están en el camino del datose garantiza: sí estamos
Fuentes que no son un almacén (Kafka, Mongo, ficheros)dependen de que el almacén ajeno las haya catalogadoconector directo

El resultado, en una frase

Tener el catálogo enterprise de forma NATIVA es lo que nos permite proyectar
ontología, permisos, políticas, gobernanza, linaje y dato — nativamente, y en una
sola cadena de custodia desde la fuente hasta el nodo del grafo.

Ésa es la razón de poseer el catálogo. No la escala. No la velocidad. La
PROYECTABILIDAD.

Y simplifica la ecuación de forma desproporcionada para una plataforma cloud: donde el competidor necesita un integrador por almacén ajeno + un mapeo de permisos por modelo de seguridad + un job que siempre va tarde, nosotros no necesitamos ninguno de los tres.

4 · Lo que el cliente compra, dicho sin la palabra «plataforma»

«Tengo los datos en siete sitios y mis agentes responden mal. Conecto mis fuentes,
y en semanas mis agentes responden bien y puedo demostrar por qué

No compra velocidad. Si quisiera velocidad o infraestructura de datos completa, se iría a Databricks o Snowflake, y haría bien. ⇒ no pasa nada por no igualarles en consulta analítica: ése no es el producto.


5 · 🔴 LO QUE ESTA CUÑA NO CUBRE TODAVÍA, y hay que decirlo

Un documento de posicionamiento que sólo lista fortalezas no sirve para decidir. Tres huecos medidos, no supuestos:

⚠️ ① Trino NO tiene conectores para el no estructurado

La lista de fuentes de §0 incluye «documentos, correos y PDFs en Google Workspace o Microsoft 365», y el diagrama los hace pasar por «Conectores de Trino». Eso hoy no existe.

El catálogo de conectores de Trino cubre fuentes tabulares o semi-estructuradas consultables: JDBC (Postgres, MySQL, SQL Server, Oracle, Snowflake, Redshift…), almacenes de objetos con formato tabular (Iceberg, Delta, Hive, Hudi), Kafka, MongoDB, Elasticsearch/OpenSearch, Cassandra, Pinot, Druid… y Google Sheets. No hay conector de Gmail, Drive, SharePoint, OneDrive ni PDF.

La mitad no estructurada de la cuña necesita OTRA vía de entrada — una ingesta que aterrice documentos como tablas y/o embeddings antes de que el catálogo pueda gobernarlos. Es trabajo real y no está hecho. Venderlo como «un conector más» sería prometer una pieza que no existe.

(Lo que sí es cierto y no cambia: una vez aterrizado, el gobierno y la proyección son los mismos. El hueco está en la puerta, no en la casa.)

⚠️ ② «Zero-copy» tiene un precio que aparece en producción

Federar sin mover datos es cierto y significa que cada query cruza la red hasta la fuente y compite con la carga operacional del cliente. Un JOIN entre su Postgres de producción y su lake lo paga su Postgres de producción. La respuesta de la industria es materializar lo caliente — o sea, acabar moviendo algunos datos, con criterio y medido. La promesa correcta es «no hay migración PARA EMPEZAR», no «no hay copia, nunca».

⚠️ ③ El pushdown decide si la federación es usable, y es por conector

Trino empuja filtros y agregaciones a la fuente cuando el conector lo soporta, y el soporte varía mucho entre conectores. Sin pushdown, un JOIN federado se trae la tabla entera por la red. ⇒ la calidad de la federación no es una propiedad de Trino: es una propiedad de CADA conector, y hay que medirla fuente a fuente antes de prometerla en una demo.

⚠️ ④ La cara gobernada cuesta ~3,4 s por query — y es TOPOLOGÍA, no diseño

Medido el 2026-08-07 desde el coordinador, aislando cada tramo:

ms
SELECT 1 — nada externo459
tpch — conector interno de Trino842
carbon — el Warehouse por nuestra cara3.956
carbon otra vez3.459 ⇒ apenas cachea
SHOW TABLES FROM carbon…sólo catálogo, CERO datos3.804

La última fila es la que diagnostica. Listar tablas cuesta prácticamente lo mismo que leerlas ⇒ el coste no está en traer el dato de R2: está en la ida y vuelta al CATÁLOGO. Y la cadena cruza tres nubes:

Trino (GKE · europe-west1) → /api/iceberg (Vercel) → Lakekeeper (Railway) → R2 (WEUR)

~3,4 s fijos por query, puramente por dónde está desplegada cada pieza. No es culpa de Trino (459 ms de suelo) ni de que la gobernanza viva en la cara —que es la decisión correcta y el diferencial del producto— sino de que la cara está lejos.

Por qué importa aquí y no en otro sitio: para el perfil batch/ELT que la proyección necesita, 3,4 s por query es irrelevante. Para la promesa de §1 —«onboarding en minutos» y la demo que la vende— una demo donde cada consulta tarda 4 segundos es una mala demo. Y para la federación de §5·③ se suma a cada fuente.

Es reducible sin tocar la arquitectura: co-locar la cara y el catálogo con el motor, y cachear metadata en el conector. No entra en ninguna fase todavía; se anota con número para que la decisión se tome con el dato y no con la sensación.


5·bis · 🔴 DECISIONES DEL OWNER — 2026-08-07

A · Las fuentes sin conector nativo de Trino quedan DEPRECADAS y sin soporte

excel · dynamodb · restapi · azure (CosmosDB) · hubspot · hbase. Por ahora. No es que falte configurarlas: no existe el conector. Con esto el alcance del catálogo queda acotado a lo que Trino sabe hablar, y el hueco §5·① deja de ser una promesa a medias y pasa a ser un límite declarado.

⚠️ Y con ello la mitad no estructurada de §0 sale del alcance inmediato: sin conector para Drive/Gmail/SharePoint/PDF, esa entrada necesita otro mecanismo que todavía no existe. Decir el límite es lo que permite venderlo sin mentir.

B · «Un catálogo por fuente conectada» es un error — pero el mecanismo no es el que parece

La intuición es correcta y el mecanismo hay que corregirlo, porque cambia qué se hace:

En Trino, un catálogo ES una instancia de conector configuradaun catálogo postgresql apunta a UN servidor. No existe un catálogo de Trino que abarque varias fuentes heterogéneas — es su modelo, no una decisión nuestra
Unity Catalog hace LO MISMOLakehouse Federation crea un CONNECTION y luego un FOREIGN CATALOG por cada base externa. Uno por fuente. Horizon, igual

Lo que ellos tienen no es «muchas fuentes, un catálogo»: es que el catálogo de conector es un DETALLE DE IMPLEMENTACIÓN que el usuario nunca ve. El usuario ve una jerarquía catálogo.esquema.tabla con un solo modelo de gobernanza.

⭐ La consecuencia de diseño, y es la que importa

Los catálogos de Trino dejan de ser la superficie. La superficie es NUESTRO
catálogo (Index)
, que presenta todas las fuentes en una jerarquía y aplica una sola
gobernanza. Los catálogos de Trino pasan a ser fontanería que se crea y se destruye
con el alta y la baja de una fuente — y que nadie nombra en una query.

Es, además, coherente con la cuña: si el usuario tuviera que saber en qué catálogo de
Trino vive cada tabla, le habríamos trasladado la disgregación en vez de
resolverla
.

C · El techo real no era el número de catálogos: era el REINICIO

Y sí tiene solución. Verificado en la doc de Trino 470:

catalog.management=dynamic
CREATE CATALOG / DROP CATALOG en caliente, sin reiniciar✅ quita el techo
Marcado experimental«the syntax might change and be backward incompatible»
⚠️ La sentencia completa se registra y se ve en la Web UI — credenciales incluidasriesgo real con credenciales de cliente
Fuga de recursos al hacer DROP⭐ documentada sólo para Hive/Iceberg/Delta/Hudi (object storage). NO para los conectores JDBC — que son justo los de la cuña

Corrige lo que el runbook daba por bloqueante: para federar bases de cliente (postgres/mysql/sqlserver) la fuga no aplica. Lo que queda en pie es la exposición de credenciales en el texto de la sentencia, que no se resuelve apagando la Web UI (la sentencia sigue yendo al log de queries) y es una decisión de riesgo, no técnica.


6 · Qué exige esto del roadmap, en orden

Con la cuña así, el orden deja de ser el del runbook de absorción y pasa a ser éste:

Por qué
1Warehouse listo con Trino corriendoes el punto de acceso único; sin él no hay cuña
2Unos cuantos conectores vivos y sanosla federación se demuestra, no se declara. Y el pushdown se mide por conector (§5·③)
3La vía de entrada del no estructuradoel hueco de §5·① — sin ella la cuña sólo cubre la mitad
4La proyección catálogo → grafohoy somos inmaduros para abrirla, y sin 1-3 no tendría qué proyectar
5Absorber Neo4j al cluster K8s como motor del grafodecidido; llega con 4

⚠️ Y una consecuencia de la decisión «Carbon SQL = Trino SQL» (ver platform-thesis.md): las 8 divergencias de dialecto se invierten. Dejan de ser «a Trino le faltan 8 cosas» y pasan a ser «nuestras superficies emiten dialecto DuckDB y tienen que emitir Trino». La lista blanca que hay que hacer cumplir es la de Trino. Ver lib/compute/dialect-divergence.ts.