Pular para o conteúdo principal

Exemplo de contrato completo.

Use esta página como um mapa para a superfície do contrato de ingestão. O exemplo é intencionalmente amplo, mas os contratos de produção devem incluir apenas campos que expressem uma decisão real.

Prata SCD1 da JDBC​

Este contrato lê uma tabela de banco de dados, aplica desduplicação determinística, valida a qualidade, evolui o esquema de forma aditiva, grava linhas de estado atual e registra metadados de operações.

preset: silver_upsert

source:
type: connector
connector: postgres
options:
url: "{{ secret:erp/postgres_url }}"
dbtable: public.orders
auth:
type: basic
username: "{{ secret:erp/user }}"
password: "{{ secret:erp/password }}"
read:
partitionColumn: order_id
lowerBound: 1
upperBound: 5000000
numPartitions: 8
fetchsize: 10000

target:
catalog: main
schema: sales_curated
table: s_orders

layer: silver
source_system: erp
mode: upsert
merge_keys: [order_id]
watermark_columns: [updated_at]

column_mapping:
id: order_id
customer: customer_id

transform:
shape:
columns:
order_id:
cast: string
customer_id:
cast: string
total_amount:
alias: order_total
cast: decimal(18,2)
updated_at:
cast: timestamp
cast:
order_id: string
customer_id: string
order_total: decimal(18,2)
updated_at: timestamp
standardize:
customer_id:
trim: true
empty_as_null: true
derive:
updated_date: to_date(updated_at)
deduplicate:
keys: [order_id]
order_by:
- column: updated_at
direction: desc
nulls: last
- column: order_id
direction: desc
nulls: last

schema_policy: additive_only
allow_type_widening: true

delta_properties:
delta.enableChangeDataFeed: "true"
delta.autoOptimize.optimizeWrite: "true"
cluster_columns: [customer_id, updated_at]
optimize_after_write: true

quality_rules:
required_columns: [order_id, customer_id, updated_at]
not_null: [order_id, updated_at]
unique_key: [order_id]
min_rows: 1
expressions:
- name: non_negative_total
expression: "order_total >= 0"
severity: quarantine
message: "Order total must not be negative."

on_quality_fail: quarantine
idempotency_key: "orders:${run_date}"
idempotency_policy: skip_if_success
retry_attempts: 5
retry_backoff_seconds: 10
lock_enabled: true

operations:
business_owner: sales-ops
technical_owner: data-platform
support_group: data-platform
criticality: high
expected_frequency: daily
freshness_sla_minutes: 180
runbook_url: https://wiki.example.com/runbooks/orders

annotations:
table:
description: Curated current-state orders table.
tags:
domain: sales
layer: silver
columns:
customer_id:
description: Business customer identifier.
tags:
entity: customer

Como ler este exemplo​

BloquearPropósito
sourceDefine apenas como os dados são lidos. A formação dos negócios acontece mais tarde.
targetDefine o destino físico. layer permanecem metadados operacionais.
transformProjeta dados aninhados, converte valores, padroniza texto, deriva colunas e desduplica antes da qualidade e gravação.
quality_rulesDefine portas para gravações seguras e expressões com capacidade de quarentena.
operationsFornece metadados de propriedade e SLA para painéis e alertas.
annotationsDocumenta a tabela e os campos resultantes no catálogo.

Mantenha os contratos intencionais​

Não copie todos os campos em todos os contratos. Use presets e modelos para padrões e mantenha apenas os campos que comunicam uma decisão que os revisores devem entender.