Previsão de séries temporais em uma chamada SQL: o ai_forecast() do Databricks
Como o ai_forecast() do Databricks entrega previsão de séries temporais numa única consulta SQL — a sintaxe, a previsão por grupo, o que a função devolve, e quando (não) usar.
Existe um pedido que todo time de dados já ouviu: "me dá uma previsão de vendas para o próximo trimestre". Ele soa trivial, mas costuma virar um miniprojeto — notebook, escolha de biblioteca, comparação de modelos, backtest, registro no MLflow, agendamento do job. Duas ou três semanas depois, você entrega um número que o negócio precisava para ontem.
O ai_forecast() do Databricks foi feito para encurtar exatamente esse caminho. É uma função SQL que retorna tabela (table-valued function): você aponta para a sua série temporal, define o horizonte da previsão e recebe de volta os valores projetados já com intervalos de confiança — sem treinar modelo, sem infraestrutura de ML.
Este artigo mostra como usar, o que a função devolve, e — igualmente importante — quando não usá-la.
O problema que ele resolve
A maioria das previsões dentro de uma empresa não é um problema de pesquisa; é um problema operacional. Alguém precisa de um número razoável, rápido, para planejar estoque, dimensionar equipe ou fechar um orçamento. Nesses casos, montar um pipeline de machine learning completo é desproporcional ao valor da pergunta.
Ao mesmo tempo, a alternativa "rápida" tradicional — exportar para uma planilha e traçar uma linha de tendência — quebra a governança: os dados saem do ambiente controlado, ninguém audita o cálculo e cada área usa um método diferente.
O ai_forecast() fica no meio-termo: rápido como uma consulta SQL, mas rodando dentro do Unity Catalog, com linhagem e permissões preservadas.
A sintaxe
A forma mínima precisa de quatro coisas: a tabela observada, o horizonte, a coluna de tempo e a coluna de valor.
-- previsão até o fim do ano
SELECT * FROM ai_forecast(
observed => TABLE(daily_sales),
horizon => '2026-12-31',
time_col => 'ds',
value_col => 'sales'
);
Os parâmetros principais:
observed— a entrada de treino, passada comoTABLE(...). Pode ser uma tabela, uma view ou uma subconsulta.horizon— o fim (exclusivo) da previsão, comoDATE,TIMESTAMPou string. A função projeta da última observação até esse ponto.time_col— a coluna de tempo (DATEouTIMESTAMP).value_col— a coluna a prever (precisa ser convertível paraDOUBLE). Aceita também um array de colunas para prever várias séries de uma vez.
E os opcionais que mais rendem no dia a dia:
group_col— uma ou mais colunas de agrupamento. Com ela, você gera uma previsão independente por grupo (loja, SKU, região) numa única chamada, sem loop em Python.prediction_interval_width— largura do intervalo de confiança (padrão0.95).frequency— granularidade da série (padrãoauto).seed— semente para resultados reproduzíveis.
Previsão por grupo
O group_col é o que transforma a função de "brinquedo" em ferramenta de produção. Imagine prever vendas para 500 lojas:
SELECT * FROM ai_forecast(
observed => TABLE(SELECT ds, sales, store_id FROM daily_sales),
horizon => '2026-12-31',
time_col => 'ds',
value_col => 'sales',
group_col => 'store_id'
);
Cada store_id recebe seu próprio modelo e sua própria previsão, particionados automaticamente. O resultado sai empilhado, pronto para materializar em uma tabela Delta ou alimentar um dashboard.
O que a função devolve
A saída é uma tabela com a coluna de tempo, o valor previsto e as bordas do intervalo — algo como:
ds sales_forecast sales_upper sales_lower
2026-10-01 1.240,5 1.410,2 1.070,8
2026-10-02 1.255,9 1.428,7 1.083,1
Como é SQL, você encadeia direto: materializa com CREATE TABLE ... AS SELECT, junta com os valores reais para monitorar o erro, ou expõe numa view para o BI. Nada sai do lakehouse.
Por que isso importa
Três ganhos concretos:
-
Zero pipeline de ML. A seleção do modelo é automática. Você não escolhe entre ARIMA, Prophet ou gradient boosting — o serviço decide e ajusta. Isso derruba a barreira de entrada para quem é forte em SQL mas não vive de modelagem.
-
Escala por grupo sem código extra. Uma chamada cobre centenas ou milhares de séries. O que antes era um
forsobre grupos com paralelização manual vira uma linha degroup_col. -
Governança preservada. Por rodar como função nativa sobre dados do Unity Catalog, valem as mesmas permissões, a mesma linhagem e a mesma auditoria do resto do seu ambiente. A previsão deixa de ser um script solto na máquina de alguém.
Quando NÃO usar
Ser honesto sobre os limites é parte do valor:
- Quando o problema exige features externas. Se a previsão depende fortemente de preço, promoções, clima ou eventos, um modelo dedicado que ingere essas variáveis vai superar uma função automática que só olha o histórico da própria série.
- Quando você precisa de explicabilidade fina. Para um número que vai sustentar uma decisão regulatória ou financeira sensível, você provavelmente quer controlar e documentar o método.
- Séries muito curtas ou muito ruidosas. Sem histórico suficiente, qualquer método — automático ou não — vai chutar. A função não faz mágica com dados ausentes.
Para o resto — a enorme maioria dos pedidos de "preciso de um número para planejar" — ai_forecast() entrega em minutos o que antes custava uma sprint.
Como começar
- Garanta uma tabela com uma coluna de tempo (
DATE/TIMESTAMP) e uma de valor numérica, no Unity Catalog. - Rode a versão mínima da consulta com um horizonte curto para validar o formato da saída.
- Adicione
group_cole ajusteprediction_interval_widthconforme a necessidade. - Materialize o resultado numa tabela Delta e agende um refresh — ou deixe como view para consultas sob demanda.
É o tipo de recurso que muda o custo de responder a uma pergunta: de "abre um projeto" para "escreve uma query".
Artigos relacionados
CLUSTER BY AUTO no Databricks: pare de escolher chaves de clustering na mão
Como o CLUSTER BY AUTO (Automatic Liquid Clustering) faz o Databricks escolher e manter as chaves de clustering sozinho — o que muda em relação a partição/ZORDER, como ativar, requisitos e quando (não) usar.
Ler artigoNarwhals: escreva código de DataFrame uma vez e rode em pandas, Polars e PyArrow
O que é o Narwhals — a camada leve de compatibilidade que deixa você escrever a lógica de DataFrame uma única vez (API estilo Polars) e rodar em pandas, Polars, PyArrow e mais, sem lock-in e sem dependências obrigatórias.
Ler artigoGostou? Veja os e-books para conteúdo aprofundado.
E-books