Data Storage & Performance
LakehouseApresentação
📦 BLOCO 4 — Data Storage & Performance
1️⃣ Columnar vs Row Storage
Existem dois grandes tipos de armazenamento.
Row-based storage
Exemplo:
id | name | country | age
1 | Ana | PT | 25
2 | John | US | 31
Muito usado em: bases OLTP, PostgreSQL, MySQL
Bom para: inserts, updates, transações
Columnar storage
Exemplo conceptual:
id: [1,2,3,4]
name: [Ana,John,...]
country: [PT,US,...]
age: [25,31,...]
Muito usado em: data warehouses, data lakes
Benefícios:
- ✔ lê apenas colunas necessárias
- ✔ compressão melhor
- ✔ scans mais rápidos
Exemplo: SELECT country FROM users — num formato columnar só lê a coluna country.
2️⃣ Formatos importantes
Parquet
O formato mais usado em data engineering.
Características:
- columnar
- compressão eficiente
- schema incluído
- otimizado para analytics
Exemplo de escrita em Spark:
df.write.parquet("s3://data/users")
Benefícios: menos IO, scans rápidos, compressão alta
Delta Lake
Uma camada sobre Parquet.
Adiciona:
- ACID transactions
- versioning
- time travel
- schema evolution
Permite coisas como: SELECT * FROM table VERSION AS OF 3
Usado em: Databricks, Microsoft Fabric, Lakehouse architectures
Apache Iceberg
Alternativa moderna ao Delta.
Características: ACID, schema evolution, hidden partitioning, metadata tables
Muito usado em: AWS, Snowflake, Trino, Starburst
3️⃣ Partitioning (muito importante)
Partitioning significa dividir dados em pastas lógicas.
Exemplo:
data/events/
date=2026-03-05/
date=2026-03-06/
Query: SELECT * FROM events WHERE date = '2026-03-05'
O sistema lê apenas essa partição.
Isto chama-se: partition pruning
Benefícios:
- ✔ menos dados lidos
- ✔ queries mais rápidas
- ✔ menos custo
Boas práticas de partitioning
Escolher colunas: date, region, customer_id
Evitar: IDs únicos, UUIDs — porque criam milhões de partições pequenas.
4️⃣ Clustering / Sorting
Mesmo dentro de uma partição podemos ordenar dados.
Exemplo: partition: date=2026-03-05, cluster by: country
Benefícios: melhor compressão, scans mais eficientes
BigQuery chama isto: clustering
5️⃣ File sizes (super importante)
Sistemas distribuídos não gostam de ficheiros pequenos.
Problema clássico: Small Files Problem
Exemplo: 100000 ficheiros de 5KB
Problemas: metadata overhead, jobs lentos, muitos open operations
Tamanho ideal de ficheiros: 128MB – 1GB
6️⃣ Compaction
Se tens muitos ficheiros pequenos, faz-se compaction.
Exemplo:
1000 ficheiros de 5MB
↓
20 ficheiros de 250MB
Spark example:
df.repartition(10).write.parquet(...)
7️⃣ Data Skipping
Motores modernos usam metadata para evitar scans.
Exemplo: Se um ficheiro só tem date = 2026-03-01
Uma query WHERE date = '2026-03-10' pode ignorar completamente o ficheiro.
Isto chama-se: predicate pushdown
8️⃣ Predicate Pushdown
Filtros são aplicados antes de ler dados completos.
Exemplo: SELECT * FROM users WHERE country = 'PT'
O engine só lê blocos relevantes.
Funciona bem com: Parquet, ORC, Delta, Iceberg
9️⃣ Data Layout
Layout correto pode reduzir custos brutalmente.
Exemplo mau: events.parquet — tudo num ficheiro
Exemplo bom:
events/
year=2026/
month=03/
day=05/
🔟 Hot vs Cold Data
Estratégia comum:
- Hot data → queries frequentes
- Cold data → armazenamento barato
Exemplo: últimos 30 dias → warehouse | dados antigos → data lake
⚠️ Problemas comuns de performance
- Small files — Milhares de ficheiros pequenos
- Data skew — Uma partição muito maior
- Bad partitioning — Exemplo mau:
partition by user_id - Excessive partitions — Exemplo:
partition by timestamp
🧠 Frases que impressionam em entrevistas
Choosing the right partitioning strategy and file size is critical for query performance in data lakes.
Columnar formats like Parquet reduce IO by allowing engines to read only the required columns.
🎯 10 perguntas que podem sair na entrevista
- Qual a diferença entre row storage e columnar storage?
- Porque é que Parquet é tão usado em data lakes?
- O que é partitioning e porque melhora performance?
- O que é partition pruning?
- Qual o problema dos small files?
- Qual o tamanho ideal de ficheiros num data lake?
- O que é predicate pushdown?
- Qual a diferença entre Parquet e Delta Lake?
- Como melhorarias performance de queries num data lake?
- O que é compaction e quando usarias?
Perguntas
Sem perguntas. Clica em Editar para adicionar.