(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
Azure Data Factory
Azure Data Factory 1 min

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.

Partilhar: