Configuración del programa de utilidad de carga de datos para ejecutar un preproceso de diferencias de archivos

Si de forma rutinaria carga el mismo archivo de entrada de carga de datos de un origen o sistema externo, puede optar por ejecutar un preproceso de diferencias de archivos como parte del proceso de carga de datos para asegurarse de que esté cargando únicamente los nuevos cambios cuando cargue el archivo de entrada más reciente.

Nota: La ejecución de un preproceso de diferencia de archivos no es necesaria. Si está planificando configurar la ejecución de una diferencia de archivos, asegúrese de revisar los procedimientos recomendados y escenarios para ejecutar este preproceso que se describen en el siguiente tema, Preproceso de diferencias de archivos de carga de datos.

Antes de empezar

Antes de configurar y ejecutar un preproceso de diferencias de archivos, asegúrese de que haber completar los requisitos previos siguientes:
  • Identifique los dos archivos de entrada de carga de datos que desea comparar y a partir de los cuales generar un archivo de diferencias.
  • Cargue satisfactoriamente el archivo de entrada antiguo en la base de datos de HCL Commerce. Si algunos registros están en el archivo antiguo y en el archivo nuevo con el que se compara el archivo antiguo, estos registros no están en el archivo de diferencias generado o en la base de datos. Para impedir que los registros se omitan sin haberse cargado en la base de datos, verifique que el contenido del archivo antiguo se carga en la base de datos.

Por qué y cuándo se efectúa esta tarea

Se dispone de una herramienta de diferencias de archivos que funciona como un preprocesador de lector de datos cuando se ejecuta el programa de utilidad de carga de datos. Este preprocesador de diferencias de archivos puede utilizarse para leer y comparar dos archivos CSV o dos archivos XML. El preprocesador utiliza una clase de lector de datos distinto para leer archivos CSV (CSVFileDiffPreprocessor) y archivos XML (XmlFileDiffPreprocessor) de modo que no puede comparar un archivo CSV con un archivo XML.

Propiedades de configuración para un preprocesador de diferencias de archivos

De forma predeterminada, hay varias propiedades de configuración que se podrán utilizar para configurar el preproceso para que satisfaga sus requisitos. La siguiente tabla lista las propiedades disponibles. Todas estas propiedades están especificadas dentro del archivo de configuración de orden de carga excepto para la propiedad keyColumns que debe especificarse en el archivo de configuración de objeto de negocio.
Propiedad de configuración Descripción:
keyColumns Necesario. Las columnas de clave son las columnas CSV o los elementos XML que identifican de forma exclusiva un registro en el archivo de entrada.
numberOfSplitFiles Opcional. Utilice esta propiedad para especificar la cantidad de archivos en los que se dividirán los archivos de entrada cuando el archivo de entrada antiguo es demasiado grande para ser almacenado en la memoria.

Se recomienda especificar numberOfSplitFiles en el archivo de configuración para evitar que el preprocesador de diferencia de archivos realice el cálculo adicional. Por ejemplo, si el archivo de entrada antiguo no es grande, por ejemplo tiene menos de 200 MB, puede especificar que el valor numberOfSplitFiles sea 1. Para establecer esta propiedad, consulte la nota del siguiente procedimiento para obtener detalles sobre cómo determinar el número de archivos divididos que deben especificarse.

checkDuplicatedKeys Opcional. Especifique esta propiedad como true realizar una comprobación adicional para ver si hay entradas duplicadas.

Se recomienda especificar checkDuplicatedKeys como falso si sabe que no tiene registros duplicados en los archivos de entrada. Este valor evita que el preprocesador de diferencias de archivos realice la comprobación adicional.

diffFileDirectory Opcional. Esta propiedad es para cambiar el directorio donde se guarda el archivo de diferencias generado.
dataReaderPreprocessOnly Opcional. Si se especifica esta propiedad como true se detendrá el proceso de carga de datos una vez que se haya generado y guardado el archivo de diferencias.
cleanupSplitFiles Opcional. Si los archivos de entrada están divididos, puede establecer esta propiedad en false para guardar los archivos más pequeños temporales generados. Si esta propiedad se establece en true o se omite, se suprimen los archivos más pequeños generados una vez que se han fusionado los archivos.
columnBasedCompare Opcional. Indica si el preprocesador va a utilizar una comparación basada en columnas para comparar archivos. Puede establecer los siguientes valores para esta propiedad:
true
Cada línea de los archivos se comparan columna por columna en lugar de los registros completos. El preprocesador determina si el valor de la misma columna en ambos archivos es el mismo. El preprocesador puede ignorar diferencias menores tales como el siguiente contenido de archivo:
  • Las mismas columnas existen en ambos archivos pero en un orden distinto.
  • Comas adicionales al final de un registro en un archivo pero no en el otro.
  • Se han encontrado comillas para un valor de columna en un archivo pero el valor no incluye comillas en el otro archivo.
    Nota: La diferencia entre las comillas en los archivos solamente se aplica a archivos CSV, como símbolos CSV. Si un registro de un archivo XML no incluye comillas, pero el registro del otro archivo XML incluye comillas dobles, el registro se considera que debe cambiarse.
false
El valor predeterminado. El preprocesador compara los registros completos de cada archivo línea por línea. Si las columnas están en una disposición distinta, todos los registros pueden considerarse distintos. El preprocesador también considera que los registros son diferentes cuando se encuentra diferencias menores, como cuando se encuentran comas adicionales al final de un registro.
Nota: La configuración de una comparación basada en columnas puede tardar más en completarse que utilizar el comportamiento de preprocesador de diferencia de archivos predeterminado. Con una comparación basada en columnas, el preprocesador debe completar una consulta adicional entre los archivos.
includeCompareColumns Opcional. Indica si el preprocesador de diferencia de archivos es comparar únicamente columnas específicas. Utilice una lista separada por comas como valor para esta propiedad para que identifique las columnas que se van a comparar. Cualquier columna que no esté en esta lista se ignora durante la comparación de archivos. Cuando se incluya esta propiedad, la propiedad columnBasedCompare se configura de forma predeterminada con el valor true cuando la propiedad no se configura de forma explícita.

Si se incluyen las propiedades includeCompareColumns y excludeCompareColumns, la propiedad includeCompareColumns tiene prioridad.

Si se incluye la propiedad includeCompareColumns sin un valor y la propiedad excludeCompareColumns con un valor, la propiedad excludeCompareColumns tiene prioridad.

Nota: Si se incluye la propiedad includeCompareColumns y no se establece un valor y la propiedad excludeCompareColumns no se ha establecido con un valor, el preprocesador de diferencias de archivos compara solamente las columnas de clave. Entonces, el archivo de diferencias generado incluirá solamente los registros del archivo de entrada nuevo que tengan un valor de columna de clave que no esté en el archivo de entrada antiguo.
excludeCompareColumns Opcional. Indica si el preprocesador de diferencia de archivos va a excluir de la comparación columnas específicas. Utilice una lista separada por comas como valor para esta propiedad de modo que identifique las columnas que se deban excluir de la comparación. Las demás columnas se comparan. Cuando se incluya esta propiedad, la propiedad columnBasedCompare se configura de forma predeterminada con el valor true cuando la propiedad no se configura de forma explícita.

Si se incluyen las propiedades includeCompareColumns y excludeCompareColumns, la propiedad includeCompareColumns tiene prioridad.

Si se incluye la propiedad excludeCompareColumns y no se establece un valor, el preprocesador de diferencia de archivos ignora la propiedad.

Configuración de la diferencia de archivos para manejar archivos de entrada grandes

El preproceso de diferencias de archivos carga el archivo de entrada antiguo en una correlación hash en la memoria del sistema y la compara con el archivo de entrada nuevo para generar un archivo de diferencias. Si el antiguo antiguo es demasiado grande para cargarlo en la memoria del sistema, el preprocesador de diferencias de archivos divide el archivo en archivos más pequeños. El nuevo archivo de entrada también se divide en el mismo número de archivos más pequeños. El preproceso genera un archivo de diferencias para cada aparejamiento de estos archivos más pequeños y, a continuación, fusiona estos archivos en un único archivo de diferencias más grande.

De forma predeterminada, el preprocesador de diferencias de archivos determina automáticamente el número de archivos que son necesarios para dividir un archivo grande. Puede elegir configurar el número de archivos en los que se dividen los archivos de entrada grandes. Si no se configura esta propiedad, asegúrese de especificar un número de archivos lo bastante grande como para que todos los registros del archivo de entrada puedan almacenarse en la memoria.

Dividir los archivos de entrada en archivos más pequeños requiere tiempo de proceso y el espacio de disco. Si el sistema tiene suficiente memoria física y utiliza una JVM de 64 bits, aumente el tamaño de almacenamiento dinámico de la JVM para manejar archivos de entrada grandes. Si el sistema tiene suficiente memoria asignada y el preproceso no divide los archivos de entrada, el archivo de diferencias se puede generar más rápido. Para obtener más información sobre el ajuste del rendimiento de la JVM, incluido el tamaño de almacenamiento dinámico de la JVM, consulte Ajuste del rendimiento de la JVM.

Procedimiento

  1. Actualice el archivo de configuración de objeto de negocio de carga de datos para que el objeto de negocio incluya el preprocesador de diferencias de archivos al ejecutar el programa de utilidad de carga de datos.
    1. Abra el archivo de configuración wc-loader-object.xml, donde object es el objeto de usuario de negocio que está cargando.
      Por ejemplo, wc-loader-catalog-entries.xml.
    2. Defina la propiedad keyColumns necesaria para el objeto de datos que están cargando.

      Para ejecutar un preproceso de diferencias de archivos, debe especificar las columnas clave para los archivos de entrada en el elemento del lector de datos del archivo de configuración de objeto de negocio de carga de datos. Estas columnas de clave son los columnas CSV o elementos XML que identifican de forma exclusiva un registro en el archivo de entrada.

      • Archivos CSV:
        <_config:DataReader className="com.ibm.commerce.foundation.dataload.datareader.CSVReader" firstLineIsHeader="true" useHeaderAsColumnName="true" >
          <_config:property name="keyColumns" value="key_columns" />
        </_config:DataReader>
        
      • Archivos XML:
        <_config:DataReader className="com.ibm.commerce.foundation.dataload.datareader.XmlReader" >
          <_config:property name="keyColumns" value="key_columns" />
        </_config:DataReader>
        

      Donde el código en texto negrita, añade la configuración para la propiedad keyColumns. Sustituya el valor key_columns con una lista de las columnas o elementos que son necesarias para identificar de forma exclusiva un registro en los archivos de entrada. Si se requieren varias columnas o varios elementos para identificar un registro, separe estas columnas de clave mediante una coma. Por ejemplo, si está cargando entradas de catálogo, el archivo de configuración de objeto de negocio puede especificar una sola columna de clave, PartNumber.

    3. Guarde y cierre el archivo.
  2. Actualice el archivo de configuración de orden de carga de carga de datos para que el orden de carga identifique la ubicación de los archivos que se van a comparar. Para ejecutar el preproceso de diferencias de archivos, debe identificar dos archivos.
    Por ejemplo, la versión cargada anteriormente y la versión más reciente de un archivo.

    Al especificar oldLocation para un archivo, está indicando que el preproceso de diferencias de archivos se va a ejecutar. Los tipos de archivo de los archivos que se identifican para la comparación determinan el lector de datos (CSV o XML) que se utiliza en el preproceso.

    1. Abra el archivo de configuración wc-dataload-object.xml, donde object es el objeto de usuario de negocio que está cargando.
      Por ejemplo, wc-dataload-catalog-entries.xml.
    2. Añada la sentencia de configuración que identifica la ubicación del directorio donde existen los archivos de entrada antiguos y nuevos:
      <_config:LoadItem name="CatalogEntry" businessObjectConfigFile="wc-loader-catalog-entry.xml" >
         <_config:DataSourceLocation location="new_file_location" oldLocation="old_file_location" />
      </_config:LoadItem>
      
      Donde el código en texto en negrita añade la configuración para identificar las ubicaciones de archivos de entrada. Sustituya el valor de new_file_location por el valor del archivo de entrada nuevo y sustituya el valor de old_file_location por el valor del archivo de entrada antiguo (cargado anteriormente). Por ejemplo,
       <_config:DataSourceLocation location="CatalogEntry_new.csv" oldLocation="CatalogEntry_old.csv" />
    3. Opcional: Añada una sentencia de configuración para cambiar el directorio donde se guarda el archivo de diferencias generado. De forma predeterminada este archivo se guarda en el mismo directorio que el nuevo archivo de entrada identificado. Este archivo generado se guarda con el mismo nombre de archivo que el nuevo archivo de entrada, pero con _diff_ y una indicación de fecha y hora que se añade al nombre
      Por ejemplo, si el nuevo archivo de entrada se denomina catentry.xml, el archivo de diferencias generado se denomina catentry_diff_2012.01.01_12.01.01.001.xml.
      <_config:LoadItem name="CatalogEntry" businessObjectConfigFile="wc-loader-catalog-entry.xml" >
        <_config:property name="diffFileDirectory" value="difference_file_directory" />
        <_config:DataSourceLocation location="CatalogEntry_new.csv" oldLocation="CatalogEntry_old.csv" />
      </_config:LoadItem>
      
      Donde el código en texto en negrita añade la configuración para cambiar el directorio. Sustituya el valor de difference_file_directory por el valor del directorio. Por ejemplo,
      <_config:property name="diffFileDirectory" value="c:\dataload" />
    4. Opcional: Añada la sentencia de configuración para detener el proceso de carga de datos después de que se genere y guarde el archivo de diferencias. Si desea revisar el archivo diferencia generados antes de cargar este archivo, añada esta propiedad de configuración. Esta configuración le brinda la posibilidad de generar el archivo de diferencias en cualquier momento y, además, cargar los datos en el sistema al ejecutar el programa de utilidad de carga de datos tiene un impacto menor sobre el rendimiento del sistema.
      <_config:LoadItem name="CatalogEntry" businessObjectConfigFile="wc-loader-catalog-entry.xml" >
        <_config:property name="dataReaderPreprocessOnly" value="true"/>
        <_config:DataSourceLocation location="new_file_location" oldLocation="old_file_location" />
      </_config:LoadItem>
      
      Donde el código en texto negrita añade la propiedad de configuración para ejecutar únicamente el preproceso de diferencias de archivos. Si establece el valor para esta propiedad en true el programa de utilidad de carga de datos se detendrá después de que se genere y guarde el archivo de diferencias. El valor predeterminado para esta propiedad es false, lo que da como resultado que el proceso de carga de datos continúe después de que guarde el archivo de diferencias y lo cargue en la base de datos.
    5. Opcional: Añada la sentencia de configuración para especificar la cantidad de archivos en los que se dividirán los archivos de entrada cuando el archivo de entrada antiguo es demasiado grande para ser almacenado en la memoria. Si divide este archivo, cada nuevo archivo en el que se divide este archivo de entrada original se compara con el nuevo archivo. Se genera un archivo de diferencias más pequeño para cada comparación entre el nuevo archivo y las partes del archivo de entrada antiguo. A continuación, el preprocesador de diferencias de archivos fusiona los archivos de diferencias generados en un único archivo.
      <_config:LoadItem name="CatalogEntry" businessObjectConfigFile="wc-loader-catalog-entry.xml" >
        <_config:property name="numberOfSplitFiles" value="number_of_files" />
        <_config:DataSourceLocation location="new_file_location" oldLocation="old_file_location" />
      </_config:LoadItem>
      
      Donde el código en texto negrita, añade la configuración para la propiedad numberOfSplitFiles. Sustituya el valor number_of_files por el número de archivos en los que desea dividir el archivo de entrada antiguo. Por ejemplo, la siguiente sentencia configura el preproceso de diferencias de archivos para dividir el archivo de entrada antiguo en tres archivos:
       <_config:property name="numberOfSplitFiles" value="3" />
      Nota: Si no especifica esta propiedad, el preprocesador de diferencias de archivos calcula el número de archivos en los que es necesario dividir los archivos de entrada. Este cálculo se basa en una estimación de la memoria que es necesaria para cargar el archivo antiguo en una correlación hash. Puede ejecutar el preprocesador de diferencias de archivos con el siguiente rastreo activado para ver el tiempo que el preprocesador necesita para hacer este cálculo y ver el número de archivos en los se dividen los archivos de entrada.
      -Dcom.ibm.commerce.foundation.dataload.level=CONFIG 
      Puede utilizar este salida de rastreo para especificar el valor para la propiedad numberOfSplitFiles durante la siguiente ejecución de una diferencia de archivos para versiones más nuevas de los archivos de entrada. Al determinar el valor para esta propiedad en este método, puede ahorrar tiempo que el preprocesador necesita para calcular este valor automáticamente cuando se ejecuta el preprocesador.
    6. Opcional: Añada la sentencia de configuración para realizar una comprobación adicional para entradas duplicadas. Si sabe que los archivos de entrada no contienen claves duplicadas, puede inhabilitar esta comprobación adicional.
      <_config:LoadItem name="CatalogEntry" businessObjectConfigFile="wc-loader-catalog-entry.xml" >
        <_config:property name="checkDuplicatedKeys" value="false" />
        <_config:DataSourceLocation location="new_file_location" oldLocation="old_file_location" />
      </_config:LoadItem>
      
      Donde el código en texto negrita añade la propiedad de configuración para realizar una comprobación adicional para valores de columnas de claves duplicadas durante el preproceso de diferencias de archivos. Si establece el valor de esta propiedad en false, la comprobación adicional para valores de claves duplicadas no se ejecuta. Si no especifica esta propiedad, el valor predeterminado es true, lo que da como resultado una comprobación adicional para valores de claves duplicadas.
    7. Opcional: Si el preproceso de diferencias de archivos divide archivos de entrada para manejar archivos de gran tamaño, los archivos de diferencias generados de menor tamaño se suprimen una vez que los archivos se fusionan. Si precisa estos archivos para fines de depuración, puede añadir una sentencia de configuración para hacer que el preprocesador de diferencias de archivos guarde los archivos temporales, sin eliminarlos automáticamente.
      <_config:LoadItem name="CatalogEntry" businessObjectConfigFile="wc-loader-catalog-entry.xml" >
         <_config:property name="cleanupSplitFiles" value="false" />
        <_config:DataSourceLocation location="new_file_location" oldLocation="old_file_location" />
      </_config:LoadItem>
      
      Donde el código en texto negrita, añade la configuración para la propiedad cleanupSplitFiles. Si especifica el valor para esta propiedad como false, los archivos temporales no se suprimen después de que se fusionen los archivos. De forma predeterminada, el valor de esta propiedad es true.
    8. Opcional: Configure el preprocesador de diferencias de archivos para completar una comparación de registros basada en columnas entre los archivos en lugar de comparar cada registro completo como una serie. Con la comparación basada en columnas, la disposición de las columnas o elementos XML en los archivos puede ignorarse. La comparación basada en columnas también le proporciona la capacidad para establecer las columnas que se van a comparar configurando el proceso para que incluya o excluya las columnas especificadas. Si los archivos incluyen columnas o elementos XML que se han organizado de forma distinta entre los archivos, configure el preproceso para que utilice la comparación basada en columnas.
      Añada la propiedad columnBasedCompare a la configuración de lector de datos para configurar el preprocesador para que utilice una comparación basada en columnas. Por ejemplo:
      <_config:LoadItem name="CatalogEntry" businessObjectConfigFile="wc-loader-catalog-entry.xml" >
        <_config:property name="dataReaderPreprocessOnly" value="true"/>
        <_config:property name="columnBasedCompare" value="true" />
        <_config:DataSourceLocation location="c:/temp/dataload/samples/CatalogEntryNew.csv" oldLocation="c:/temp/dataload/samples/CatalogEntryOld.csv" />
      </_config:LoadItem>
      
      Al configurar una comparación basada en columnas, puede configurar el preprocesador para que ignore columnas específicas, o para que compare únicamente columnas específicas. Debe indicar las columnas que se deben excluir o incluir en la comparación con una lista separada por comas. Los nombres de columna son sensibles a las mayúsculas y minúsculas y deben coincidir con las cabeceras de columna en los dos archivos.
      • Para especificar una lista de columnas para excluirlas de la comparación, añada la propiedad excludeCompareColumns a la configuración del lector de datos. Por ejemplo, la siguiente configuración excluye las columnas ListPrice, Price y Thumbnail de la comparación durante la diferencia de archivos:
        <_config:LoadItem name="CatalogEntry" businessObjectConfigFile="wc-loader-catalog-entry.xml" >
          <_config:property name="dataReaderPreprocessOnly" value="true"/>
          <_config:property name="columnBasedCompare" value="true" />
          <_config:property name="excludeCompareColumns" value="ListPrice, Price, Thumbnail" />
          <_config:DataSourceLocation location="c:/temp/dataload/samples/CatalogEntryNew.csv" oldLocation="c:/temp/dataload/samples/CatalogEntryOld.csv" />
        </_config:LoadItem>
        
      • Para especificar una lista de columnas que van a ser las únicas columnas que la diferencia de archivos compare, añada la propiedad includeCompareColumns a la configuración del lector de datos. Por ejemplo, la siguiente configuración identifica que la diferencia de archivos debe comparar únicamente las columnas PartNumber, ShortDescription y LongDescription. Las demás columnas no se comparan:
        <_config:LoadItem name="CatalogEntry" businessObjectConfigFile="wc-loader-catalog-entry.xml" >
          <_config:property name="dataReaderPreprocessOnly" value="true"/>
          <_config:property name="columnBasedCompare" value="true" />
          <_config:property name="includeCompareColumns" value="PartNumber, ShortDescription, LongDescription" />
          <_config:DataSourceLocation location="c:/temp/dataload/samples/CatalogEntryNew.csv" oldLocation="c:/temp/dataload/samples/CatalogEntryOld.csv" />
        </_config:LoadItem>
        
    9. Guarde y cierre el archivo.
  3. Ejecute el Carga de datos, programa de utilidad. Se ejecuta el preproceso de diferencias de archivos, y genera y guarda el archivo de diferencias. En función de las configuraciones, el programa de utilidad de carga de datos puede cargar el archivo de diferencias o detener el proceso de carga de datos para poder revisar el archivo de diferencias y cargar el archivo más adelante.

Ejemplo

El siguiente ejemplo muestra cómo configurar el archivo de configuración de objeto de negocio para ejecutar una diferencia de archivos en los dos archivos siguientes: Para ejecutar el preprocesador de diferencias de archivos para comparar estos archivos sin proceder a cargar el archivo de diferencias generado, el archivo de configuración de objeto de negocio puede parecerse al siguiente código:
<_config:DataLoadConfiguration xsi:schemaLocation="http://www.ibm.com/xmlns/prod/commerce/foundation/config ../xsd/wc-dataload.xsd">
  <_config:DataLoadEnvironment configFile="wc-dataload-env.xml"/>
  <_config:LoadOrder commitCount="100" batchSize="1" dataLoadMode="Replace" >
    <_config:LoadItem name="CatalogEntry" businessObjectConfigFile="wc-loader-catalog-entry.xml" >
      <_config:property name="dataReaderPreprocessOnly" value="true"/>
      <_config:DataSourceLocation location="c:/temp/dataload/samples/CatalogEntryNew.csv" oldLocation="c:/temp/dataload/samples/CatalogEntryOld.csv" />
    </_config:LoadItem>
  </_config:LoadOrder>
</_config:DataLoadConfiguration>
En este archivo de configuración de ejemplo, los dos archivos se encuentran en un directorio de ejemplo temporal. Una vez que el preprocesador se completa, el archivo de diferencias generado, CatalogEntryNew_diff_2013.03.28_12.01.01.001.csv, se guarda en el mismo directorio temporal. Este ejemplo incluye la propiedad de configuración dataReaderPreprocessOnly que hace que el programa de utilidad de carga de datos solo ejecute el preprocesador de diferencias de archivos. Para ejecutar el preprocesador, el archivo de configuración especifica que el programa de utilidad de carga de datos se va a ejecutar en modalidad de sustitución.