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

Como usar a atividade Lookup no Azure Data Factory

João Barros 08 de July de 2026 4 min de leitura

A atividade Lookup no Azure Data Factory permite ir buscar valores a uma tabela ou ficheiro e usá-los para controlar o resto do pipeline — por exemplo, ler a data da última carga ou a lista de tabelas a processar. Em vez de escrever valores fixos dentro das atividades, o pipeline passa a decidir o que fazer a partir dos próprios dados. Dominar esta atividade é o que separa um pipeline rígido de um que se adapta sozinho aos dados.

Pré-requisitos

  • Uma instância de Azure Data Factory já criada.
  • Um Linked Service e um Dataset a apontar para a fonte (por exemplo, Azure SQL Database).
  • Uma tabela de controlo com dados para ler (ex.: datas de carga ou lista de tabelas).
  • Permissões para criar e publicar pipelines no ADF Studio.

Passo 1: Preparar a tabela de origem

A atividade Lookup lê sempre a partir de um Dataset. Neste exemplo vamos usar uma pequena tabela de controlo no Azure SQL Database que guarda a lista de tabelas a carregar — um padrão muito comum em cenários de ETL. Se a tabela ainda não existir, crie-a e preencha-a com uma query simples:

CREATE TABLE dbo.LoadList (
    SchemaName NVARCHAR(50),
    TableName  NVARCHAR(100),
    Enabled    BIT
);

INSERT INTO dbo.LoadList VALUES
('dbo','Clientes',1),
('dbo','Encomendas',1),
('dbo','Produtos',0);

Ficámos com duas tabelas ativas (Enabled = 1) e uma desativada. Assim conseguimos mostrar, mais à frente, como devolver apenas as linhas que interessam.

Passo 2: Adicionar a atividade Lookup ao pipeline

No ADF Studio, abra o separador Author e crie um novo pipeline com o botão +. No painel Activities, à esquerda, expanda a categoria General e procure por Lookup. Arraste a atividade para a tela e dê-lhe um nome claro, como LookupTables. A Lookup vive na categoria General porque não move dados — apenas os lê para tomar decisões.

Passo 3: Configurar a origem e a query

Selecione a atividade Lookup e abra o separador Settings. Em Source dataset, escolha o Dataset que aponta para o Azure SQL Database. A seguir, no campo Use query, selecione Query em vez de Table — assim controla exatamente que colunas e linhas são devolvidas, o que é mais eficiente do que ler a tabela inteira:

SELECT SchemaName, TableName
FROM dbo.LoadList
WHERE Enabled = 1;

Por fim, desligue a opção First row only. Quando está ligada, a Lookup devolve apenas a primeira linha, o que é ideal para ler um único valor (como uma data). Quando está desligada, devolve todas as linhas num array — exatamente o que precisamos para percorrer várias tabelas.

A atividade Lookup devolve no máximo 5000 linhas e 4 MB de dados. Para volumes maiores, filtre na query ou divida o processamento por lotes.

Passo 4: Usar o resultado noutras atividades

O resultado da Lookup fica disponível como uma expressão. Para ler um único valor (com First row only ligado) usaria:

@activity('LookupTables').output.firstRow.TableName

Como desligámos essa opção, temos um array em output.value e a contagem em output.count. Adicione a seguir uma atividade ForEach e, no campo Items, escreva:

@activity('LookupTables').output.value

Dentro do ForEach, cada iteração expõe a linha atual. Para aceder ao nome da tabela dessa iteração, use @item().TableName. Repare que o nome entre plicas em @activity('LookupTables') tem de coincidir exatamente com o nome que deu à atividade, caso contrário a expressão falha na validação.

Verificar o resultado

Clique em Debug para executar o pipeline sem publicar. No separador Output, passe o rato sobre a atividade LookupTables e clique no ícone de saída: deve ver um objeto JSON com count igual a 2 e um array value com as duas tabelas ativas. Se o ForEach correr duas vezes, está tudo a funcionar.

Conclusão

Com a atividade Lookup passou a alimentar o pipeline a partir de dados reais, em vez de valores fixos — o primeiro passo para pipelines verdadeiramente dinâmicos e reutilizáveis. Como próximo passo, experimente ligar First row only para ler uma data de watermark e fazer cargas incrementais. Que valor da sua tabela de controlo gostaria de deixar de ter escrito à mão no pipeline?