Conexión dbt / MetricFlow
Si ya está ejecutando dbt con modelos semánticos de MetricFlow, puede traerlos a Saiku sin remodelar nada. dbt Core 1.12 emite un documento de Open Semantic Interchange junto a sus artefactos de build habituales, y Saiku carga ese archivo tal cual a través de su flujo normal de registro de datasources.
Una vez conectado, todo lo que Saiku expone sobre un modelo Ossie
funciona contra su capa semántica dbt: el workbench,
la API AI Query tipada, las herramientas
MCP, la capa de lenguaje natural /ask, los endpoints de
anomalías y forecast.
Prerrequisitos
- Un proyecto dbt con modelos semánticos de MetricFlow
- dbt Core 1.12 o más reciente — las versiones anteriores no emiten el documento OSI
- El mismo warehouse al que apunta su proyecto dbt
- Una instancia de Saiku en ejecución (Saiku Cloud o auto-alojada) — necesita acceso de escritura al directorio de datasources en el host, o acceso a la API de admin
El recorrido
-
Compile su proyecto dbt. El documento OSI se emite como parte de cualquier comando que dispare un parseo completo —
dbt compile,dbt run,dbt build.Ventana de terminal cd path/to/your-dbt-projectdbt compileEl resultado aterriza en
target/osi_document.json. Es un único archivo JSON que contiene cada modelo semántico que declara su proyecto, en el formato OSI v0.1.1. -
Apunte Saiku a él. Registre un datasource apuntando al archivo JSON y al warehouse al que apunta dbt. En un launcher auto-alojado esto es un archivo
.sds; en Saiku Cloud puede registrarlo mediante la API de admin.<?xml version="1.0" encoding="UTF-8" standalone="yes"?><dataSource><id>orders-ossie-01</id><name>Orders</name><type>OSSIE</type><ossieYaml>/path/to/dbt-project/target/osi_document.json</ossieYaml><location>jdbc:postgresql://your-warehouse:5432/analytics</location><schema>semantic_model</schema><username>saiku_reader</username><password>...</password><advanced>false</advanced><enabled>true</enabled></dataSource>Dos cosas a tener en cuenta:
- El elemento
<ossieYaml>acepta cualquier archivo que el parser YAML de Jackson acepte — YAML y JSON. Apúntelo al archivo exacto que dbt escribió; sin paso de conversión. - El valor de
<schema>es el camponamedel modelo semántico que dbt emite. Para un proyecto nuevo eso es típicamente"semantic_model"(el por defecto de dbt cuando no se da un nombre explícito).
- El elemento
-
Verifique. El modelo aparece en
/ai/ossie/modelsinmediatamente después del siguiente refresco de conexión de Saiku.Ventana de terminal curl -s -b cookies.txt https://your-saiku/rest/saiku/api/ai/ossie/models | jq[{"connectionName": "unknown_Orders","modelName": "semantic_model","factDataset": "orders","datasetCount": 2,"metricCount": 2}] -
Consulte. Cada endpoint REST, herramienta MCP y funcionalidad del workbench funciona ahora contra su capa semántica dbt. Haga una pregunta:
Ventana de terminal curl -s -b cookies.txt -H "X-XSRF-TOKEN: $XSRF" \-H 'Content-Type: application/json' \-X POST https://your-saiku/rest/saiku/api/ai/ossie/query \-d '{"connection": "unknown_Orders","model": "semantic_model","rows": [{"dataset": "customers", "field": "customer_country"}],"values": [{"metric": "total_revenue"}, {"metric": "order_count"}],"sorts": [{"metric": "total_revenue", "direction": "DESC"}]}'
Esa es toda la integración. Sin modelado en la sombra, sin re-declaración, sin pipeline de conversión.
Mantenerse sincronizado
Como dbt escribe osi_document.json en cada compilación, la integración
se mantiene fresca automáticamente:
- Bucle de desarrollo.
dbt compileal guardar (o mediantedbt-watch) mantiene el archivo actual mientras desarrolla métricas. Saiku recoge los cambios a través de la misma ruta de refresco de admin que usa para cubos OLAP. - CI/CD. Conecte su job de CI de dbt para copiar
target/osi_document.jsona la ubicación que su instancia de Saiku lee. En Saiku Cloud, la API de admin acepta subidas directas. - Jobs de dbt en producción. Cada
dbt runen producción escribe un documento fresco. Envíelo junto a sus artefactos de dbt.
Qué pone dbt en el archivo
Cada modelo semántico de su proyecto dbt viene:
- Datasets. Uno por entrada
semantic_models[*]en su YAML de MetricFlow. Incluye el nombre de tabla completamente cualificado, la clave primaria, la descripción, y cada dimensión como un campo. - Métricas. Las métricas simples y de ratio vienen con su expresión SQL. Las métricas acumulativas emiten una advertencia y se descartan (la especificación OSI 0.1.x aún no modela la semántica de ventana).
- Relaciones. La inferencia de joins de MetricFlow (basada en nombres de entidad coincidentes entre modelos semánticos) se convierte en relaciones Ossie explícitas. La regla de auto-join de Calcite de Saiku las recoge en tiempo de consulta.
- Etiquetas. Los atributos
label:de MetricFlow en dimensiones y métricas se trasladan como labels de campo OSI.NETREVENUEen la columna cruda se renderiza como “Net Revenue” en todas partes de Saiku. - Contexto de IA. Cualquier bloque
ai_context:que haya añadido a su YAML de MetricFlow (descripciones, valores de muestra, sinónimos) se expone a través del schema de IA de Saiku para consumidores LLM.
Qué no está en v0.1.1
La especificación OSI en v0.1.1 (lo que dbt 1.12 emite) aún no cubre:
- Métricas acumulativas / rodantes / período-sobre-período
- Métricas anidadas / derivadas que referencian otras métricas
- Funciones de agregación personalizadas más allá de
sum/count/avg/min/max
Estas son lagunas conocidas en la especificación, no en Saiku. A medida que OSI avanza hacia v0.2 con mayor participación de proveedores, estas aterrizarán. La integración las recogerá automáticamente porque Saiku lee el mismo archivo que dbt escribe.
FAQ
¿Necesito instalar algo en el lado de dbt?
No. dbt compile en dbt-core 1.12+ escribe el documento OSI sin
configuración.
¿Y las versiones antiguas de dbt?
Para dbt 1.10 y 1.11, puede convertir su YAML de MetricFlow a YAML de
Ossie con el pequeño conversor de Python en el repositorio de
Saiku.
Una vez que su versión de dbt alcance 1.12, deje el conversor y use
target/osi_document.json directamente.
¿Puedo mezclar modelos Ossie provenientes de dbt y escritos a mano?
Sí. Cada datasource .sds registra un modelo. Apunte algunos a
target/osi_document.json, otros a YAML escrito a mano.
¿Qué pasa si dbt emite un semantic_model con un nombre que no me gusta?
Defina name en el modelo semántico externo en su YAML de MetricFlow —
dbt lo traslada. Si no define uno, dbt usa por defecto
"semantic_model".
Ver también
- API AI Query — modelos Ossie — los endpoints en los que se conecta su modelo proveniente de dbt
- Servidor MCP — el envoltorio de herramientas para LLM
- Ossie / OSI en Apache — la especificación + ejemplos upstream
- MetricFlow en GitHub — el motor de capa semántica de dbt
- Documentación OSI de dbt