Extensiones conocidas de Ossie
Cada entrada de custom_extensions[]
de Ossie lleva un vendor_name + un payload JSON data de forma libre.
Saiku reserva el slot vendor_name: SAIKU para un pequeño vocabulario
tipado que impulsa sobrescrituras de visualización, visibilidad basada en
roles, y redacción graduada de PII — todo desde un único blob escrito por
admin en el campo / métrica / dataset.
Se entrega en saiku v4.7 como saiku#1409.
Los tres conocidos
Formato de archivo
Los tres cabalgan bajo una única entrada de extensión vendor_name: SAIKU.
Múltiples claves pueden coexistir en un blob:
datasets:- name: fact_pharma source: FACT_PHARMA fields: - name: NETREVENUE expression: dialects: [{ dialect: ANSI_SQL, expression: NETREVENUE }] custom_extensions: - vendor_name: SAIKU data: | { "display": { "caption": "Net Revenue", "format": "$#,##0.00", "unit": "USD" }, "roles": { "allow": ["ROLE_SALES", "ROLE_ANALYST"] }, "pii": { "level": "redact" } }Cada clave es independientemente opcional. Un blob con solo pii definido
se comporta exactamente como el blob heredado de solo-PII; los otros
consumidores no ven nada y no hacen nada.
saiku.display — sobrescrituras de presentación
custom_extensions:- vendor_name: SAIKU data: | { "display": { "caption": "Net Revenue", "format": "$#,##0.00", "unit": "USD", "hidden": false } }| Clave | Tipo | Efecto |
|---|---|---|
caption | string | Sobrescribe el label del campo / el displayName de la métrica en la respuesta del schema de IA. Gana sobre los renombrados de <datasource>.generated.json. |
format | string | Patrón de formato de número (sintaxis DecimalFormat) que el workbench aplica al renderizar valores. |
unit | string | Pista de unidad de forma libre ("USD", "hours", "%"). Se superpone al campo unit del schema. |
hidden | boolean | true elimina el campo / métrica del schema de IA por completo. |
Hidden vs PII
saiku.roles — visibilidad basada en roles
custom_extensions:- vendor_name: SAIKU data: | { "roles": { "allow": ["ROLE_SALES", "ROLE_ANALYST"], "deny": ["ROLE_EMBED_GUEST"] } }| Clave | Tipo | Efecto |
|---|---|---|
allow | string[] | Vacío / ausente = permite a todos los llamadores. No vacío = el llamador debe tener al menos un rol coincidente. |
deny | string[] | Sobrescribe a allow. Un llamador con cualquier rol denegado pierde el acceso. |
Las cadenas de rol coinciden con los nombres de autoridad de Spring
Security (ROLE_ADMIN, ROLE_SALES, etc.). Saiku no dicta una
convención de nombres más allá de eso — elija nombres que coincidan con
el proveedor de identidad de su operador.
saiku.pii — PII graduado
custom_extensions:- vendor_name: SAIKU data: '{"pii":{"level":"hash"}}'Extiende el booleano heredado "pii": true a una forma graduada. Tres
niveles:
| Nivel | Comportamiento en el cable | Use cuando … |
|---|---|---|
redact | El valor es null. Igual que el booleano heredado "pii": true. | Cualquier cosa sensible que no debe salir del servidor. |
mask | El valor se reemplaza con un token fijo (p. ej. "***") preservando la forma de fila. | La celda debe estar visiblemente presente pero oscurecida. |
hash | El valor es un prefijo hex de hash con clave determinista (preserva la unibilidad). | Los joins aguas abajo necesitan un valor estable; el original es secreto. |
Compat hacia atrás: "pii": true y "pii": {"level": "redact"} son
equivalentes — la forma heredada mantiene su significado exacto.
Reglas de extensibilidad
Fijadas en v4.7 como contrato estable:
- Las claves desconocidas dentro del blob SAIKU hacen round-trip intactas. Un conocido futuro puede entregarse en un exportador más nuevo sin ninguna release coordinada — los consumidores más antiguos ignoran la clave en lugar de dar error.
- La primera entrada SAIKU gana. Si un YAML declara múltiples
entradas
vendor_name: SAIKUen el mismo objeto, la primera es autoritativa y el resto se ignoran. La fusión entre entradas crearía ambigüedad de orden. - Los proveedores no-SAIKU hacen round-trip sin cambios.
vendor_name: DBT,vendor_name: PREFECT, y el blob de cualquier otro integrador fluye a través del arraycustomExtensions[]del schema de IA tal como se escribió.
Convención de espacio de nombres
vendor_name: SAIKU está reservado para los conocidos escritos por
Saiku. Los integradores de terceros DEBERÍAN usar sus propios nombres de
proveedor para que los consumidores aguas abajo puedan distinguir las
fuentes sin nomenclatura coordinada.
Dónde aflora
Las superposiciones fluyen a dos sitios hoy:
- Navegador de schema del workbench — lee el DTO directamente, así que el caption / format / unit de visualización se renderizan en el árbol y el inspector.
- Schema Ossie de IA (
GET /ai/ossie/schema/…) — los campos y métricas ocultos desaparecen; el caption + unit de visualización se superponen a los labels que el LLM ve.