Workshop prático de Databricks personalizado para o time da Eneva, com foco em low-code: Ingestão, Transformação de Dados, consumo em Linguagem Natural e Visualização — a Data + AI Platform de ponta a ponta.
![]() Juliandro Figueiró Sr. Solutions Architect Databricks |
![]() Jean Ertzogue Account Executive Databricks |
| # | Lab | Tópicos | Duração |
|---|---|---|---|
| 00 | Setup | Catálogo compartilhado workshop_eneva + schema pessoal (seu nome) |
15 min |
| 01 | Ingestão de Dados | Upload manual de arquivos (CSV + Excel) via Catalog (Create table), camada Bronze | 30 min |
| 02 | Transformação — LakeFlow Designer | Visual data prep (no-code): Silver/Gold, 3 transformações | 40 min |
| 03 | Genie Agent | Consumo de dados em linguagem natural, instruções customizadas | 30 min |
| 04 | AI/BI Dashboards | Visualizações interativas, KPIs, gráficos | 30 min |
| Encerramento | Considerações finais e perguntas | 15 min |
O workshop usa um modelo estrela do parque gerador da Eneva: 1 tabela fato
(fato_geracao, com as leituras horárias de geração), 2 dimensões (dim_usinas e
dim_unidades_geradoras) e 2 tabelas de enriquecimento (enriquecimento_municipios e
enriquecimento_fabricantes), usadas para enriquecer as dimensões durante as transformações
do Lab 2. Todas as tabelas são ingeridas na camada Bronze por upload manual (Lab 1).
| Requisito | Detalhes |
|---|---|
| Workspace | Databricks com Unity Catalog habilitado |
| Compute | Cluster DBR 14.0+ ou Serverless |
| SQL Warehouse | Necessário para Labs 03 (Genie) e 04 (AI/BI) |
| Permissão | Recurso | Labs |
|---|---|---|
CREATE CATALOG |
workshop_eneva (compartilhado — criado uma vez) |
00 |
CREATE SCHEMA |
workshop_eneva.<nome> (schema pessoal) |
00 |
USE CATALOG / USE SCHEMA |
Catálogo workshop_eneva e schema do participante |
Todos |
CREATE TABLE / SELECT / MODIFY |
Tabelas no schema do participante (upload no Lab 1, saídas do Lab 2) | Todos |
CREATE GENIE / USE GENIE |
Genie Agent com as tabelas Gold | 03 |
CREATE DASHBOARD |
AI/BI Dashboard | 04 |
USE CLUSTER / ATTACH |
Cluster ou Serverless | Todos |
Dica: O catálogo
workshop_enevaé compartilhado e criado uma única vez (reaproveitado nas próximas execuções). Cada participante trabalha em um schema com o próprio nome (workshop_eneva.<nome>). O perfil de permissões mais simples é concederALL PRIVILEGESno catálogoworkshop_eneva, além de acesso a compute, Pipelines, Genie e Dashboards.
workshop-eneva/
│
├── dados/ # Dados prontos para upload manual
│ ├── fato_geracao.csv # FATO: leituras horárias de geração (CSV)
│ ├── dim_usinas.xlsx # Dimensão: usinas (Excel)
│ ├── dim_unidades_geradoras.xlsx # Dimensão: unidades geradoras (Excel)
│ ├── enriquecimento_municipios.xlsx # Enriquecimento: municípios (Excel)
│ ├── enriquecimento_fabricantes.xlsx # Enriquecimento: fabricantes (Excel)
│ └── gerar_dados.py # Script que (re)gera os arquivos de dados
│
├── 00_Setup/
│ └── 00_configuracao_catalogo.py # Catálogo workshop_eneva + schema pessoal (seu nome)
│
├── 01_Lab_Ingestao/
│ ├── 01a_guia_upload_dados.py # Guia passo-a-passo do upload manual (Create table)
│ └── 01b_validacao.py # Validação das tabelas Bronze ingeridas
│
├── 02_Lab_Transformacao/
│ └── 02a_guia_lakeflow_designer.py # Resumo de apoio (passo a passo completo no README)
│
├── 03_Lab_Genie/
│ ├── 03a_genie_to_do.py # Preparação + instruções do Genie — TO-DOs (exercício)
│ └── 03b_genie_completo.py # Genie completo com instruções curadas (referência)
│
├── 04_Lab_AIBI/
│ ├── 04a_dashboard_to_do.py # Dashboard com TO-DOs (exercício)
│ └── 04b_dashboard_completo.py # Dashboard completo com queries (referência)
-
No Databricks, vá em Workspace > Users > seu usuário
-
Clique em Create > Git folder
-
Cole a URL do repositório no campo Git repository URL (use o botão de copiar 📋 abaixo):
https://github.com/juliandrof/workshop-eneva.git -
Confirme em Create Git folder — todos os notebooks e a pasta
dados/serão clonados
- Abra o notebook
00_Setup/00_configuracao_catalogo.py - Execute a primeira célula para que o widget nome_participante apareça no topo do notebook
- Preencha o widget nome_participante com seu primeiro nome
⚠️ Sem espaços, sem acentos, minúsculo. Ex:joao,maria,carlos - Execute as demais células
- O catálogo compartilhado
workshop_enevaé criado (ou reaproveitado, se já existir) e o seu schema pessoal fica em:workshop_eneva.<seu_nome>— é ali que ficarão todas as suas tabelas
Os dados já estão prontos na pasta dados/ deste repositório: a tabela fato em
CSV e as dimensões/enriquecimento em XLSX (Excel). Como você importou o repositório
via Git folder (Passo 1), os arquivos já estão no seu Workspace. Para fazer o upload no
Lab 1, baixe-os para o seu computador em ZIP:
- No Databricks, abra Workspace e navegue até a sua Git folder
workshop-eneva - Selecione a pasta
dados - Clique nos três pontos (⋮) no lado direito
- Selecione Download as > Zip - Source
- Salve o
.zipno seu computador e descompacte (duplo clique no Windows/macOS) - Dentro da pasta descompactada estarão os 5 arquivos de dados:
| Arquivo | Formato | Registros | Tipo | Descrição |
|---|---|---|---|---|
fato_geracao.csv |
CSV | 5.832 | Fato | Leituras horárias de geração por unidade (72h × 81 unidades) |
dim_usinas.xlsx |
XLSX | 15 | Dimensão | Usinas termelétricas (gás/carvão) e solares |
dim_unidades_geradoras.xlsx |
XLSX | 81 | Dimensão | Motores, turbinas e inversores por usina |
enriquecimento_municipios.xlsx |
XLSX | 9 | Enriquecimento | Região, submercado do SIN e população |
enriquecimento_fabricantes.xlsx |
XLSX | 7 | Enriquecimento | País, eficiência e disponibilidade de referência |
Alternativa: na página do repositório no GitHub, clique em Code > Download ZIP e descompacte — os arquivos ficam na subpasta
dados/.
Para regenerar os arquivos, rode
python3 dados/gerar_dados.py.
| Item | Detalhes |
|---|---|
| Objetivo | Ingerir os 5 arquivos (fato em CSV, dimensões em Excel) na camada Bronze via upload manual |
| Guia de upload | 01_Lab_Ingestao/01a_guia_upload_dados.py |
| Notebook de validação | 01_Lab_Ingestao/01b_validacao.py |
| Dados | pasta dados/ — 5 tabelas (1 CSV + 4 XLSX) |
- Suba cada arquivo da pasta
dados/para o seu schema (workshop_eneva.<seu_nome>):- No menu lateral, abra Catalog >
workshop_eneva> schema<seu_nome> - Clique em Create > Create table (Upload files)
- Arraste o arquivo (ex.:
fato_geracao.csv), mantenha First row = header - Table name = nome do arquivo sem a extensão (ex.:
fato_geracao) → Create table - Repita para os 5 arquivos
- No menu lateral, abra Catalog >
| Arquivo | Tabela resultante |
|---|---|
fato_geracao.csv |
workshop_eneva.<nome>.fato_geracao |
dim_usinas.xlsx |
workshop_eneva.<nome>.dim_usinas |
dim_unidades_geradoras.xlsx |
workshop_eneva.<nome>.dim_unidades_geradoras |
enriquecimento_municipios.xlsx |
workshop_eneva.<nome>.enriquecimento_municipios |
enriquecimento_fabricantes.xlsx |
workshop_eneva.<nome>.enriquecimento_fabricantes |
- Valide a ingestão executando
01b_validacao.py(confere as 5 tabelas)
- Upload manual de arquivos (CSV / Excel) no Databricks
- Catalog Explorer > Create table
- Inferência de schema e tipos
- Camada Bronze (Medallion Architecture)
| Item | Detalhes |
|---|---|
| Objetivo | Construir as camadas Silver e Gold com 3 transformações no LakeFlow Designer |
| Passo a passo | Detalhado abaixo neste README |
| Notebook de apoio | 02_Lab_Transformacao/02a_guia_lakeflow_designer.py (resumo + verificação) |
| # | Transformação | Camada | O que faz |
|---|---|---|---|
| 1 | Enriquecimento de Usinas | Silver | Join de dim_usinas com enriquecimento_municipios → região + submercado do SIN + população |
| 2 | Fator de Capacidade | Silver | Join com enriquecimento_fabricantes e cálculo de fator_capacidade vs referência do fabricante |
| 3 | Ranking com Janela | Gold | Agregação por usina + row_number() (ranking) + % de participação na matriz |
Antes das transformações, há um passo simples de preparação (
silver_geracao): derivar as colunas de tempo (ano/mês/dia/hora/turno) e aplicar um Filter de qualidade.
- Na barra lateral esquerda, clique no ícone + (New)
- Selecione Visual data prep
- Abre o canvas em branco com a tela de boas-vindas
O rascunho é salvo automaticamente. Renomeie no topo para
visual_prep_eneva_<seu_nome>.
Para cada tabela que você ingeriu no Lab 1:
- Clique em Select a source (ou, em operadores, no menu da esquerda, escolha Source)
- Na aba de configuração, escolha Browse e selecione a tabela existente em
workshop_eneva><seu_nome> - Repita para as 5 tabelas de entrada:
fato_geracao,dim_usinas,dim_unidades_geradoras,enriquecimento_municipios,enriquecimento_fabricantes
O LakeFlow Designer tem o Genie Code — uma barra onde você descreve em português o que quer fazer e ele cria a transformação para você. É assim que vamos montar cada etapa, sem escrever código.
Como usar, para cada etapa abaixo:
- No canvas do Visual data prep, abra a barra do Genie Code
- Cole o prompt da etapa (use o botão de copiar 📋 nas caixas abaixo)
- Use o botão @ para mencionar as tabelas citadas no prompt (ex.:
@fato_geracao) — assim o Genie sabe exatamente de quais dados você fala - Envie e revise a etapa gerada; se estiver de acordo, aceite para adicioná-la ao fluxo
- Confira a prévia dos dados no painel inferior
Dica: se o resultado não sair como esperado, ajuste o texto do prompt e envie de novo — é uma conversa. Você pode iniciar um novo tópico a qualquer momento.
Source: fato_geracao — comece adicionando esta tabela com o operador Source.
Prompt para o Genie Code:
Usando a tabela @fato_geracao, crie uma nova tabela chamada silver_geracao com:
- colunas de tempo derivadas de data_hora: ano, mês, dia e hora
- uma coluna "turno" a partir da hora: 6 às 11 = "Manhã", 12 às 17 = "Tarde",
18 às 23 = "Noite" e o restante = "Madrugada"
- mantenha apenas as linhas em que geracao_mwh é maior ou igual a zero e
disponibilidade está entre 0 e 1
As camadas são identificadas pelo prefixo do nome da tabela de saída (silver_*, gold_*),
todas no seu schema workshop_eneva.<seu_nome>. Descreva cada uma no Genie Code.
Transformação 1 — silver_usinas · Sources: dim_usinas e enriquecimento_municipios
Junte @dim_usinas com @enriquecimento_municipios pelas colunas municipio e uf,
trazendo regiao, submercado_sin e populacao. Adicione uma coluna idade_anos igual
ao ano atual menos ano_operacao. Salve o resultado como silver_usinas.
Transformação 2 — silver_desempenho_unidades
· Sources: silver_geracao, dim_unidades_geradoras e enriquecimento_fabricantes
A partir de @silver_geracao, calcule por unidade geradora (id_unidade, id_usina) a
geração média (geracao_media_mwh), a geração total (geracao_total_mwh), a
disponibilidade média e a quantidade de leituras. Junte com @dim_unidades_geradoras
(por id_unidade e id_usina) e com @enriquecimento_fabricantes (por fabricante).
Adicione o fator_capacidade = geracao_media_mwh dividido pela potencia_nominal_mw e
o gap_vs_referencia = fator_capacidade menos fator_disponibilidade_ref, ambos
arredondados com 4 casas. Salve como silver_desempenho_unidades.
Transformação 3 — gold_geracao_por_usina
· Sources: silver_geracao e silver_usinas
A partir de @silver_geracao, some a geração por usina (geracao_total_mwh), calcule a
disponibilidade média e o consumo de combustível total. Junte com @silver_usinas
para trazer nome_usina, fonte, combustivel, uf, regiao, submercado_sin e
potencia_instalada_mw. Crie um ranking das usinas da maior para a menor geração e uma
coluna pct_participacao com o percentual de cada usina no total gerado. Salve como
gold_geracao_por_usina.
Tabelas Gold adicionais (usadas nos Labs 3 e 4) · Sources: silver_geracao e silver_usinas
A partir de @silver_geracao (juntando com @silver_usinas para obter fonte e
combustivel), agrupe por fonte e combustivel somando a geração total, a geração média,
a quantidade de usinas distintas e a disponibilidade média. Salve como
gold_geracao_por_fonte.
A partir de @silver_geracao (juntando com @silver_usinas para obter submercado_sin e
regiao), agrupe por submercado_sin e regiao somando a geração total, a quantidade de
usinas distintas, a quantidade de estados distintos e a disponibilidade média. Salve
como gold_geracao_por_submercado.
- Clique em qualquer operador para ver a prévia dos dados no painel inferior
- Use o seletor Rows scanned para controlar o volume processado na prévia
Cada prompt do Genie Code já gera a tabela de saída indicada. Confirme que cada resultado (Silver e Gold) tem um operador Output apontando para o seu schema:
- Adicione um operador Output ligado ao último operador da transformação
- Configure:
- Table name: ex.
silver_geracao,gold_geracao_por_usina, … - Output location: catálogo
workshop_eneva+ schema<seu_nome>
- Table name: ex.
- Clique em Run — cada execução cria ou substitui a tabela gerenciada
- (Opcional) Clique em Schedule para agendar execuções recorrentes
O Designer mostra o grafo de linhagem (lineage) entre as tabelas automaticamente.
- LakeFlow Designer (Visual data prep — low-code / no-code)
- Genie Code: construir transformações em linguagem natural (prompts)
- Enriquecimento (join), agregações e ranking
- Qualidade de dados (descarte de linhas inválidas)
- Medallion Architecture (Silver / Gold)
| Item | Detalhes |
|---|---|
| Objetivo | Criar e curar uma Genie Agent para consultar a geração em linguagem natural |
| Notebook (exercício) | 03_Lab_Genie/03a_genie_to_do.py |
| Notebook (referência) | 03_Lab_Genie/03b_genie_completo.py |
- Complete os TO-DOs no notebook
03a_genie_to_do.py:
| TO-DO | Descrição |
|---|---|
| 1 | Adicionar comentários às tabelas Gold |
| 2 | Adicionar comentários em colunas-chave |
| 3 | Revisar as instruções customizadas do Genie |
-
Crie a Genie Agent: Genie > New e adicione as tabelas do seu schema
workshop_eneva.<seu_nome>:- Dimensões:
dim_usinas,dim_unidades_geradoras - Gold:
gold_geracao_por_usina,gold_geracao_por_fonte,gold_geracao_por_submercado
- Dimensões:
-
Cole as instruções customizadas no campo Instructions da Genie (contexto Eneva + glossário do setor elétrico) — copie o texto abaixo:
## Contexto do Negócio Você é um assistente de análise de dados da Eneva, uma das maiores empresas privadas de geração de energia do Brasil, com foco em geração termelétrica a gás natural e carvão, além de usinas solares. Os dados representam a geração horária das unidades geradoras do parque gerador da Eneva. ## Glossário (jargão do setor) - MWh: megawatt-hora, unidade de energia gerada no período. - Fonte: tipo de geração — "Termelétrica" ou "Solar". - Combustível: insumo da usina — "Gás Natural", "Carvão Mineral" ou "Fotovoltaica". - SIN: Sistema Interligado Nacional. O Brasil é dividido em submercados (Norte, Nordeste, Sudeste/Centro-Oeste, Sul) além de sistemas isolados (ex.: Manaus). - Fator de capacidade: razão entre geração média e potência nominal (0 a 1). - Disponibilidade: fração do tempo em que a unidade esteve apta a gerar (0 a 1). - Despacho: acionamento de uma usina pelo ONS para gerar energia. ## Regras de Resposta - Sempre expresse energia em MWh e potência em MW, com separador de milhar. - Percentuais com uma casa decimal (ex.: 12,5%). - Quando perguntarem por "maior/melhor usina", use geracao_total_mwh como métrica padrão. - "Participação na matriz" = coluna pct_participacao de gold_geracao_por_usina. - Usinas solares só geram durante o dia — geração noturna zero é esperada, não é erro. - Ao comparar térmica vs solar, deixe claro que são perfis de geração diferentes. -
Teste o Genie com perguntas como:
- "Qual usina gerou mais energia no período?"
- "Qual a participação de cada fonte na matriz de geração?"
- "Compare a geração de gás natural com a de carvão mineral"
- "Qual submercado do SIN concentra mais geração?"
- AI/BI Genie (linguagem natural)
- Instruções customizadas e glossário de domínio
- Curadoria de metadados (comentários de tabela/coluna)
- Sample Questions
| Item | Detalhes |
|---|---|
| Objetivo | Criar um AI/BI Dashboard interativo sobre a geração do parque Eneva |
| Formato | Dashboard livre — solte a criatividade! |
| Notebook (exercício) | 04_Lab_AIBI/04a_dashboard_to_do.py |
| Notebook (referência) | 04_Lab_AIBI/04b_dashboard_completo.py |
O Lab 4 é um dashboard livre: você tem total liberdade para escolher quais métricas mostrar, os tipos de gráfico e o visual do painel. Use as tabelas Gold como base e capriche!
Vamos avaliar todos os dashboards e os 3 primeiros colocados ganharão um prêmio especial 🎁.
A imagem mais abaixo é apenas uma referência/inspiração — sinta-se à vontade para ir além dela.
| Pilar | O que olhamos |
|---|---|
| 🎨 Beleza | Visual caprichado: título, cores, organização, harmonia e clareza do painel |
| 🛠️ Utilidade | O dashboard ajuda a tomar decisões? Responde perguntas reais do negócio de forma prática? |
| 🎯 Relevância das informações | As métricas escolhidas fazem sentido para geração de energia e contam uma história |
- Prepare os dados no notebook
04a_dashboard_to_do.py(queries de submercado e turno) - Crie o Dashboard: Dashboards > Create dashboard
- Crie os datasets e monte os widgets que quiser — é livre! Use a referência como ponto de partida
- Capriche no visual: título, cores, organização e interatividade contam na avaliação
- Combine KPIs no topo (counters) + gráficos no meio + uma tabela de detalhe embaixo
- Adicione filtros (por fonte, por UF, por submercado) para deixar o painel interativo
- Dê um título forte e use as cores das fontes (gás, carvão, solar) de forma consistente
- Destaque insights (ex.: usinas abaixo da disponibilidade esperada, maior participação na matriz)
- Explore o Genie do Lab 3 para descobrir boas perguntas e depois transformá-las em gráficos
Ideias de visualizações que você pode usar (ou criar as suas):
| Dataset | Tipo de Visualização |
|---|---|
| KPI - Resumo Geral | Counter (4 counters) |
| Geração por Fonte | Pie Chart |
| Ranking de Usinas | Bar Chart (horizontal) |
| Geração por Submercado | Bar Chart |
| Geração por Turno | Bar Chart (agrupado por fonte) |
| Disponibilidade por Usina | Table |
A avaliação dos dashboards será feita pelo Genie Code — a própria IA do Databricks vai analisar os painéis e dar as notas nos 3 pilares. Use o prompt abaixo para pedir a avaliação:
Analise os dashboards criados hoje e avalie cada um com notas de 0 a 10 nos seguintes pilares:
Beleza: organização, cores, clareza, legibilidade e aparência geral.
Utilidade: capacidade de apoiar decisões e responder perguntas relevantes do negócio.
Relevância: qualidade das métricas, coerência dos indicadores e capacidade de contar uma história.
Apresente os resultados em uma tabela com as colunas:
| Dashboard | Beleza | Utilidade | Relevância | Média | Comentários |
Ao final, apresente o Top 3 dashboards, classificados pela maior média, com uma breve
justificativa para cada posição. Justifique objetivamente todas as notas atribuídas.
- AI/BI Dashboards
- Datasets (queries SQL)
- Visualizações: Counter, Bar, Pie, Table
- Interatividade e filtros
Use sempre o mesmo
nome_participanteem todos os notebooks para garantir que seu catálogo seja consistente.
Se travar em algum TO-DO, consulte a versão completa do notebook (sufixo
_completo.py).
No Lab 1, use exatamente os nomes de arquivo como nome de tabela (ex.:
fato_geracao) — os notebooks dos labs seguintes dependem desses nomes.
-- Substitua <seu_nome> pelo nome usado no workshop.
-- Apague apenas o SEU schema — o catálogo workshop_eneva é compartilhado.
DROP SCHEMA IF EXISTS workshop_eneva.<seu_nome> CASCADE;- Documentação LakeFlow / Spark Declarative Pipelines
- LakeFlow Designer
- Criar tabela via upload de arquivo
- AI/BI Genie
- AI/BI Dashboards
- Unity Catalog
Workshop Hands-On Databricks — Eneva
Data & AI na prática





