Apache Spark com MinIO e SQL Server¶
Sobre o trabalho¶
Este é o Trabalho 2 da disciplina de Arquitetura de Dados. O objetivo é construir um pipeline completo seguindo a arquitetura Medallion, utilizando Apache Spark (PySpark) para extração e transformação, SQL Server como banco fonte, MinIO como object storage compatível com S3 e Delta Lake como formato de tabela aberta com suporte a transações ACID.
Toda a infraestrutura sobe via Docker Compose — não é necessário instalar Java, Spark ou Python localmente.
Escopo
Este trabalho não implementa Apache Iceberg. A conversão para Iceberg é requisito exclusivo do Trabalho 1.
Stack utilizada¶
-
SQL Server 2022
Banco de dados fonte com 11 tabelas relacionais do domínio
seguradora -
MinIO
Object storage compatível com S3, hospedando os buckets
landing-zoneebronze -
Apache Spark 3.5
Engine de processamento distribuído, lê CSV e grava Delta no MinIO via S3A
-
Delta Lake 3.2
Open table format com ACID, Time Travel e DML nativo (INSERT/UPDATE/DELETE)
-
Python + pyodbc + boto3
Extração das tabelas do SQL Server e upload em CSV para o MinIO
-
Docker Compose
Orquestração dos containers SQL Server, MinIO e Jupyter Lab
Pipeline¶
graph LR
A[(SQL Server<br/>seguradora)] -->|pyodbc + boto3| B[MinIO<br/>landing-zone<br/>CSV]
B -->|Apache Spark 3.5| C[MinIO<br/>bronze<br/>Delta Lake]
C -.->|ACID · Time Travel| D[INSERT · UPDATE · DELETE]
style A fill:#cc2927,stroke:#7a1717,color:#fff
style B fill:#c72e29,stroke:#7a1c19,color:#fff
style C fill:#00add4,stroke:#005f74,color:#fff
style D fill:#5e6ee4,stroke:#3a44a0,color:#fff
| Camada | Bucket | Formato | Descrição |
|---|---|---|---|
| Landing Zone | landing-zone |
CSV | Dados brutos extraídos do SQL Server |
| Bronze | bronze |
Delta Lake | Dados em formato transacional com DML nativo |
Banco de dados — seguradora¶
O banco seguradora modela um sistema de seguro de automóveis com 11 tabelas relacionais.
erDiagram
REGIAO ||--o{ ESTADO : tem
ESTADO ||--o{ MUNICIPIO : possui
MUNICIPIO ||--o{ ENDERECO : localiza
ENDERECO ||--o{ CLIENTE : reside
CLIENTE ||--o{ TELEFONE : tem
CLIENTE ||--o{ APOLICE : possui
APOLICE ||--o{ SINISTRO : gera
APOLICE }o--|| CARRO : cobre
MARCA ||--o{ MODELO : produz
MODELO ||--o{ CARRO : define
| Tabela | Registros | Descrição |
|---|---|---|
regiao |
5 | Regiões do Brasil |
estado |
15 | Estados brasileiros |
municipio |
10 | Municípios |
endereco |
10 | Endereços dos clientes |
cliente |
10 | Clientes da seguradora |
telefone |
10 | Telefones de contato |
marca |
8 | Marcas de veículos |
modelo |
15 | Modelos de veículos |
carro |
10 | Veículos segurados |
apolice |
10 | Apólices de seguro |
sinistro |
8 | Sinistros registrados |
Notebooks¶
A execução do pipeline é feita em quatro notebooks, executados em ordem:
-
00 — Setup SQL Server
Cria o banco
seguradora, as 11 tabelas e importa os CSVs da pastadata/ -
01 — Extração para landing-zone
Lê todas as tabelas via
pyodbce faz upload para o MinIO como CSV viaboto3 -
02 — Bronze Delta
Lê os CSVs com Spark e converte para Delta Lake no bucket
bronze -
03 — DML no Delta
INSERT, UPDATE, DELETE e Time Travel sobre as tabelas Delta