(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como fazer deteção de esquemas dinâmicos em Azure Data Factory

João Barros 29 de September de 2026 4 min de leitura

Este tutorial mostra como criar um pipeline no Azure Data Factory que deteta mudanças de esquema em dados (por exemplo, novos campos num CSV/Parquet) e aciona transformações condicionais. Detetar esquemas dinâmicos evita falhas em cargas e permite adaptar pipelines automaticamente.

Pré-requisitos

  • Conta Azure com permissão para criar recursos (Data Factory, Storage).
  • Azure Data Factory (v2) criado e acesso ao portal ADF ou integração com Git.
  • Azure Blob Storage ou ADLS Gen2 com ficheiros de exemplo (CSV/Parquet).
  • Conhecimentos básicos de pipelines, activities e Linked Services no ADF.

Passo 1: Conceito e estratégia

Explica-se a abordagem: usar a atividade Get Metadata para ler esquema/colunas do ficheiro, comparar com um esquema de referência guardado (num ficheiro JSON no Storage ou numa tabela SQL) e, se houver diferenças, marcar o evento (por exemplo com um ficheiro de controlo ou Trigger). Esta estratégia evita falhas em transformações e permite revisões manuais ou automáticas.

Passo 2: Preparar o esquema de referência

Criar um ficheiro JSON simples no Storage que contém a lista de colunas esperadas. Esse ficheiro será o ponto de comparação.

{
  "columns": ["id","name","date","amount"]
}

Coloque este ficheiro, por exemplo, no container 'control' como reference_schema.json.

Passo 3: Pipeline - obter metadados do ficheiro de dados

Crie um pipeline no ADF com uma atividade Get Metadata apontada para o dataset do ficheiro de dados (CSV ou Parquet). Configure a Field list para 'structure' ou 'columnCount' e 'childItems' conforme o formato. O objetivo é obter a lista de colunas detectadas.

// Exemplo de output esperado da atividade Get Metadata (pseudo-JSON)
{
  "structure": [
    {"name":"id","type":"String"},
    {"name":"name","type":"String"},
    {"name":"date","type":"String"},
    {"name":"amount","type":"Decimal"},
    {"name":"new_col","type":"String"}
  ]
}

Passo 4: Ler o esquema de referência

Adicione uma atividade Lookup que lê o ficheiro reference_schema.json do mesmo Storage. Configure o Lookup para 'First row only' = false se devolver um array. O output terá a lista de colunas esperadas.

// Exemplo de output da Lookup
{
  "value": [{"columns": ["id","name","date","amount"]}]
}

Passo 5: Comparar esquemas com uma atividade If Condition

Adicione uma atividade If Condition que compara os arrays de colunas. Use uma expressão que verifique se existe alguma coluna no esquema detectado que não esteja no esquema de referência, ou vice-versa. Para simplificar, converta listas em strings ordenadas e compare ou use funções contains.

// Exemplo de expressão (ADF expression language)
@greater(length(arrayExcept(activity('GetMetadata').output.structure[*].name, activity('Lookup').output.value[0].columns)), 0)

// arrayExcept não existe nativamente; alternativa: usar uma Azure Function/Databricks para comparação quando necessário.

Nota: se precisar de lógica mais complexa (diferenças com tipos), chame uma Azure Function ou um Databricks Notebook a partir do pipeline para comparar e devolver um booleano e lista de diferenças.

Passo 6: Ações dependendo do resultado

No ramo true (diferença encontrada) faça uma destas ações: criar um ficheiro de alerta no Storage, enviar um e‑mail via Logic App, ou gravar a diferença numa tabela SQL para análise. No ramo false, continue com o ETL normal.

// Exemplo: atividade Web para chamar Logic App (body simplificado)
{
  "differences": "@string(activity('Compare').output)"
}

Passo 7: Automatizar e versionar o esquema de referência

Automatize a actualização do ficheiro reference_schema.json quando se aprovarem mudanças: por exemplo, ter um pipeline separado que, após validação manual, atualiza o ficheiro. Guarde histórico com timestamps para auditoria.

Verificar o resultado

Para confirmar que a deteção funciona: coloque um ficheiro com uma nova coluna no Storage e execute o pipeline. Verifique a execução no Monitor do ADF; confirme que a atividade If Condition entrou no ramo de diferença e que a ação escolhida (ficheiro de alerta, e‑mail, registo SQL) se executou. Revise os outputs das atividades Get Metadata e Lookup no painel de saída para ver as listas de colunas.

Conclusão

Detetar esquemas dinâmicos no Azure Data Factory protege pipelines contra falhas e facilita a governação de dados. Próximos passos: implementar lógica mais rica (tipos, renomes, colunas obrigatórias) usando Azure Function ou Databricks para comparação, e adicionar testes automáticos. Dica: comece por registar sempre o esquema detectado para facilitar o debugging; qual é a primeira mudança de esquema que espera encontrar?