Esta metodologia define como construímos e organizamos pipelines de dados em Microsoft Fabric. É aplicada consistentemente em todos os pipelines do projecto.
Todos os pipelines seguem a arquitectura Bronze → Silver → Gold:
Fonte Externa
│
▼
BRONZE Cópia fiel da fonte — sem transformações de schema
│
▼
SILVER Normalização: cast de tipos, colunas de auditoria, overwrite
│
▼
GOLD Consolidação: harmonização de múltiplas fontes, mapeamentos, enriquecimento
| Camada | Responsabilidade | Escrita |
|---|---|---|
| Bronze | Copiar dados externos para o Lakehouse sem alterar o conteúdo | Ficheiros originais (CSV, JSON, etc.) |
| Silver | Normalizar schema, cast de tipos, adicionar colunas de auditoria | Delta, mode=overwrite |
| Gold | Consolidar múltiplas fontes, aplicar mapeamentos, enriquecer | Delta, delete+append por fonte ou overwrite total |
Cada pipeline tem uma pasta de notebooks com esta estrutura típica:
notebooks/<pipeline>/
├── <pipeline>_runner.ipynb — orquestrador, único ponto de entrada
├── <pipeline>_BRONZE.ipynb — ingestão (ou vários notebooks de bronze por fonte)
├── <pipeline>_SILVER.ipynb — normalização (ou vários por fonte)
└── <pipeline>_GOLD.ipynb — consolidação
As bibliotecas partilhadas são compiladas a partir de notebooks/Utils/ e instaladas em /lakehouse/default/Files/Global_Libs/ no Fabric.
Todos os notebooks do pipeline partilham os mesmos padrões:
main_set — configuração injectada pelo runner em runtime (ver Orquestração)correlation_id propagado entre notebooks (ver Bibliotecas)handleError com saída imediata em produção (ver Silver)running_local controla comportamento de erros e parâmetrosTodos os pipelines são implementados em Spark notebooks, não em Data Factory Gen2 pipelines nem Dataflow Gen2. Razões:
notebookutils.notebook.run() — sem dependências de conectores proprietáriosNunca se hardcodam paths de Lakehouses, nomes de contentores, credenciais, ou qualquer configuração que varie por ambiente. Tudo passa via main_set:
# ✅ Correcto — parametrizado via main_set
lh_bronze = main_set["lh_bronze"] # abfss://workspace@onelake.dfs.fabric.microsoft.com/lakehouse.Lakehouse
# ❌ Errado — hardcoded
lh_bronze = "abfss://33f78fb2-abc-.../<guid>.Lakehouse"
Isto garante que o mesmo notebook corre em desenvolvimento, staging e produção apenas mudando os parâmetros no runner.
Os paths de Lakehouse são sempre em formato ABFSS (abfss://<workspace>@onelake.dfs.fabric.microsoft.com/<lakehouse>/). Nunca se “afixa” um Lakehouse em construção de paths — os paths chegam sempre como parâmetro.
A excepção são as Global Libs, que estão afixadas como Lakehouse por defeito no contexto dos notebooks. Isto permite o import directo sem configuração:
import sys
sys.path.append("/lakehouse/default/Files/Global_Libs")
from dap_ELogger import ELogger
Este /lakehouse/default/ funciona porque o Lakehouse das Global Libs está configurado como default no workspace. Para tudo o resto, usar ABFSS explícito.
| Workspace | ID | Quando usar |
|---|---|---|
e_ext_ingest_ws |
— | Dados com acesso público ou provenientes do exterior (APIs públicas, parceiros, upload de ficheiros) |
e_int_ingest_ws |
— | Dados com acesso privado ou de sistemas internos |
O pipeline Calamidade e o Gapminder correm em e_ext_ingest_ws. Pipelines que acedam a sistemas internos ou dados sensíveis devem usar e_int_ingest_ws.
Áreas identificadas para evolução, mas ainda não implementadas:
Implementações concretas desta metodologia:
| Secção | Conteúdo |
|---|---|
| Camada Bronze | Padrões de ingestão de dados externos |
| Camada Silver | Normalização, casting, auditoria |
| Camada Gold | Consolidação, mapeamentos, enriquecimento |
| Orquestração — Runner | Configuração declarativa, grupos, movement types |
| Bibliotecas Comuns | ELogger, Azure REST, Lakehouse file tools |
| Fontes de Dados | Padrões de acesso a fontes externas |