Parametrização avançada no ADF: pipelines genéricos e reutilizáveis
João Barros
04 de July de 2025
1 min de leitura
O erro mais comum no Azure Data Factory é criar um pipeline separado por tabela. A parametrização permite criar pipelines genéricos que recebem configuração em runtime, reduzindo drasticamente o número de artefactos a manter.
Tipos de parâmetros no ADF
Pipeline Parameters: definidos no pipeline, passados em runtime
Dataset Parameters: tornam datasets dinâmicos (schema, table, path)
Linked Service Params: credenciais dinâmicas por ambiente
Global Parameters: constantes partilhadas por todos os pipelines
Variables: estado interno durante execução do pipeline
Dataset parametrizado
// Dataset: DS_SQL_Generic
Parameters:
p_schema: string = "dbo"
p_table: string
Properties → Table:
Schema: @{dataset().p_schema}
Table: @{dataset().p_table}
// Usar no Copy Activity:
Source Dataset: DS_SQL_Generic
p_schema: "vendas"
p_table: @{pipeline().parameters.source_table}
Pipeline metadata-driven
-- Tabela de configuração
CREATE TABLE adf_config.ingest_tables (
id INT IDENTITY PRIMARY KEY,
source_schema VARCHAR(50),
source_table VARCHAR(200),
sink_path VARCHAR(500),
watermark_col VARCHAR(100),
is_active BIT DEFAULT 1
);
-- Pipeline ADF:
1. Lookup → SELECT * FROM adf_config.ingest_tables WHERE is_active = 1
2. ForEach → items: @{activity('LookupConfig').output.value}
3. Execute Pipeline: PL_Copy_Generic
p_source_schema: @{item().source_schema}
p_source_table: @{item().source_table}
p_sink_path: @{item().sink_path}
p_wm_column: @{item().watermark_col}
Expressões dinâmicas úteis
// Data de hoje para particionamento
@{formatDateTime(pipeline().TriggerTime, 'yyyy/MM/dd')}
// Nome dinâmico de ficheiro
@{concat(pipeline().parameters.table_name, '_', formatDateTime(utcNow(),'yyyyMMdd_HHmmss'), '.parquet')}
// Condição de filtro incremental
@{concat('updated_at > \'', string(activity('LookupWatermark').output.firstRow.last_wm), '\'')}
Conclusão
Um pipeline metadata-driven com 1 pipeline + 1 dataset + 1 tabela de configuração substitui 50 pipelines individuais. É a diferença entre um ADF de 300 artefactos impossível de manter e um de 20 artefactos elegantes.