Noções Básicas de Engenharia de Dados
9 exemplos para você começar com Engenharia de Dados - 7 básicos e 2 intermediários.
Busque em todas as páginas da documentação
9 exemplos para você começar com Engenharia de Dados - 7 básicos e 2 intermediários.
uv pip install pandas pyarrow prefectArmazene dados brutos em armazenamento colunar antes das transformações.
import pandas as pd
df = pd.read_csv("orders.csv", parse_dates=["ordered_at"], dtype={"region": "category"})
df.to_parquet("raw/orders.parquet", index=False, compression="zstd")dt=2025-01-15/ aceleram leituras seletivas.Relacionado: Formatos de Arquivo - Parquet e Arrow
Limpe e modele dados em uma etapa scriptável.
import pandas as pd
df = pd.read_parquet("raw/orders.parquet")
clean = (
df.dropna(subset=["order_id"])
.assign(revenue=pd.to_numeric(df["revenue"], errors="coerce"))
.query("revenue >= 0")
)
clean.to_parquet("staging/orders_clean.parquet", index=False)Relacionado: Limpeza e Transformação de Dados
Upsert ou sobrescrita de partição para que novas tentativas não dupliquem.
import pandas as pd
from pathlib import Path
run_dt = "2025-01-15"
out = Path(f"mart/orders/dt={run_dt}/data.parquet")
out.parent.mkdir(parents=True, exist_ok=True)
df.to_parquet(out, index=False) # sobrescreve a partição para esta dtrun_dt substitui, não anexa duplicados.Relacionado: Confiabilidade do Fluxo de Trabalho - decisões de idempotência
Jobs em batch rodam em um relógio quando a tolerância à latência é de horas.
# crontab: 0 6 * * * /path/.venv/bin/python /path/jobs/daily_orders.py
import logging
logging.basicConfig(level=logging.INFO)
logging.info("daily_orders started")Relacionado: Airflow - agendamento de DAGs
Uma função por etapa com entradas/saídas tipadas.
from pathlib import Path
import pandas as pd
def extract(path: Path) -> pd.DataFrame:
return pd.read_parquet(path)
def transform(df: pd.DataFrame) -> pd.DataFrame:
return df.groupby("region", observed=True)["revenue"].sum().reset_index()
def load(df: pd.DataFrame, path: Path) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
df.to_parquet(path, index=False)Relacionado: Prefect & Dagster
Rejeite dados ruins antes que cheguem aos marts.
import pandera.pandas as pa
schema = pa.DataFrameSchema({
"order_id": pa.Column(int, unique=True),
"revenue": pa.Column(float, pa.Check.ge(0)),
})
schema.validate(df)Relacionado: Validação e Qualidade de Dados
Visibilidade operacional começa com métricas simples.
import logging
logger = logging.getLogger(__name__)
def transform(df):
logger.info("input_rows=%s", len(df))
out = df.drop_duplicates("order_id")
logger.info("output_rows=%s", len(out))
return outRelacionado: Melhores Práticas de Engenharia de Dados
Orquestre tarefas Python com novas tentativas e UI.
from prefect import flow, task
import pandas as pd
@task(retries=2, retry_delay_seconds=30)
def extract() -> pd.DataFrame:
return pd.read_parquet("raw/orders.parquet")
@flow(log_prints=True)
def daily_orders():
df = extract()
# transform + load ...
if __name__ == "__main__":
daily_orders()@task isolam falhas transitórias de S3/DB.Relacionado: Prefect & Dagster
Analise apenas as datas que você precisa.
import pandas as pd
df = pd.read_parquet("mart/orders", filters=[("dt", ">=", "2025-01-01")]scan_parquet do Polars oferece o mesmo predicate pushdown.Relacionado: Formatos de Arquivo - layout de partição
Versões da Pilha: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026