Ir para o conteúdo

Emerson Amorim

Data

Engenharia de dados na AWS: pipeline com Python, S3, Athena e arquitetura escalável

Arquitetura de pipeline na AWS: ingestão Python, S3 particionado, Athena, qualidade de dados e custos sob controle.

Por Emerson Amorim14 min de leitura

Um pipeline escalável na AWS separa ingestão, armazenamento bruto, camada analítica e consumo. S3 é o sistema de registro; Athena consulta o que estiver bem particionado e documentado.

Arquitetura de referência

Sources ─► Ingest (Python) ─► s3://lake/bronze/
                              │
                              ▼
                     Transform (Python/Spark)
                              │
                              ▼
                    s3://lake/silver|gold/
                              │
                              ▼
                           Athena ─► consumers
Ingestão → S3 bronze → transformação → S3 silver/gold → Athena/BI/ML.

Particionamento e formatos

  • Prefira Parquet/ORC com compressão
  • Partições por dt=YYYY-MM-DD (e hora se o volume justificar)
  • Evite milhares de arquivos minúsculos
  • Registre tabelas no Glue Catalog com schema explícito
Escrita particionada ilustrativa
import pyarrow as pa
import pyarrow.parquet as pq

def write_partition(table: pa.Table, bucket: str, dt: str) -> str:
    path = f"s3://{bucket}/silver/events/dt={dt}/part-{dt}.parquet"
    pq.write_table(table, path, compression="zstd")
    return path

Athena com custo sob controle

Consulta restrita à partição
SELECT device_id, avg(temperature) AS avg_temp
FROM lake.silver_events
WHERE dt BETWEEN date '2026-09-01' AND date '2026-09-07'
GROUP BY 1
ORDER BY avg_temp DESC
LIMIT 100;

Sem filtro de partição, Athena varre objetos demais. Monitore bytes escaneados e imponha workgroups com limites.

Qualidade e governança

  • Contratos de schema na ingestão
  • Checks de nulidade, duplicidade e faixa
  • Lineage mínima: job, versão, partição
  • IAM least privilege por prefixo S3

Limitações

Athena não substitui warehouse para alta concorrência de BI. Para streaming subsegundo, use serviços de stream e materialize no lake de forma assíncrona.