O padrão Lookup-ForEach é comum no Azure Data Factory (ADF). Como os itens produzidos pelo Lookup são alocados aos trabalhadores do ForEach, cujo número é controlado pelo Batch Count?
relate perguntas
-
Armazém de dados Azure Sql - existe alguma maneira de ver o verdadeiro plano de consulta?
-
A consulta SQL do Azure nunca é concluída
-
A 'Falha na validação' do Azure Data Factory com a pasta não existe
-
Copie o armazenamento premium do Azure para o armazenamento padrão para redundância
-
Como posso medir quanto tempo leva uma consulta no SQL Data Warehouse do Azure
Eles são alocados em rodízio, na ordem em que são produzidos pelo Lookup. Embora eu não possa encontrar nenhuma documentação para afirmar isso, é minha observação. Posso reproduzi-lo de forma confiável com um exemplo simples.
Para um novo pipeline eu adicionei uma variável de array, um ForEach, e dentro do ForEach a Wait (o pipeline JSON está incluído no final). A variável array alimenta os itens do ForEach. Embora a pergunta mencione Lookup, o resultado é o mesmo quando uma variável de matriz é usada. A duração do Wait é determinada pelos valores do array, simplesmente para espalhar as iterações ao longo do tempo para torná-las mais facilmente observáveis.
Executei o pipeline e coletei a saída do ADF. Usei a Duração para calcular um horário de término (mostrado abaixo em mm:ss). Adicionei mais três colunas, uma para cada "trabalhador". Para entender qual trabalhador executou qual iteração eu segui as cadeias Start-End.
Eu atribuo arbitrariamente a Tarefa 1 ao trabalhador A. Ela terminou às 15:08, então encontro uma tarefa que começou então (dentro da precisão das durações relatadas) que é a tarefa 4 e a atribuo ao trabalhador A também, e assim por diante. As tarefas 2 e 3 iniciam suas próprias cadeias de maneira semelhante. O padrão resultante é o de alocação round-robin.
Essa análise em cargas de trabalho muito mais complicadas, envolvendo muito mais tarefas, contagens de lotes maiores e durações variadas, produz a mesma evidência para alocação round-robin. Por exemplo, servindo 21 tarefas quando o Batch Count é 20, vejo que a 21ª tarefa nunca começa até que a 1ª seja concluída.