Todos os produtos
Search
Central de documentação

DataWorks:Entenda a lógica do nó for-each

Última atualização: Jun 27, 2026

O DataWorks oferece o nó for-each para iterar sobre o conjunto de resultados de um nó de atribuição e orquestrar fluxos de negócios. Este tópico descreve os componentes e a lógica desse nó.

Notas de uso

A tabela a seguir descreve como utilizar o nó for-each.

Descrição

Referências

Conheça os cenários de aplicação do nó for-each.

Cenários

Nota

Uso exclusivo para percorrer o conjunto de resultados retornado pelo nó de atribuição.

Saiba mais sobre limites e observações do nó for-each, como número máximo de iterações, testes e visualização de logs.

Limites, Observações

Personalize o fluxo de negócios dentro de um nó for-each. O fluxo deve começar com o nó Start integrado e terminar com o nó End integrado.

Componentes do nó e orquestração de fluxo

Entenda como a saída do nó de atribuição upstream determina a quantidade de iterações do nó for-each.

Número de iterações

Veja como as variáveis integradas do nó for-each obtêm valores relevantes em cada iteração.

Variáveis integradas

Consulte exemplos de recuperação de valores de variáveis e cálculo do total de iterações.

Exemplos de recuperação de valores quando o nó de atribuição upstream é Shell ou ODPS SQL

Cenários

O nó for-each do DataWorks destina-se principalmente a cenários que exigem loops. Seu uso requer obrigatoriamente um nó de atribuição upstream. O nó for-each recebe a saída desse nó de atribuição e itera sobre os resultados.

for-each

Limites

  • O nó for-each tem suporte apenas no DataWorks Standard Edition e versões posteriores. Para mais detalhes, consulte Detalhes dos recursos por versão.

  • Um nó for-each aceita no máximo 1.024 iterações. A quantidade real de repetições corresponde ao tamanho do conjunto de resultados produzido pelo nó de atribuição.

  • Não há suporte para execução simultânea. Uma nova iteração só começa após a conclusão da anterior.

Observações

Dimensão

Categoria

Descrição

Dependências upstream e downstream

Configurações de dependência

O nó for-each percorre os valores transmitidos por um nó de atribuição. Portanto, configure o nó de atribuição como upstream do for-each.

Suporte a iterações

Limite máximo de iterações

O nó for-each suporta até 1.024 loops. Exceder esse limite gera erro em tempo de execução. A quantidade efetiva de loops segue a saída do nó de atribuição upstream.

Quantidade de iterações

Definida pelo conjunto de resultados gerado pelo nó de atribuição.

Nós internos

Orquestração de fluxo

  • Remova as dependências entre os nós internos de um nó for-each e reorquestre o fluxo de negócios interno conforme necessário. No entanto, mantenha o Start node e o End node respectivamente como primeiro e último nós do fluxo interno.

  • Ao usar um nó de ramificação dentro do for-each para julgamentos lógicos ou percurso de resultados, inclua também um nó de mesclagem.

Recuperação de valores

Variáveis integradas permitem extrair valores específicos do nó de atribuição upstream.

Depuração e execução

Depuração de tarefas

  • No modo padrão, o DataWorks não permite testar nem executar nós for-each diretamente na interface do DataStudio.

    Para validar o funcionamento do nó for-each, submeta e publique a tarefa correspondente no Operation Center do ambiente de desenvolvimento. Em seguida, execute a tarefa do nó for-each nesse mesmo Operation Center.

  • Execute o nó de atribuição e o nó for-each simultaneamente. Ao realizar uma operação de backfill de dados para uma tarefa com gatilho automático no Operation Center, inicie o backfill a partir do nó de atribuição. Isso garante a execução conjunta de ambos os nós. Evite executar o nó for-each isoladamente.

Visualização de logs

Para inspecionar o log de execução de um nó for-each no Operation Center, clique com o botão direito na instância e selecione View Inner Nodes para acessar os logs dos nós internos.

Componentes do nó e orquestração de fluxo

No DataWorks, o nó for-each é um tipo especial de nó que encapsula outros nós internos. Ao criar um nó for-each, o sistema gera automaticamente três nós internos: um Start node (início do loop), um Shell node (tarefa do loop) e um End node (fim do loop). Esses nós formam um fluxo interno que itera sobre a saída do nó de atribuição upstream.for-each内部节点 Conforme ilustra a figura anterior:

  • Shell node

    Por padrão, o DataWorks cria um nó interno Shell para executar tarefas. Caso prefira, exclua o Shell node padrão e configure um nó personalizado para a tarefa de iteração do loop.

    • Se a tarefa de iteração for do tipo Shell, dê um clique duplo no Shell node para abrir o editor de código e desenvolver a lógica da tarefa.

    • Para tarefas de iteração mais complexas, adicione outros nós de tarefa ao fluxo interno e reestruture o processo de execução conforme necessário.

      Nota

      Ao personalizar o nó de tarefa do loop, remova as dependências existentes entre os nós internos e reorquestre o fluxo interno. Lembre-se de que o Start node e o End node devem ocupar, respectivamente, a primeira e a última posição no fluxo interno.

  • Start node e End node

    Esses nós marcam o início e o fim de cada ciclo no fluxo interno e não contêm código de tarefa específico.

    Nota

    O End node de um nó for-each não controla a quantidade de loops. Esse número deriva exclusivamente da saída do nó de atribuição upstream.

Número de iterações

Nota

Um nó for-each aceita no máximo 1.024 iterações. A quantidade real de repetições corresponde ao tamanho do conjunto de resultados produzido pelo nó de atribuição.

O total de iterações varia conforme o conjunto de resultados gerado pelo nó de atribuição:

  • Iterações com Shell e Python: A saída consiste em um array unidimensional. O número de loops equivale à quantidade de elementos nesse array, separados por vírgulas.

    Por exemplo, se a linguagem de atribuição for Shell ou Python (Python 2) e a saída for o array unidimensional 2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01, o nó for-each executará cinco iterações.

  • Iterações com SQL: A saída é um array bidimensional. O número de loops corresponde à quantidade de linhas desse array.

    Considere, por exemplo, um nó de atribuição em ODPS SQL cuja saída seja o seguinte array bidimensional:

    +----------------------------------------------+
    | uid            | region         | age_range       | zodiac |
    +----------------------------------------------+
    | 0016359810821  | Hubei Province | 30-40 years old | Cancer |
    | 0016359814159  | Unknown        | 30-40 years old | Cancer |
    +----------------------------------------------+

    Nesse caso, o nó for-each realizará duas iterações.

Variáveis integradas

Nos nós internos de um for-each, utilize os métodos abaixo para acessar o conjunto de resultados do nó de atribuição upstream. Se o fluxo interno já contiver um nó de atribuição, aplique o método padrão de recuperação de valores para nós downstream. Para detalhes sobre esse método, consulte Nó de atribuição.

Durante a iteração do nó for-each sobre a saída de um nó de atribuição, use variáveis integradas para obter o número da iteração atual e o deslocamento (offset).

Variável integrada

Descrição

Equivalência em um loop for

${dag.loopDataArray}

Retorna o conjunto de dados do nó de atribuição.

Corresponde ao seguinte trecho em um loop for:

data=[]

${dag.foreach.current}

Obtém o valor da iteração atual.

Tomando como base o loop for abaixo:

for(int i=0;i<data.length;i++) {
   print(data[i]);
}
  • data[i] equivale a ${dag.foreach.current}.

  • i equivale a ${dag.offset}.

${dag.offset}

Representa o deslocamento atual (posição da iteração em relação à primeira).

${dag.loopTimes}

Indica o número da iteração corrente.

-

Caso conheça o schema da tabela de saída, utilize as variáveis adicionais listadas a seguir para recuperar outros valores.

Outra variável

Descrição

${dag.foreach.current[n]}

Quando a saída do nó de atribuição upstream for um array bidimensional, recupera os dados de uma coluna específica na linha atual de cada iteração.

${dag.loopDataArray[i][j]}

Para saídas em formato de array bidimensional, acessa o dado localizado na linha i e coluna j do conjunto de dados.

${dag.foreach.current[n]}

Se a saída do nó de atribuição upstream for um array unidimensional, retorna o elemento no índice especificado.

Exemplos de uso das variáveis integradas

Exemplo 1: Nó de atribuição upstream do tipo Shell

  • Saída do nó de atribuição

    O nó de atribuição upstream é do tipo Shell. A saída final corresponde a 2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01.

  • Recuperação de valores no nó for-each

    Nota

    Como a saída é um array unidimensional com cinco elementos separados por vírgula, o nó for-each executa cinco iterações.

    Variável integrada

    Valor na 1ª iteração

    Valor na 2ª iteração

    ${dag.loopDataArray}

    2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01

    ${dag.foreach.current}

    2021-03-28

    2021-03-29

    ${dag.offset}

    0

    1

    ${dag.loopTimes}

    1

    2

    ${dag.foreach.current[3]}

    2021-03-30

Exemplo 2: Nó de atribuição upstream do tipo ODPS SQL

  • Saída do nó de atribuição

    O nó de atribuição upstream utiliza ODPS SQL. A última instrução select retorna dois registros:

    +----------------------------------------------+
    | uid            | region         | age_range       | zodiac |
    +----------------------------------------------+
    | 0016359810821  | Hubei Province | 30-40 years old | Cancer |
    | 0016359814159  | Unknown        | 30-40 years old | Cancer |
    +----------------------------------------------+
  • Recuperação de valores no nó for-each

    Nota

    Visto que a saída é um array bidimensional com duas linhas, o nó for-each realiza duas iterações.

    Variável integrada

    Valor na 1ª iteração

    Valor na 2ª iteração

    ${dag.loopDataArray}

    +----------------------------------------------+
    | uid            | region         | age_range       | zodiac |
    +----------------------------------------------+
    | 0016359810821  | Hubei Province | 30-40 years old | Cancer |
    | 0016359814159  | Unknown        | 30-40 years old | Cancer |
    +----------------------------------------------+

    ${dag.foreach.current}

    0016359810821,Hubei Province,30-40 years old,Cancer

    0016359814159,Unknown,30-40 years old,Cancer

    ${dag.offset}

    0

    1

    ${dag.loopTimes}

    1

    2

    ${dag.foreach.current[0]}

    0016359810821

    0016359814159

    ${dag.loopDataArray[1][0]}

    0016359814159