Saltearse al contenido

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:

pharma.ossie.yaml
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
}
}
ClaveTipoEfecto
captionstringSobrescribe 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.
formatstringPatrón de formato de número (sintaxis DecimalFormat) que el workbench aplica al renderizar valores.
unitstringPista de unidad de forma libre ("USD", "hours", "%"). Se superpone al campo unit del schema.
hiddenbooleantrue 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"]
}
}
ClaveTipoEfecto
allowstring[]Vacío / ausente = permite a todos los llamadores. No vacío = el llamador debe tener al menos un rol coincidente.
denystring[]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:

NivelComportamiento en el cableUse cuando …
redactEl valor es null. Igual que el booleano heredado "pii": true.Cualquier cosa sensible que no debe salir del servidor.
maskEl valor se reemplaza con un token fijo (p. ej. "***") preservando la forma de fila.La celda debe estar visiblemente presente pero oscurecida.
hashEl 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: SAIKU en 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 array customExtensions[] 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.

A dónde ir después