{% extends "base.html" %} {% block title %}Arquitetura - engineer_kit{% endblock %} {% block content %}

Arquitetura do engineer_kit

O local lab ensina e testa os mesmos contratos usados em código, Parquet e Lakehouse.

SourceRestConnectorHTTP, auth, paginação
ExtractionExtractionSessionstreaming + batches
IncrementalStateStorewatermark/checkpoint
BronzeDestinationbatch + schema estável
Transformopcionaldbt, Spark ou SQL

Connector

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

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: ...

StateStore

Persiste o checkpoint sem acoplar o connector ao storage. Implementações oficiais: DuckDBStateStore, JsonFileStateStore e DeltaStateStore.

get_watermark / set_watermark

Destination

Materializa a Bronze. Implementações oficiais: DuckDBDestination, ParquetDestination e DeltaDestination.

load(...) → LoadResult

RunLogBackend

Audita a execução sem amarrar o Pipeline a uma tabela específica. Há backends DuckDB, JSONL e Delta.

record(RunLogEntry)

Pipeline

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

Transform

É deliberadamente pós-ingestão. dbt é uma integração opcional no local lab; plataformas podem executar dbt, Spark ou SQL externamente.

Bronze → staging → silver → gold

Batching: três controles diferentes

API 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.

Managed mode e embedded mode

Managed mode

O Pipeline entrega o stream ao Destination, confirma a Bronze e depois avança o checkpoint.

API → Pipeline → Destination → StateStore

Embedded mode

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()

Adapters disponíveis

UsoDestinationStateAuditInstalação
Local zero-infraDuckDBDestinationDuckDBStateStoreDuckDBRunLogStoreengineer_kit[duckdb]
Arquivos / lake montadoParquetDestinationJsonFileStateStoreJsonLinesRunLogStoreengineer_kit[parquet]
Lakehouse / plataformaDeltaDestinationDeltaStateStoreDeltaRunLogStoreengineer_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.

Contrato Bronze

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

Retry e checkpoint

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.

Write modes

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.

Runtime local

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.

{% endblock %}