Saltar al contenido

Dividir un Archivo en Registros Individuales Usando SCOPE_CHUNK

Introducción

Este patrón de diseño se puede utilizar para dividir los datos de un archivo de varios registros en varios archivos, cada uno de los cuales contiene un único registro, utilizando la opción SCOPE_CHUNK sintaxis de prefijo del Set función.

Consejo

Este patrón se recomienda cuando los datos de origen son planos (no jerárquicos) y la operación no contiene una transformación que utilice mapeo condicional. Para datos de origen complejos (jerárquicos), consulte Dividir un archivo en registros individuales usando SourceInstanceCount.

Caso de Uso

En este escenario, los datos de origen contienen varios registros y el proceso de negocio o el extremo de destino requiere que los registros se procesen individualmente.

Patrón de Diseño

Este patrón de diseño consiste en leer el archivo mediante una operación en la que la transformación utiliza el mismo esquema de origen y de destino. Este patrón tiene estas características clave:

  • En el primer campo de la transformación que procesa los datos, el Set la función se utiliza para establecer una variable que comienza con SCOPE_CHUNK seguido de texto adicional para construir el nombre de la variable. El primer argumento crea el nombre del archivo de salida, normalmente utilizando un identificador de registro de los datos de origen. Los nombres de archivo deben ser únicos para evitar que se sobrescriban, por lo que se puede utilizar un contador de registros o un GUID como parte del nombre de archivo.
  • Un destino de almacenamiento de archivos como Almacenamiento temporal o Almacenamiento local debe ser usado. (Usando una Variable no es compatible). Se recomienda definir una ruta. El nombre del archivo debe configurarse con el nombre de la variable global utilizada en el Set función.
  • Las opciones de operación debe configurarse con Activar fragmentación seleccionado, con un Tamaño de fragmento de 1, Número de registros por archivo de 1 y Número máximo de subprocesos de 1.
  • Durante el tiempo de ejecución, cada registro se leerá y se le asignará un nombre de archivo único y se escribirá individualmente en el destino.

Después de usar este patrón, normalmente el siguiente paso es usar el FileList función para obtener la matriz de nombres de archivos en el directorio (configure la actividad Leer del directorio de archivos con el * comodín), luego recorre la matriz y lee cada archivo en el código fuente para la siguiente operación.

Ejemplos

Se proporcionan ejemplos que utilizan el patrón de diseño descrito anteriormente para dos tipos diferentes de datos de origen: un archivo CSV plano y un archivo JSON jerárquico.

CSV Plano

Esta cadena de operación de ejemplo aplica el patrón de diseño descrito anteriormente para dividir datos CSV planos en un archivo para cada registro. Cada número corresponde con una descripción del etapa de operación a continuación. Para obtener detalles adicionales, consulte las capturas de pantalla de JSON jerárquico ejemplo.

operación cadena csv divisor anotado

  1. El secuencia de comandos asigna los datos de origen a una variable global llamada io (de entrada y salida). (Se utiliza un secuencia de comandos con fines de demostración; los datos de origen también podrían provenir de un extremo configurado).

    cargar csv de datos de origen

  2. El io La variable global se utiliza para configurar una Variable extremo y la operación utiliza una actividad de Lectura variable asociada como origen de la transformación.

  3. Dentro de la transformación, el origen y los destinos utilizan el mismo esquema y todos los campos están asignados. El primer campo de datos en el secuencia de comandos de mapeo de la transformación está configurado para usar SCOPE_CHUNK. El Set la función se utiliza para construir una variable que comienza con la frase SCOPE_CHUNK y está concatenado con el ID de registro único de la fuente, así como un contador de registros y un sufijo de .csv:

    nacido

  4. El objetivo es un Almacenamiento temporal Actividad de escritura configurada con una ruta predeterminada y la variable global de nombre de archivo definida anteriormente.

  5. Los secuencias de comandos sirven para registrar la salida y son opcionales. El primer secuencia de comandos obtiene una lista de los archivos del directorio y recorre la lista, registra el nombre y el tamaño del archivo, y luego pasa el nombre del archivo a una operación con otro secuencia de comandos que registra el contenido del archivo. (Consulte las capturas de pantalla del JSON jerárquico ejemplo anterior.)

  6. Las opciones de operación debe configurarse con Activar fragmentación seleccionado, con un Tamaño de fragmento de 1, Número de registros por archivo de 1 y Número máximo de subprocesos de 1.

La ejecución de la operación da como resultado registros CSV individuales, que se muestran en la salida del registro:

divisor csv de registros

JSON Jerárquico

Esta cadena de operación de ejemplo aplica el patrón de diseño descrito anteriormente para dividir datos JSON jerárquicos en un archivo para cada registro. Cada número corresponde con una descripción del etapa de operación a continuación.

Nota

Este patrón de diseño ya no es el método recomendado para dividir datos JSON jerárquicos. Para conocer el método recomendado, consulte Dividir un archivo en registros individuales usando SourceInstanceCount.

operación cadena json splitter anotado

  1. El secuencia de comandos asigna los datos de origen a una variable global llamada io (de entrada y salida). (Se utiliza un secuencia de comandos con fines de demostración; los datos de origen también podrían provenir de un extremo configurado).

    cargar datos de origen json

  2. El io La variable global se utiliza para configurar una Variable extremo y la operación utiliza una actividad variable Lectura asociada como origen de la transformación:

    lectura variable

  3. Dentro de la transformación, el origen y el destino utilizan el mismo esquema y todos los campos están asignados:

    divisor json

    La cima item El nodo tiene una condición para generar el recuento de registros. El primer campo de datos en la asignación de transformación está configurado para usar SCOPE_CHUNK. El Set la función se utiliza para construir una variable que comienza con la frase SCOPE_CHUNK y está concatenado con el ID de registro único de la fuente, así como un contador de registros y un sufijo de .json:

    divisor json

  4. El objetivo es un Almacenamiento temporal Actividad de escritura configurada con una ruta predeterminada y la variable global de nombre de archivo definida anteriormente:

    divisor de escritura de almacenamiento temporal

  5. Los secuencias de comandos sirven para registrar la salida y son opcionales. El primer secuencia de comandos obtiene una lista de los archivos del directorio y recorre la lista, registra el nombre y el tamaño del archivo, y luego pasa el nombre del archivo a una operación con otro secuencia de comandos que registra el contenido del archivo:

    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. Las opciones de operación debe configurarse con Activar fragmentación seleccionado, con un Tamaño de fragmento de 1, Número de registros por archivo de 1 y Número máximo de subprocesos de 1:

    opciones json splitter

La ejecución de la operación da como resultado registros JSON individuales, que se muestran en la salida del registro:

divisor json de registros