Pular para o conteúdo

Extensões well-known do Ossie

Toda entrada custom_extensions[] do Ossie carrega um vendor_name + um payload JSON data livre. O Saiku reserva o slot vendor_name: SAIKU para um pequeno vocabulário tipado que dirige sobrescritas de exibição, visibilidade baseada em role e redação graduada de PII — tudo a partir de um único blob autorado por admin no field / metric / dataset.

Distribuído no saiku v4.7 como saiku#1409.

Os três well-knowns

Formato de arquivo

Todos os três viajam sob uma única entrada de extensão vendor_name: SAIKU. Múltiplas chaves podem coexistir em um 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 chave é independentemente opcional. Um blob com apenas pii definido se comporta exatamente como o blob legado só-PII; os outros consumidores não veem nada e não fazem nada.

saiku.display — sobrescritas de apresentação

custom_extensions:
- vendor_name: SAIKU
data: |
{
"display": {
"caption": "Net Revenue",
"format": "$#,##0.00",
"unit": "USD",
"hidden": false
}
}
ChaveTipoEfeito
captionstringSobrescreve o label do field / displayName do metric na resposta do schema AI. Vence sobre renomes de <datasource>.generated.json.
formatstringPadrão de number-format (sintaxe DecimalFormat) que o workbench aplica ao renderizar valores.
unitstringDica de unidade livre ("USD", "hours", "%"). Sobrepõe o field unit do schema.
hiddenbooleantrue remove o field / metric do schema AI inteiramente.

Hidden vs PII

saiku.roles — visibilidade baseada em role

custom_extensions:
- vendor_name: SAIKU
data: |
{
"roles": {
"allow": ["ROLE_SALES", "ROLE_ANALYST"],
"deny": ["ROLE_EMBED_GUEST"]
}
}
ChaveTipoEfeito
allowstring[]Vazio / ausente = permite todos os chamadores. Não-vazio = o chamador deve ter ao menos um role correspondente.
denystring[]Sobrescreve allow. Um chamador com qualquer role negado perde acesso.

Strings de role casam com os nomes de authority do Spring Security (ROLE_ADMIN, ROLE_SALES, etc.). O Saiku não dita uma convenção de nomenclatura além disso — escolha nomes que casem com o provider de identidade do seu operador.

saiku.pii — PII graduado

custom_extensions:
- vendor_name: SAIKU
data: '{"pii":{"level":"hash"}}'

Estende o booleano legado "pii": true para um formato graduado. Três levels:

LevelComportamento no wireUse quando …
redactO valor é null. Igual ao booleano legado "pii": true.Qualquer coisa sensível que não deve deixar o servidor.
maskO valor é substituído por um token fixo (ex.: "***") preservando o formato da linha.A célula deve estar visivelmente presente mas obscurecida.
hashO valor é um prefixo hex de keyed-hash determinístico (preserva joinability).Joins downstream precisam de um valor estável; o original é secreto.

Compat retroativa: "pii": true e "pii": {"level": "redact"} são equivalentes — a forma legada mantém seu significado exato.

Regras de extensibilidade

Fixadas em v4.7 como um contrato estável:

  • Chaves desconhecidas dentro do blob SAIKU fazem round-trip intocadas. Um well-known futuro pode ser distribuído em um exportador mais novo sem nenhum release coordenado — consumidores mais antigos ignoram a chave em vez de dar erro.
  • A primeira entrada SAIKU vence. Se um YAML declara múltiplas entradas vendor_name: SAIKU no mesmo objeto, a primeira é autoritativa e o resto é ignorado. Merge cross-entry criaria ambiguidade de ordenação.
  • Fornecedores não-SAIKU fazem round-trip inalterados. vendor_name: DBT, vendor_name: PREFECT e o blob de qualquer outro integrador flui através do array customExtensions[] do schema AI como autorado.

Convenção de namespace

vendor_name: SAIKU é reservado para well-knowns autorados pelo Saiku. Integradores de terceiros DEVEM usar seus próprios vendor names para que consumidores downstream possam distinguir fontes sem nomenclatura coordenada.

Onde aparece

Os overlays fluem para dois lugares hoje:

  • Navegador de schema do workbench — lê o DTO diretamente, então o caption / format / unit de exibição renderizam na árvore e no inspetor.
  • Schema AI Ossie (GET /ai/ossie/schema/…) — fields e metrics ocultos desaparecem; caption + unit de exibição sobrepõem os labels que o LLM vê.

Para onde ir a seguir