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 comSCOPE_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 de1
, e Número Máximo de Threads de1
. - 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.
-
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.) -
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. -
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çãoSet
é usada para construir uma variável começando com a fraseSCOPE_CHUNK
e é concatenada com o ID único do registro da fonte, bem como um contador de registros e um sufixo de.csv
: -
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.
-
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.)
-
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 de1
, e Número Máximo de Threads de1
.
Executar a operação resulta em registros CSV individuais, mostrados na saída do log:
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
.
-
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.) -
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: -
Dentro da transformação, a fonte e o destino usam o mesmo esquema, e todos os campos estão mapeados:
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 usarSCOPE_CHUNK
. A funçãoSet
é usada para construir uma variável começando com a fraseSCOPE_CHUNK
e é concatenada com o ID de registro único da fonte, bem como um contador de registros, e um sufixo de.json
: -
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:
-
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>
-
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 de1
, e Número Máximo de Threads de1
:
Executar a operação resulta em registros JSON individuais, mostrados na saída do log: