Trabalho 2 — Engenharia de Dados
Este repositório documenta um pipeline de dados em ambiente académico: extração a partir do Microsoft SQL Server, armazenamento de ficheiros na zona de aterragem (landing zone) do MinIO (API compatível com S3) e materialização da camada Bronze em Delta Lake, processada com Apache Spark (PySpark).
O enunciado da atividade, o checklist de requisitos (landing → bronze, DML, tabelas gerenciadas, repositório modelo, Delta sem Iceberg no T2) e o vínculo com o Trabalho 1 estão descritos na página Enunciado (Trabalho 2).
Fluxo de dados (origem à Bronze)
O diagrama seguinte sintetiza as transições lógicas entre sistemas e formatos, alinhadas aos notebooks numerados na pasta notebook/.
A etapa 00 prepara o esquema relacional e dados de referência no SQL Server; a etapa 01 exporta tabelas para CSV no MinIO; a etapa 02 aplica schema enforcement, metadados de auditoria e gravação transacional Delta na Bronze. O notebook dml_bronze.ipynb ilustra operações de manutenção e consulta ao histórico sobre uma tabela Delta já presente no bucket bronze.
Ambiente, ODBC e buckets MinIO
.env: utilizar o ficheiro.env.examplena raiz como modelo (cp .env.example .env). Valores com o carácter#devem ir entre aspas, senão o restante da linha é interpretado como comentário (incluindo a senha do SA no Docker e no JDBC).- ODBC (notebook
00): no Linux, instalarunixodbce um driver para SQL Server — Microsoft ODBC 18 ou FreeTDS (tdsodbc). O notebook deteta automaticamente o driver, salvo definição explícita deMSSQL_ODBC_DRIVER. - Buckets
landing-zoneebronze: o serviço Dockerminio-initcria ambos; os notebooks01e02garantem a mesma existência via API S3 (boto3), como redundância quando o init não corre.
Stack principal
| Tecnologia | Versão | Função no trabalho |
|---|---|---|
| SQL Server | 2025 (Docker) | Sistema origem relacional |
| MinIO | RELEASE.2025-02 | Armazenamento objeto estilo S3 |
| Apache Spark | 3.5.3 (PySpark) | Motor de processamento distribuído |
| Delta Lake | 3.2.0 | Formato de tabela com ACID e versionamento |
| Python | 3.11 + UV | Gestão de dependências e execução dos notebooks |
Notebooks
| Ordem | Ficheiro | Descrição |
|---|---|---|
| 00 | 00_setup_sqlserver.ipynb |
Criação do BibliotecaDb e carga a partir dos CSV de referência (deteção automática do driver ODBC no Linux) |
| 01 | 01_extracao_sqlserver_landing_zone.ipynb |
Extração SQL Server → CSV no bucket landing-zone; garante o bucket MinIO antes da escrita |
| 02 | 02_landing_to_bronze_delta.ipynb |
Leitura dos CSV, conformação de schema, gravação Delta no bucket bronze; garante buckets MinIO (landing-zone, bronze) antes da ingestão |
| 03 | dml_bronze.ipynb |
Demonstração de DML (INSERT, UPDATE, DELETE) e auditoria history() na Bronze |
Execução resumida
Recomenda-se executar os notebooks 00 → 01 → 02 na primeira montagem do ambiente; o notebook 03 pressupõe tabelas Delta já existentes em s3a://bronze/.
Para consultar a documentação estática gerada pelo MkDocs, utilizar uv run task docs_serve na raiz do repositório. Detalhes de ODBC, .env e buckets MinIO estão na página Pré-requisitos e configuração.