Ementa Completa · 20 horas · 5 semanas

Tudo que você vai construir no Lakehouse: Pipeline na Prática

Módulo a módulo: o que tem na pré-aula, o que vamos codar ao vivo, qual o desafio assíncrono e qual o entregável da semana. Sem mistério, sem letra miúda.

20h totais 5 módulos 15h ao vivo 5h pré-aula + desafios
Sumário

Navegue pela ementa

01 · Identificação

Os dados do curso

CursoLakehouse — Pipeline na Prática
ModalidadeCurso livre, online (live + gravado)
Carga horária20 horas
Duração5 semanas (4h/semana)
Público-alvoProfissionais de TI já atuando com dados — analistas, devs backend, engenheiros juniors, DBAs em migração
Pré-requisitosPython intermediário · SQL básico-intermediário · linha de comando Linux · Docker Desktop instalado · máquina com 16GB de RAM e 50GB livres
Formato das aulasPré-aula gravada (~15min) + ao vivo hands-on (~3h) + desafio assíncrono (~30min)
Entrega finalPipeline Lakehouse end-to-end rodando + repositório GitHub público
02 · Objetivos do curso

Ao final, você será capaz de:

  1. Subir uma stack Lakehouse completa via Docker Compose na própria máquina.
  2. Estruturar um Data Lake no MinIO seguindo a Medallion Architecture (Bronze / Silver / Gold).
  3. Criar e gerenciar tabelas Apache Iceberg com ACID, time travel e schema evolution.
  4. Escrever transformações PySpark para limpar, juntar e modelar dados em estrelas dimensionais.
  5. Orquestrar um pipeline diário no Airflow com retry, sensors e observabilidade básica.
  6. Conectar Apache Superset diretamente nas tabelas Iceberg via Spark Thrift Server.
  7. Construir um dashboard analítico de negócio publicável.
  8. Versionar todo o pipeline (DAGs, notebooks, configurações) em repositório Git público.
03 · Cenário do curso

Olakehouse — marketplace brasileiro fictício

9
Tabelas relacionadas
~100MB
Dados sintéticos
pt-BR
CPF · CEP · UF · categorias
5
Semanas, mesmo cenário
pedidos clientes itens produtos pagamentos avaliações sellers geolocalização categorias

Dados gerados via Python + Faker pt-BR com lógica brasileira: CPFs válidos, CEPs reais, UFs, categorias de mercado. Sujeira pedagógica controlada — nulos, duplicados, encoding misto, timestamps em fuso errado — vira exercício na camada Silver.

Módulo 1

Setup + Fundamentos do Lakehouse

1
Semana 1 · 4 horas

Setup + Fundamentos do Lakehouse

MinIO
Iceberg
Spark
Airflow
Superset
Ao final desta semana, você terá a stack inteira de 5 ferramentas rodando na sua máquina e entendendo onde cada uma se encaixa na arquitetura Medallion — pronto pra começar a ingerir dados reais na próxima aula.
Pré-aula gravada ~15min
  • Por que "Lakehouse" e não Data Warehouse ou Data Lake puro: limitações de cada um
  • A Medallion Architecture explicada em 3 caixas: Bronze (cru), Silver (limpo), Gold (analítico)
  • O que cada ferramenta da stack faz em uma linha
  • Diagrama final que você vai construir nas próximas 5 semanas
  • Pré-requisitos da máquina: Docker Desktop, RAM, disco
Ao vivo · Hands-on ~3h
  1. Setup do projeto — clonar o repositório base com docker-compose.yml da turma, estrutura de pastas, .env template
  2. Subir MinIOdocker compose up minio, acessar console em localhost:9001, criar buckets bronze, silver, gold
  3. Subir Spark + Iceberg — container tabulario/spark-iceberg, validar com pyspark interativo, criar primeiro catálogo Iceberg apontando pro MinIO
  4. Subir Airflowdocker compose up airflow-webserver airflow-scheduler, acessar UI em localhost:8080, login admin/admin, ver DAGs de exemplo
  5. Subir Supersetdocker compose up superset, acessar em localhost:8088, criar conta admin, deixar conexão pra Spark Thrift configurada (sem dados ainda)
  6. Teste smoke — criar uma tabela Iceberg vazia, escrever 3 linhas, ler de volta, ver o arquivo Parquet no MinIO
  7. Tour rápido dos UIs — onde olhar quando algo quebrar: MinIO logs, Spark UI, Airflow logs
Desafio assíncrono ~30min
  • Mudar a porta padrão do Superset para localhost:8090 e validar que continua funcionando
  • Criar mais um bucket no MinIO chamado staging e tirar screenshot
  • Postar no canal da turma um print do docker compose ps mostrando todos os containers em estado running
Entregável da semana Screenshot dos 4 UIs abertos lado a lado (MinIO, Spark UI, Airflow, Superset) + saída do comando docker compose ps colada no canal da turma. Marco zero do portfólio — comprova ambiente pronto.
Módulo 2

Bronze — Ingestão no MinIO + Iceberg

2
Semana 2 · 4 horas

Bronze — Ingestão no MinIO + Iceberg

MinIO
Iceberg
Ao final desta semana, os 9 CSVs do Olakehouse estarão no MinIO como tabelas Iceberg Bronze versionadas — e você terá visto na prática o que é ACID e time travel num Data Lake.
Pré-aula gravada ~15min
  • O dataset Olakehouse: o que cada CSV contém e como se relacionam (diagrama ER simplificado)
  • Bronze ≠ "jogar CSV no S3": qual é a regra do jogo da camada cru
  • Por que Iceberg e não Parquet puro: ACID, time travel, schema evolution em 3 exemplos visuais
  • Conceito de "catalog" no Iceberg — onde mora o metadado
Ao vivo · Hands-on ~3h
  1. Baixar o dataset Olakehouse — script que pega os 9 CSVs e coloca em data/raw/
  2. Subir os CSVs pro MinIO — usando mc (MinIO client) ou boto3, copiar pra bucket bronze/_raw/olakehouse/
  3. Criar o catálogo Iceberg — configuração Spark apontando catalog olakehouse pro warehouse no MinIO bucket bronze
  4. Ler primeiro CSV via PySparkspark.read.csv("s3a://bronze/_raw/olakehouse/orders.csv"), inspecionar schema, mostrar problemas óbvios (datas como string, valores nulos)
  5. Escrever como tabela Icebergdf.writeTo("olakehouse.bronze.orders").create(), ver no MinIO os arquivos Parquet + pasta metadata/
  6. Repetir pros 9 CSVs — em loop ou um por um, na prática é mecânico
  7. Demo de time travel — re-ingerir orders.csv adulterado (apagar 10 linhas), depois recuperar a versão anterior com VERSION AS OF
  8. Demo de schema evolution — adicionar coluna nova em orders, ver que as queries antigas não quebram
Desafio assíncrono ~30min
  • Adicionar uma 10ª "tabela" Bronze sintética chamada evento_curso com os campos aluno, data, evento — popular com 3 linhas reais (seu nome, a data de hoje, "ingestao_concluida")
  • Apagar a versão atual e usar time travel pra recuperar
  • Postar no canal o snippet SQL/PySpark do time travel funcionando
Entregável da semana Print do MinIO console mostrando o bucket bronze com as 9 tabelas + saída do comando SHOW TABLES IN olakehouse.bronze listando as 9. Vai pro repo do aluno num arquivo entregas/semana-02.md.
Módulo 3

Silver + Gold — Transformações com Spark

3
Semana 3 · 4 horas

Silver + Gold — Transformações com Spark

Spark
Iceberg
Ao final desta semana, você terá o modelo dimensional pronto na camada Gold — uma tabela fato de vendas e 4 dimensões — usando PySpark e Iceberg. É a partir daqui que análise de negócio vira viável.
Pré-aula gravada ~15min
  • Silver vs Gold: o que muda em cada camada e por quê
  • Modelagem dimensional na unha — fato e dimensão em 1 slide (estrela)
  • PySpark essencial que vai aparecer hoje: select, withColumn, join, groupBy, window
  • Decisões de modelagem que vamos tomar pro Olakehouse (qual é a tabela fato, quais dimensões)
Ao vivo · Hands-on — Camada Silver ~1h30
  1. Limpar orders — tipos corretos (datas como timestamp), filtrar status válidos, remover duplicatas
  2. Limpar customers — normalizar UF e cidade (uppercase, sem acentos)
  3. Limpar order_items — tipos numéricos corretos, validar valores não-negativos
  4. Limpar products — fazer join com product_category_name_translation pra ter categoria em inglês
  5. Limpar payments — agregar formas de pagamento múltiplas por pedido
  6. Cada Silver é escrita como tabela Iceberg olakehouse.silver.{nome}
Ao vivo · Hands-on — Camada Gold (modelo estrela) ~1h30
  1. fato_vendas — granularidade item de pedido. Colunas: order_id, item_id, customer_key, product_key, tempo_key, geo_key, valor, frete, dias_entrega, nota_review
  2. dim_cliente — 1 linha por customer_unique_id, com UF e cidade
  3. dim_produto — 1 linha por produto, com categoria traduzida
  4. dim_tempo — calendário 2016–2018 com dia, mês, trimestre, dia da semana
  5. dim_geografia — UF + região (Sul, Sudeste, etc.) construída na unha
  6. ValidaçõesCOUNT(*) em cada Gold, conferir se totais batem com Silver
Desafio assíncrono ~30min
  • Adicionar uma coluna calculada em fato_vendas chamada entregou_atrasado (boolean, comparando order_estimated_delivery_date com order_delivered_customer_date)
  • Rodar uma query agregada: percentual de pedidos atrasados por UF
  • Postar o resultado top-5 no canal da turma
Entregável da semana Notebook PySpark (ou script .py) com toda a transformação Bronze→Silver→Gold + saída de DESCRIBE das 5 tabelas Gold. Commitado no repo do aluno em transformacoes/.
Módulo 4

Airflow — Orquestração end-to-end

4
Semana 4 · 4 horas

Airflow — Orquestração end-to-end

Airflow
Spark
Ao final desta semana, todo o pipeline Bronze→Silver→Gold roda sozinho, agendado, com retry automático em caso de falha. Você sai daqui sabendo escrever uma DAG de verdade — não DAG de tutorial.
Pré-aula gravada ~15min
  • Por que orquestrador e não cron + script: dependência, retry, observabilidade
  • Anatomia de uma DAG: tasks, dependências, schedule, retries
  • Operators que vamos usar hoje: BashOperator, PythonOperator, SparkSubmitOperator
  • O que NÃO colocar dentro da DAG: lógica de transformação pesada (essa fica nos scripts Spark)
Ao vivo · Hands-on ~3h
  1. Estrutura do diretóriodags/, dags/scripts/, dags/sql/. Mostrar como o Airflow lê DAGs do filesystem
  2. DAG esqueletoolakehouse_daily.py com schedule @daily, sem tasks ainda; ver no Airflow UI
  3. Task 1 — ingest_bronzePythonOperator que executa o script de ingestão dos CSVs pro MinIO
  4. Task 2 — transform_silverBashOperator rodando spark-submit do script Silver da semana passada
  5. Task 3 — build_gold — outro spark-submit pro script de Gold
  6. Task 4 — validate_goldPythonOperator que confere COUNT(*) mínimo nas tabelas Gold e falha se zero
  7. Dependênciasingest_bronze >> transform_silver >> build_gold >> validate_gold
  8. Configurar retrydefault_args com retries=2, retry_delay=timedelta(minutes=5)
  9. Simular falha — adulterar credencial do MinIO, ver task ingest_bronze falhar, ver retry automático, ver e-mail/notificação no log
  10. Sensor + reprocesso — adicionar FileSensor que espera novo lote chegar em s3a://bronze/_landing/
  11. Reprocessar dia anterior — pelo UI, clicar em "Trigger DAG" com execution_date retroativo, ver Airflow respeitando idempotência
Desafio assíncrono ~30min
  • Adicionar uma 5ª task notify_done que escreve no log (ou posta no Slack via webhook, se já tiver) "pipeline OK em {ds}"
  • Mudar o schedule pra rodar de hora em hora apenas das 9h às 18h em dias úteis (cron expression)
  • Postar o trecho de cron no canal da turma
Entregável da semana Print do Airflow UI mostrando a DAG olakehouse_daily verde, com 5 tasks executadas, em pelo menos 2 execuções históricas. Arquivo dags/olakehouse_daily.py commitado no repo.
Módulo 5

Superset — Dashboard + Apresentação Final

5
Semana 5 · 4 horas

Superset — Dashboard + Apresentação Final

Superset
Spark
Iceberg
Última semana. Você conecta o Superset diretamente nas suas tabelas Iceberg, monta um dashboard de negócio publicável e apresenta o pipeline inteiro funcionando. Sai do curso com portfólio público e tudo no GitHub.
Pré-aula gravada ~15min
  • Como o Superset se conecta a Iceberg via Spark Thrift Server (arquitetura em 1 slide)
  • Diferença entre dataset, chart e dashboard no Superset
  • 5 perguntas de negócio típicas que o Olakehouse permite responder — e que vão virar nossos gráficos hoje
  • O que faz um dashboard ser "bom": menos é mais
Ao vivo · Parte 1 — Conectar Superset ao Lakehouse ~45min
  1. Subir o Spark Thrift Serverstart-thriftserver.sh no container Spark, expondo porta 10000
  2. Configurar database no Superset — driver pyhive ou sqlalchemy-trino, URL hive://spark:10000/olakehouse
  3. Validar conexão — rodar SELECT COUNT(*) FROM olakehouse.gold.fato_vendas no SQL Lab do Superset
  4. Registrar datasetsgold.fato_vendas + 4 dimensões como datasets no Superset
Ao vivo · Parte 2 — Dashboard "Visão de Vendas Olakehouse" ~1h30
  1. Chart 1 — Big Number — receita total
  2. Chart 2 — Time series — receita diária ao longo de 2017–2018
  3. Chart 3 — Bar chart — top 10 categorias por receita
  4. Chart 4 — Mapa do Brasil — receita por UF
  5. Chart 5 — Scatter — dias de entrega vs nota média da review
  6. Montar o dashboard — arrastar os 5 charts, adicionar filtros (período, UF, categoria), salvar como Visão de Vendas Olakehouse
  7. Compartilhar — gerar link público (read-only) ou exportar PDF
Ao vivo · Parte 3 — Apresentação final ~30min, rotativa
  1. Cada aluno tem 3min pra: subir o docker compose up, rodar a DAG, mostrar o dashboard, apontar uma insight de negócio que descobriu nos dados
  2. Feedback rápido da turma + professor
  3. Entrega oficial dos certificados de conclusão
Não há desafio assíncrono — semana final

Em vez de desafio, a tarefa é finalizar o repo GitHub durante a semana:

  • README explicando como subir e rodar o pipeline
  • Pasta dags/ com a DAG
  • Pasta transformacoes/ com os scripts Spark
  • Pasta dashboards/ com o JSON exportado do dashboard Superset
  • Screenshot do dashboard no README
Entregável final do curso 1. Repositório GitHub público com o pipeline completo + instruções de execução. 2. Dashboard Superset com mínimo 4 charts e 1 filtro funcional. 3. Apresentação ao vivo de 3min mostrando o pipeline rodando. 4. Certificado de conclusão (emitido após entrega aprovada).
04 · Metodologia

Como o curso funciona na prática

Pré-aula gravada

~15min · assíncrono. Contexto e conceitos-chave antes da live. Acessível dias antes do encontro ao vivo.

Hands-on ao vivo

~3h · síncrono. Professor compartilha tela e digita o código ao vivo. Você abre seu Docker em paralelo e replica.

Q&A + desafio

~30min · final da live. Dúvidas resolvidas em grupo + apresentação do desafio assíncrono da semana.

Desafio assíncrono

~30min · ao longo da semana. Tarefa individual para fixar e adaptar o conteúdo da live ao seu próprio repo.

Inspiração metodológica

Metodologia SENAI de Educação Profissional — foco em competências e situação-problema da indústria, não em currículo acadêmico. Cada módulo é uma situação de trabalho real ("você recebeu 9 CSVs de vendas e precisa entregar um dashboard até sexta — vamos fazer juntos") e você resolve essa situação durante a semana.

Proporção 25% teoria / 75% prática. A teoria entra em doses curtas, sempre amarrada ao código que vem em seguida.

Hands-on guiado · como funciona

Professor compartilha tela e digita ao vivo. Alunos abrem o próprio Docker em paralelo e replicam. A cada ~20min há um check-in: quem travou levanta a mão (recurso da plataforma), o monitor ou o próprio professor para e ajuda. Não avança sem todo mundo ter o passo anterior rodando.

Suporte fora da live

Canal Discord — perguntas escritas, respostas em até 24h úteis. 1 monitoria opcional aberta por semana (1h) — sem conteúdo novo, só dúvida.

05 · Avaliação

Critérios da entrega final

Avaliação é prática e única: você entrega na semana 5 o pipeline rodando. Não há prova, não há nota mínima — é um curso livre. O que você leva é o certificado de conclusão e o portfólio público.

40%

Pipeline executa

DAG completa roda do início ao fim sem erro.

25%

Modelagem Gold

Tabela fato + dimensões fazem sentido analítico.

25%

Dashboard Superset

Mínimo 4 visões respondendo perguntas de negócio reais.

10%

Repositório GitHub

Código versionado, README explicando como subir e rodar.

06 · Cronograma

20 horas distribuídas em 5 semanas

Semana Módulo Tema Ao vivo Entregável
1M1 Setup + Fundamentos do Lakehouse 3h Stack rodando + screenshots
2M2 Bronze — MinIO + Iceberg 3h 9 tabelas Bronze consultáveis
3M3 Silver + Gold — Spark 3h Modelo dimensional Gold pronto
4M4 Airflow — Orquestração 3h DAG ponta-a-ponta agendada
5M5 Superset — Dashboard final 3h Dashboard publicado + apresentação
Total ao vivo 15h
+ pré-aulas e desafios assíncronos 5h
Total da carga horária 20h
07 · Leitura sugerida

Pra ir além — opcional, não obrigatório

Convencido? Hora de garantir sua vaga.

Turma 1 começa em 22 de junho de 2026. Lote 1 com 15 vagas a R$ 550, com ingresso DSSBR 2026 incluso.

Garantir minha vaga → ← Voltar à página inicial