Buscar K
Aparência
Aparência
Uma tabela é o destino de um flow no Data Warehouse. Ela vive em tables/<slug>--<id>.yaml.
Quem manda no esquema físico (nomes de coluna, tipos) é o flow que alimenta a tabela. O YAML da tabela controla o modelo de chaves do Doris e a camada cosmética: rótulo, máscara e descrição de cada coluna.
Crie a tabela a partir de um nó do flow, que é o caminho que preenche as colunas para você:
lumo new table --from-flow flow:44531 --node join_itens --name "Fato Vendas"Ligue o autocomplete no editor colando esta linha no topo do arquivo:
# yaml-language-server: $schema=https://docs.horusbi.com.br/schemas/v2/table.schema.json# ── header ────────────────────────────────────────────────
id: integer # obrigatório, >= 1
kind: table # obrigatório, literal "table"
lumo: v2 # obrigatório, literal "v2"
tenantId: integer # obrigatório, >= 1
---
# ── body ──────────────────────────────────────────────────
nome: string # obrigatório, mínimo 1 caractere
table_type: string # obrigatório: table | file | cloud
key_type: string # duplicate | unique. ESTRUTURAL. proibido quando table_type=cloud
key_columns: [string] # colunas que formam a chave. ESTRUTURAL. proibido quando table_type=cloud
partition_column: string | null # coluna de partição. ESTRUTURAL. proibido quando table_type=cloud
icon: string | null
tags: [string]
columns: # obrigatório. objeto, chaveado por "NOME_DA_COLUNA (TipoDeDado)"
NOME_DA_COLUNA (DataType): # chave somente-leitura: o esquema é do flow
label: string # rótulo exibido
mask: string | null # máscara de formatação
human_description: string | null
defaultBehavior: string
expressions: # colunas calculadas
- column_name: string # obrigatório
label: string # obrigatório
column_type: string # obrigatório: column | expression
data_type: string # obrigatório: Number | String | Date | Boolean | DateTime | Time | Json
display_order: integer # obrigatório, >= 0
expression: string | null
is_key_column: boolean
is_partition_column: boolean
indexed: boolean
human_description: string | null
mask: string | nullkey_type, key_columns e partition_column são estruturais. Mudar qualquer um deles força um DROP e CREATE da tabela física no Doris, e as linhas são perdidas. O lumo push recusa a mudança numa tabela que já tem dados, a menos que você passe --force-recreate. Depois disso, rode o flow de novo para recarregar.
# tables/fato-vendas--44940.yaml
# yaml-language-server: $schema=https://docs.horusbi.com.br/schemas/v2/table.schema.json
id: 44940
kind: table
lumo: v2
tenantId: 853
---
nome: fato_vendas
table_type: table
# unique deduplica linhas com a mesma key_columns (a última carga vence).
# duplicate acumula linhas a cada carga. Numa carga Temporal que recarrega
# uma janela, duplicate multiplica os registros: use unique.
key_type: unique
key_columns: [PEDIDO_ID, PRODUTO_ID]
partition_column: DATA_EMISSAO
# A chave de cada coluna é "NOME (Tipo)" e é somente-leitura: quem define o
# esquema é o flow. Só os valores abaixo dela são editáveis.
columns:
PEDIDO_ID (Number):
label: Pedido
mask: N0
PRODUTO_ID (Number):
label: Produto
mask: N0
CLIENTE_ID (Number):
label: Cliente
mask: N0
DATA_EMISSAO (Date):
label: Data de Emissão
mask: DATE
QUANTIDADE (Number):
label: Quantidade
mask: N2
VALOR_ITEM (Number):
label: Valor do Item
mask: C2
human_description: Valor líquido do item, já com desconto aplicado.
expressions:
- column_name: TICKET_MEDIO
label: Ticket Médio
column_type: expression
data_type: Number
display_order: 6
expression: VALOR_ITEM / NULLIF(QUANTIDADE, 0)
mask: C2
human_description: Valor médio por unidade vendida.
tags: [vendas]id Tipo: integer (>= 1) · Obrigatório: sim
Id da tabela no servidor.
kind Tipo: string · Obrigatório: sim · Valor: table
lumo Tipo: string · Obrigatório: sim · Valor: v2
tenantId Tipo: integer (>= 1) · Obrigatório: sim
nome Tipo: string (mínimo 1 caractere) · Obrigatório: sim
Nome da tabela no DW.
table_type Tipo: string · Obrigatório: sim · Valores: table, file, cloud
| Valor | O que é | Usável em apps |
|---|---|---|
table | Tabela normal do DW, alimentada por um InsertDatawarehouse em modo Datawarehouse. | Sim |
file | Tabela estática, alimentada por upload de Excel pela interface do DW. Não tem flow. | Sim |
cloud | Saída em parquet no datalake, de um InsertDatawarehouse em modo Datalake. Só serve como entrada de ExtractLakehouse em outro flow. | Não |
Uma tabela cloud não aceita key_type, key_columns nem partition_column: o modelo de chaves é do Doris, e o datalake não tem Doris.
key_type Tipo: string · Obrigatório: não · Valores: duplicate, unique · Restrição: proibido quando table_type é cloud · Estrutural
Modelo de chaves do Doris.
duplicate: cada carga acumula linhas (append).unique: linhas com a mesma key_columns são deduplicadas, e a última escrita vence (upsert).Não confunda com PrimaryKeys do nó InsertDatawarehouse. Aquele deduplica em memória durante uma carga. Este é o modelo físico da tabela e vale entre cargas.
key_columns Tipo: array de string · Obrigatório: não · Restrição: proibido quando table_type é cloud · Estrutural
Colunas que formam a chave do Doris. Com key_type: unique, é a chave de deduplicação. Com duplicate, é a chave de ordenação. Cada nome precisa bater com uma coluna física.
partition_column Tipo: string ou null · Obrigatório: não · Default: null · Restrição: proibido quando table_type é cloud · Estrutural
Coluna usada como partição do Doris. Precisa bater com uma coluna física.
columns Tipo: object · Obrigatório: sim
Camada cosmética sobre as colunas físicas, chaveada por NOME_DA_COLUNA (TipoDeDado). A chave é somente-leitura, porque o esquema pertence ao flow. Para mudar nome, tipo ou esquema de uma coluna, altere o flow que alimenta a tabela.
Cada valor aceita:
| Campo | Tipo | O que faz |
|---|---|---|
label | string | Rótulo exibido da coluna. |
mask | string ou null | Máscara de formatação, como N0, C2, DATE. |
human_description | string ou null | Descrição de negócio da coluna. Alimenta a IA. |
defaultBehavior | string | Comportamento padrão da coluna. |
columns:
VALOR_ITEM (Number):
label: Valor do Item
mask: C2expressions Tipo: array de objetos · Obrigatório: não · Default: []
Colunas calculadas. Cada item exige column_name, label, column_type, data_type e display_order.
icon Tipo: string ou null · Obrigatório: não
Ícone da tabela na interface.
tags Tipo: array de string · Obrigatório: não · Default: []
Cada item de expressions.
column_name Tipo: string (mínimo 1 caractere) · Obrigatório: sim
Nome da coluna calculada.
label Tipo: string · Obrigatório: sim
Rótulo exibido.
column_type Tipo: string · Obrigatório: sim · Valores: column, expression
Use expression para uma coluna calculada.
data_type Tipo: string · Obrigatório: sim · Valores: Number, String, Date, Boolean, DateTime, Time, Json
display_order Tipo: integer (>= 0) · Obrigatório: sim
Posição da coluna na listagem.
expression Tipo: string ou null · Obrigatório: não
A fórmula. Divisões precisam se proteger de zero, com NULLIF no denominador.
expression: VALOR_ITEM / NULLIF(QUANTIDADE, 0)is_key_column Tipo: boolean · Obrigatório: não · Default: false
is_partition_column Tipo: boolean · Obrigatório: não · Default: false
indexed Tipo: boolean · Obrigatório: não · Default: false
human_description Tipo: string ou null · Obrigatório: não
Descrição de negócio. A IA usa este texto para escolher a coluna certa.
mask Tipo: string ou null · Obrigatório: não
Máscara de formatação.
| Campo | O que é |
|---|---|
_state | draft, published ou inconsistent. |
deskId | Desk em que a tabela foi publicada. |
originFlowId | Flow que alimenta a tabela. |
version | Versão do recurso. |
criado_em, criado_por, publicado_em, publicado_por | Auditoria. |