{% extends "base.html" %} {% block title %}Arquitetura - engineer_kit{% endblock %} {% block content %}
O local lab ensina e testa os mesmos contratos usados em código, Parquet e Lakehouse.
Contrato pai independente de plataforma. RestConnector implementa HTTP, autenticação, paginação e janela incremental sem saber se está rodando localmente, no Fabric, Databricks, AWS ou GCP.
extract_incremental() → ExtractionSessionÉ single-pass e streaming-first. Iterar a sessão retorna batches limitados em memória; o default oficial é 25_000. collect() existe apenas como materialização explícita para datasets pequenos.
for batch in run: ...Persiste o checkpoint sem acoplar o connector ao storage. Implementações oficiais: DuckDBStateStore, JsonFileStateStore e DeltaStateStore.
get_watermark / set_watermarkMaterializa a Bronze. Implementações oficiais: DuckDBDestination, ParquetDestination e DeltaDestination.
load(...) → LoadResultAudita a execução sem amarrar o Pipeline a uma tabela específica. Há backends DuckDB, JSONL e Delta.
record(RunLogEntry)Coordena extração, transação da Bronze, checkpoint e auditoria. Um PipelineResult contém run id, janela, destino, linhas e watermarks.
extract → load → checkpoint → auditÉ deliberadamente pós-ingestão. dbt é uma integração opcional no local lab; plataformas podem executar dbt, Spark ou SQL externamente.
Bronze → staging → silver → goldAPI pagination size
↓
Extraction batch size (default: 25.000)
↓
Destination write batch size
O tamanho de página respeita a API; o extraction batch controla memória e o tamanho entregue ao consumidor; o write batch é uma decisão física do adapter. Uma API com páginas de 1.000 registros pode, por exemplo, preencher aproximadamente 25 páginas antes de entregar um batch padrão de 25.000. Essa relação não é rígida: paginação e batching permanecem independentes.
O Pipeline entrega o stream ao Destination, confirma a Bronze e depois avança o checkpoint.
API → Pipeline → Destination → StateStore
Em Fabric, Databricks ou outro runtime, o usuário pode usar apenas a extração e incremental, processar batches com Spark/Pandas/Polars e chamar run.commit() somente depois de persistir o resultado.
API → ExtractionSession → user code → Spark/Delta → commit()
| Uso | Destination | State | Audit | Instalação |
|---|---|---|---|---|
| Local zero-infra | DuckDBDestination | DuckDBStateStore | DuckDBRunLogStore | engineer_kit[duckdb] |
| Arquivos / lake montado | ParquetDestination | JsonFileStateStore | JsonLinesRunLogStore | engineer_kit[parquet] |
| Lakehouse / plataforma | DeltaDestination | DeltaStateStore | DeltaRunLogStore | engineer_kit[delta] |
Cloud é tratado como runtime/storage, não como uma subclasse do conector. S3, GCS, ADLS/OneLake e caminhos Delta entram por URI/storage options quando suportados pelo adapter e pelo ambiente.
Os campos declarados chegam fisicamente à Bronze como strings. A tipagem analítica é lógica e fica para staging/transformação. Isso evita que uma mudança de tipo na API derrube a ingestão.
campos declarados → string / null campo novo → _extra + warning registro original → _raw execução → _run_id janela incremental → _window_start / _window_end retry idempotente → _ingestion_key
read watermark
↓
extract API
↓
write/process downstream
↓
sucesso
↓
commit watermark
↓
audit (best effort)
↓
transform opcional
Se a Bronze ou o processamento downstream falhar, o watermark não avança. Em embedded mode, ExtractionSession.commit() também recusa checkpoint parcial: a sessão precisa ter sido consumida completamente.
append é o padrão de Bronze e mantém janelas distintas. overwrite substitui o alvo inteiro com promoção/transação segura quando suportada. Merge/upsert não é inferido pela biblioteca porque exige uma chave de negócio explícita.
A UI é opcional e pensada para desenvolvimento e treinamento:
# interface local pip install "engineer_kit[ui]" # dbt local pip install "engineer_kit[dbt]" # laboratório completo: DuckDB + UI + dbt pip install "engineer_kit[local]" engineer_kit ui --workspace .
O editor visual cria pipelines DuckDB porque o navegador de dados e a integração dbt do local lab são locais. Parquet, Delta e embedded mode usam os mesmos contratos via Python/YAML e são documentados aqui como arquitetura de plataforma.