Ir para o conteúdo

Dividir um arquivo em registros individuais usando SCOPE_CHUNK no Jitterbit Integration Studio

Introdução

Este padrão de design pode ser usado para dividir os dados em um arquivo de múltiplos registros em vários arquivos, cada um contendo um único registro, usando a sintaxe de prefixo SCOPE_CHUNK da função Set.

Dica

Este padrão é recomendado quando os dados de origem são planos (não hierárquicos) e a operação não contém uma transformação que utiliza mapeamento condicional. Para dados de origem complexos (hierárquicos), veja Dividir um arquivo em registros individuais usando SourceInstanceCount.

Caso de uso

Neste cenário, os dados de origem contêm múltiplos registros, e o processo de negócios ou o endpoint de destino requer que os registros sejam processados individualmente.

Padrão de design

Este padrão de design é para ler o arquivo usando uma operação onde a transformação utiliza o mesmo esquema de origem e destino. Este padrão possui as seguintes características principais:

  • No primeiro campo da transformação que processa os dados, a função Set é usada para definir uma variável que começa com SCOPE_CHUNK seguida de texto adicional para construir o nome da variável. O primeiro argumento constrói o nome do arquivo de saída, tipicamente usando um identificador de registro dos dados de origem. Os nomes dos arquivos devem ser únicos para evitar serem sobrescritos, então um contador de registros ou um GUID pode ser usado como parte do nome do arquivo.
  • Um destino de armazenamento de arquivo, como Armazenamento Temporário ou Armazenamento Local, deve ser utilizado. (Usar uma Variável não é suportado.) É recomendável definir um caminho. O nome do arquivo deve ser configurado com o nome da variável global usada na função Set.
  • As opções da operação devem ser configuradas com Habilitar Chunking selecionado, com um Tamanho do Chunk de 1, Número de Registros por Arquivo de 1, e Número Máximo de Threads de 1.
  • Durante a execução, cada registro será lido e atribuído a um nome de arquivo único, e escrito individualmente no destino.

Após usar este padrão, normalmente o próximo passo é utilizar a função FileList para obter o array de nomes de arquivos no diretório (configure a atividade de Leitura do diretório de arquivos com o caractere curinga *), em seguida, percorra o array e leia cada arquivo na fonte para a próxima operação.

Exemplos

Exemplos usando o padrão de design descrito acima são fornecidos para dois tipos diferentes de dados de origem: um arquivo CSV plano e um arquivo JSON hierárquico.

CSV Plano

Esta cadeia de operações aplica o padrão de design descrito acima para dividir dados CSV planos em um arquivo para cada registro. Cada número corresponde a uma descrição da etapa da operação abaixo. Para detalhes adicionais, consulte as capturas de tela do exemplo de JSON Hierárquico.

cadeia de operações CSV splitter anotada

  1. O script atribui os dados de origem a uma variável global chamada io (entrada/saída). (Um script é usado para fins de demonstração; os dados de origem também podem vir de um endpoint configurado.)

    carregar dados de origem CSV

  2. A variável global io é usada para configurar um endpoint Variável, e uma atividade de Leitura de Variável associada é utilizada pela operação como a fonte da transformação.

  3. Dentro da transformação, a fonte e os alvos usam o mesmo esquema, e todos os campos são mapeados. O primeiro campo de dados no script de mapeamento da transformação é configurado para usar SCOPE_CHUNK. A função Set é usada para construir uma variável começando com a frase SCOPE_CHUNK e é concatenada com o ID único do registro da fonte, bem como um contador de registros e um sufixo de .csv:

    bom

  4. O destino é uma atividade de Armazenamento Temporário Escrever configurada com um caminho padrão e a variável global de nome de arquivo definida anteriormente.

  5. Os scripts são para registrar a saída e são opcionais. O primeiro script obtém uma lista dos arquivos do diretório e percorre a lista, registrando o nome do arquivo e o tamanho, e então passa o nome do arquivo para uma operação com outro script que registra o conteúdo do arquivo. (Veja as capturas de tela do exemplo de JSON Hierárquico acima.)

  6. As opções da operação devem ser configuradas com Habilitar Divisão em Blocos selecionado, com um Tamanho do Bloco de 1, Número de Registros por Arquivo de 1, e Número Máximo de Threads de 1.

Executar a operação resulta em registros CSV individuais, mostrados na saída do log:

logs CSV splitter

JSON Hierárquico

Esta cadeia de operações de exemplo aplica o padrão de design descrito acima para dividir dados JSON hierárquicos em um arquivo para cada registro. Cada número corresponde a uma descrição da etapa da operação abaixo.

Nota

Este padrão de design não é mais o método recomendado para dividir dados JSON hierárquicos. Para o método recomendado, veja Dividir um arquivo em registros individuais usando SourceInstanceCount.

operation chain JSON splitter annotated

  1. O script atribui os dados de origem a uma variável global chamada io (entrada/saída). (Um script é usado para fins de demonstração; os dados de origem também podem vir de um endpoint configurado.)

    load source data JSON

  2. A variável global io é usada para configurar um endpoint de Variável, e uma atividade de Leitura de Variável associada é utilizada pela operação como a fonte da transformação:

    variable read

  3. Dentro da transformação, a fonte e o destino usam o mesmo esquema, e todos os campos estão mapeados:

    JSON splitter

    O nó item superior possui uma condição para gerar a contagem de registros. O primeiro campo de dados no mapeamento da transformação é configurado para usar SCOPE_CHUNK. A função Set é usada para construir uma variável começando com a frase SCOPE_CHUNK e é concatenada com o ID de registro único da fonte, bem como um contador de registros, e um sufixo de .json:

    JSON splitter

  4. O destino é uma atividade de Escrita em Armazenamento Temporário configurada com um caminho padrão e a variável global de nome de arquivo definida anteriormente:

    Temporary Storage write splitter

  5. Os scripts são para registrar a saída e são opcionais. O primeiro script obtém uma lista dos arquivos do diretório e percorre a lista, registrando o nome do arquivo e o tamanho, e então passa o nome do arquivo para uma operação com outro script que registra o conteúdo do arquivo:

    log_file_list_json
    <trans>
    arr = Array();
    arr = FileList("<TAG>activity:tempstorage/json_splitter/tempstorage_read/Read</TAG>");
    cnt = Length(arr); i = 0;
    While(i < cnt,
    filename = arr[i];
    file = ReadFile("<TAG>activity:tempstorage/json_splitter/tempstorage_read/Read</TAG>",filename);
    WriteToOperationLog("file: " + filename + " has a length of: " + Length(file));
      $gv_file_filter = filename;
    RunOperation("<TAG>operation:log_each_file_json</TAG>");
    i++
    );
    </trans>
    
    log_each_file_json
    <trans>
    WriteToOperationLog(ReadFile("<TAG>activity:tempstorage/json_splitter/tempstorage_read/Read</TAG>",$gv_file_filter));
    </trans>
    
  6. As opções da operação devem ser configuradas com Habilitar Chunking selecionado, com um Tamanho do Chunk de 1, Número de Registros por Arquivo de 1, e Número Máximo de Threads de 1:

    options JSON splitter

Executar a operação resulta em registros JSON individuais, mostrados na saída do log:

logs JSON splitter