Skip to content

Schedule

Um agendamento executa flows de forma recorrente. Ele vive em schedules/<slug>--<id>.yaml.

bash
lumo new schedule --name "Carga Diária"

Ligue o autocomplete no editor colando esta linha no topo do arquivo:

yaml
# yaml-language-server: $schema=https://docs.horusbi.com.br/schemas/v2/schedule.schema.json

Antes de agendar: todos os flows precisam estar publicados num dw-desk, e todos precisam estar no mesmo agente. O agendamento herda o agente dos flows e não tem campo de agente próprio.

Modelo de configuração

yaml
# ── header ────────────────────────────────────────────────
id: integer                # obrigatório, >= 1
kind: schedule             # obrigatório, literal "schedule"
lumo: v2                   # obrigatório, literal "v2"
tenantId: integer          # obrigatório, >= 1
---
# ── body ──────────────────────────────────────────────────
nome: string               # obrigatório, mínimo 1 caractere
ativo: boolean             # obrigatório
timezone: string           # obrigatório, nome IANA (ex: America/Sao_Paulo)
tags: [string]

flows:                     # obrigatório. executados em sequência
  - flow_etl_id: integer   # obrigatório
    context: string        # obrigatório: Total | Incremental | Temporal | Temporal:Days:<n>

triggers:                  # obrigatório. quando o agendamento dispara
  # Hour / Minute: a cada N unidades, dentro de uma janela diária
  - type: Hour             # Hour | Minute. Minute exige schedulingGranularity=minutes no tenant
    period: integer        # obrigatório, >= 1
    start_when: string     # obrigatório, ISO 8601 UTC (ex: 2026-01-01T07:00:00.000Z)
    start_time: "HH:MM"    # obrigatório, início da janela
    end_time: "HH:MM"      # obrigatório, fim da janela

  # Day: uma vez por dia
  - type: Day
    start_when: "HH:MM"    # obrigatório, hora do dia

  # Week: num dia da semana
  - type: Week
    period: integer        # obrigatório, 0=domingo até 6=sábado
    start_when: "HH:MM"    # obrigatório

  # Month: num dia do mês
  - type: Month
    period: integer        # obrigatório, 1 a 31 (dia do mês, não intervalo)
    start_when: "HH:MM"    # obrigatório

start_when muda de formato conforme o type. Em Hour e Minute, é um timestamp ISO completo em UTC. Em Day, Week e Month, é apenas a hora do dia, no formato HH:MM.

Em Month, period é o dia do mês, e não um intervalo de meses. O dia 31 é ajustado para o último dia válido nos meses mais curtos.

Configuração completa

yaml
# schedules/carga-diaria--2478.yaml
# yaml-language-server: $schema=https://docs.horusbi.com.br/schemas/v2/schedule.schema.json
id: 2478
kind: schedule
lumo: v2
tenantId: 853
---
nome: Carga Diária
ativo: true

# Nome IANA, obrigatório. Sem ele, o horário do gatilho fica ambíguo entre
# UTC e local.
timezone: America/Sao_Paulo

# Executados em sequência: o segundo começa quando o primeiro termina.
# Carregue as dimensões antes dos fatos.
flows:
  - flow_etl_id: 44547
    context: Total          # dimensão pequena: apaga tudo e recarrega

  - flow_etl_id: 44531
    # Recarrega os últimos 31 dias. A tabela precisa ser key_type: unique,
    # senão a janela recarregada duplica as linhas a cada execução.
    context: Temporal:Days:31

triggers:
  # A cada 2 horas, entre 07:00 e 19:00, no fuso acima.
  - type: Hour
    period: 2
    start_when: "2026-01-01T07:00:00.000Z"
    start_time: "07:00"
    end_time: "19:00"

tags: [producao]

Especificação: header

id

Tipo: integer (>= 1) · Obrigatório: sim

kind

Tipo: string · Obrigatório: sim · Valor: schedule

lumo

Tipo: string · Obrigatório: sim · Valor: v2

tenantId

Tipo: integer (>= 1) · Obrigatório: sim

Especificação: body

nome

Tipo: string (mínimo 1 caractere) · Obrigatório: sim

Nome do agendamento. Descreva o que ele faz e como carrega, por exemplo Vendas Diário Temporal 7d.

ativo

Tipo: boolean · Obrigatório: sim

false desliga o agendamento sem apagá-lo. Equivale a lumo schedule pause.

timezone

Tipo: string (mínimo 1 caractere) · Obrigatório: sim

Nome de fuso IANA, como America/Sao_Paulo. Define quando os gatilhos disparam. É obrigatório para não deixar o horário ambíguo entre UTC e local.

flows

Tipo: array de objetos · Obrigatório: sim

Flows executados, em sequência. Cada item exige flow_etl_id e context. Veja Especificação: flow do agendamento.

triggers

Tipo: array de objetos · Obrigatório: sim

Quando o agendamento dispara. Veja Especificação: trigger.

tags

Tipo: array de string · Obrigatório: não · Default: []

Especificação: flow do agendamento

Cada item de flows.

flow_etl_id

Tipo: integer (>= 1) · Obrigatório: sim

Id do flow. O flow precisa estar publicado num dw-desk.

context

Tipo: string · Obrigatório: sim

Como o flow carrega nesta execução.

ValorComportamento
TotalApaga tudo e recarrega tudo.
IncrementalAcrescenta ou atualiza, sem apagar.
TemporalRecarrega a janela padrão.
Temporal:Days:<n>Recarrega os últimos <n> dias.
yaml
context: Temporal:Days:31

Uma janela Temporal recarregada sobre uma tabela key_type: duplicate duplica as linhas a cada execução. Use unique.

Especificação: trigger

Cada item de triggers. As chaves exigidas mudam conforme type.

type

Tipo: string · Obrigatório: sim · Valores: Hour, Minute, Day, Week, Month

ValorDisparaExige
HourA cada period horas, dentro da janela.period, start_when, start_time, end_time
MinuteA cada period minutos, dentro da janela.period, start_when, start_time, end_time
DayUma vez por dia.start_when
WeekNum dia da semana.period, start_when
MonthNum dia do mês.period, start_when

Minute só funciona em tenant com schedulingGranularity igual a minutes.

period

Tipo: integer · Obrigatório: em Hour, Minute, Week e Month

O significado muda conforme o type.

typeSignificado de periodFaixa
HourIntervalo em horas.>= 1
MinuteIntervalo em minutos.>= 1
WeekDia da semana, com 0 igual a domingo.0 a 6
MonthDia do mês.1 a 31

start_when

Tipo: string · Obrigatório: sim

Em Hour e Minute, é um timestamp ISO 8601 em UTC, como 2026-01-01T07:00:00.000Z, que marca quando o agendamento passa a valer.

Em Day, Week e Month, é apenas a hora do dia, no formato HH:MM.

start_time

Tipo: string HH:MM · Obrigatório: em Hour e Minute

Início da janela diária em que o gatilho pode disparar.

end_time

Tipo: string HH:MM · Obrigatório: em Hour e Minute

Fim da janela diária.

Campos gerenciados pelo servidor

CampoO que é
versionVersão do recurso.
criado_em, criado_por, publicado_em, publicado_porAuditoria.