Como usar a atividade Lookup no Azure Data Factory
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?