Saltar al contenido

Funciones Diff en Jitterbit Studio

Utilizar funciones Diff para sincronizar datos

La función Diff / Sincronizar de Jitterbit se puede utilizar en transformaciones para sincronizar datos en una única tabla a cualquier tipo de destino.

La fuente debe ser una base de datos o un archivo CSV. Si es una base de datos, la tabla de origen debe tener un conjunto de claves que identifiquen de manera única una fila de datos. No se admiten relaciones de tablas de origen jerárquicas.

La función diff se utiliza para dividir los datos de origen en tres categorías:

  • filas añadidas
  • filas actualizadas
  • filas eliminadas

La primera vez que se ejecuta una operación diff, todas las filas de origen se clasifican como "añadidas". Con cada ejecución subsiguiente, solo se procesarán las filas añadidas, cambiadas o eliminadas por Jitterbit. Esto puede ahorrar un tiempo de procesamiento significativo en casos donde una tabla de origen tiene numerosos registros que cambian con poca frecuencia.

Como se verá en los pasos a continuación, una "operación diff" generalmente consiste en varias operaciones encadenadas; cada operación sucesiva maneja adiciones, actualizaciones y eliminaciones respectivamente.

Para configurar una operación diff, siga estos pasos:

  1. Inicialice la sesión diff y defina el tipo de algoritmo diff a utilizar. Actualmente, se admiten "fragmentado" o "ordenado". Fragmentado siempre funcionará, pero ordenado puede ser más rápido si se garantiza el orden de las filas de datos de origen.
  2. Maneje las filas añadidas, actualizadas y eliminadas. El orden en que se manejan es arbitrario y depende del orden de las operaciones que implementan la sincronización.
  3. Finalice la sesión diff. Esto marca el proceso diff como completo; de lo contrario, una futura operación diff puede resultar en que no se procesen registros.

Advertencia

Las funciones Diff solo se pueden utilizar en un único agente privado, ya que las instantáneas diff no se comparten. No las utilice en un grupo de agentes con más de un agente. No son compatibles con agentes en la nube.

Paso 1: Inicializar la sesión Diff

Inicialice la sesión diff llamando a la función InitializeDiff con un "ID diff" único seguido de la función DiffKeyList (para un diff fragmentado) o la función OrderedDiffKeyList (para un diff ordenado) para definir la(s) clave(s) primaria(s) de la tabla de origen:

Ejemplo
InitializeDiff("A-unique-diff-ID-for-each-diff-process");
DiffKeyList("pk1", "pk2");

Paso 2: Manejar filas añadidas, actualizadas y eliminadas

Antes de cada transformación, se llaman a las funciones DiffAdd, DiffUpdate y DiffDelete. Cualquier transformación que se ejecute después de esas llamadas a funciones recibirá las filas añadidas, actualizadas o eliminadas respectivamente. La fuente de las transformaciones debe ser la misma tabla de base de datos o archivo CSV, pero el destino puede ser diferente en los tres casos.

Paso 3: Finalizar la sesión de Diff

La función DiffComplete debe ser llamada cuando los tres casos se hayan manejado con éxito. (En caso de errores, se debe usar la función ResetDiff en su lugar). Esto marca el proceso de diff como completo; de lo contrario, una futura operación de diff puede resultar en que no se procesen registros.

Funciones adicionales de Diff

  • DiffNode: Para fuentes jerárquicas, especifica el nodo que se utilizará como el nodo repetitivo para realizar el diff.
  • OrderedDiffKeyList: Especifica el orden de clasificación de la fuente cuando se utiliza el algoritmo de diff "ordenado".
  • ResetDiff: Restablece o purga la sesión de diff. Se utiliza en el manejo de errores para restablecer la sesión de diff en caso de fallo.
  • SetDiffChunkSize: Establece un parámetro para el algoritmo de diff "fragmentado". Un valor más grande es más rápido, pero utiliza más memoria.

Ejemplos de Diff

Para un ejemplo que utiliza diff en Design Studio, consulte Capturar cambios de datos con cambios en la tabla o archivo. Esto puede extrapolarse para su uso en Studio.

DiffAdd

Declaración

void DiffAdd()

Sintaxis

DiffAdd()

Descripción

Solicita los registros añadidos como entrada para la siguiente transformación que se ejecute.

Advertencia

Las funciones diff solo se pueden usar en un único agente privado, ya que las instantáneas diff no se comparten. No las use en un grupo de agentes con más de un agente. No son compatibles con agentes en la nube.

Ejemplos

// Comience procesando los registros añadidos en esta operación:
DiffAdd();

DiffComplete

Declaración

void DiffComplete()

Sintaxis

DiffComplete()

Descripción

Marca el proceso diff como completo. Este método debe ser llamado cuando el proceso diff se complete con éxito; de lo contrario, el proceso diff quedará en un estado inconsistente. En ese caso, la próxima vez que se ejecute la operación diff, no se procesarán registros.

Advertencia

Las funciones diff solo se pueden usar en un único agente privado, ya que las instantáneas diff no se comparten. No las use en un grupo de agentes con más de un agente. No son compatibles con agentes en la nube.

Ejemplos

// Marcar la operación diff como completa
DiffComplete();

DiffDelete

Declaración

void DiffDelete()

Sintaxis

DiffDelete()

Descripción

Solicita los registros eliminados como entrada para la siguiente transformación que se ejecute.

Advertencia

Las funciones diff solo se pueden usar en un único agente privado, ya que las instantáneas diff no se comparten. No las use en un grupo de agentes con más de un agente. No son compatibles con agentes en la nube.

Ejemplos

// Solicitando registros eliminados para la ejecución de la transformación
DiffDelete();

DiffKeyList

Declaración

void DiffKeyList(string k1[, string k2,... string kN])

Sintaxis

DiffKeyList(<k1>[, <k2>,... <kN>])

Parámetros requeridos

  • k1, k2,... kN: Claves de cadena que identifican las columnas en la fuente de diferencia que se utilizarán para identificar de manera única cada registro

Descripción

Establece la lista de claves que se utilizarán para identificar de manera única un registro en la fuente de diferencia. Este método se llama típicamente en conjunto con la función InitializeDiff.

Advertencia

Las funciones de diferencia solo se pueden usar en un solo agente privado, ya que las instantáneas de diferencia no se comparten. No las use en un grupo de agentes con más de un agente. No son compatibles con agentes en la nube.

Ejemplos

// Usando una diferencia fragmentada con las claves primarias de sincronización
// de CustomerId y OrderId:
DiffKeyList("CustomerId", "OrderId");

DiffNode

Declaración

void DiffNode(string nodeName)

Sintaxis

DiffNode(<nodeName>)

Parámetros requeridos

  • nodeName: Una cadena que especifica el nodo repetido que se utilizará para la operación de diferencia

Descripción

Para fuentes jerárquicas, esto especifica el nodo que se utilizará como el nodo repetido sobre el cual se realiza la diferencia.

Advertencia

Las funciones de diferencia solo se pueden usar en un solo agente privado, ya que las instantáneas de diferencia no se comparten. No las use en un grupo de agentes con más de un agente. No son compatibles con agentes en la nube.

Ejemplos

// Ejecutar la diferencia en el nodo de elemento XML <Listing>
DiffNode("Listing");

[[Back to top]](#top)

</div>


## `DiffUpdate` {: #difffunctions-diffupdate }

### Declaración {: #declaration }
void DiffUpdate()
### Sintaxis {: #syntax }
DiffUpdate()
### Descripción {: #description }

Solicita los registros actualizados como entrada para la próxima transformación que se ejecute.

!!! warning "Advertencia"
    Las funciones diff solo se pueden usar en un solo agente privado, ya que las instantáneas diff no se comparten. No las use en un grupo de agentes con más de un agente. No son compatibles con agentes en la nube.

### Ejemplos {: #examples }
// Solicitando registros actualizados para la ejecución de la transformación DiffUpdate();
<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Back to top]](#top)

</div>


## `InitializeDiff` {: #difffunctions-initializediff }

### Declaración {: #declaration }
void InitializeDiff(string diffId)
### Sintaxis {: #syntax }
InitializeDiff()
#### Parámetros requeridos {: #required-parameters }

-   `diffId`: Una cadena que identifica de manera única la operación diff de otras operaciones diff que se ejecutan en el sistema. La cadena debe ser la misma para cada ejecución de la operación con el fin de identificar correctamente el diff.

### Descripción {: #description }

Inicializa una nueva sesión diff.

La cadena pasada como `diffId` debe ser **diferente** de todos los demás identificadores diff utilizados en el sistema, pero debe ser la **misma** cada vez que se ejecute la operación. Si ya hay una sesión diff en ejecución, una llamada a este método fallará. Para limpiar una sesión diff antigua (como en el caso de una falla del sistema), llame a la función `ResetDiff` una vez.

Este método se llama típicamente en el script de pre-fuente de la primera operación que implementa un diff/sincronización.

!!! warning "Advertencia"
    Las funciones diff solo se pueden usar en un solo agente privado, ya que las instantáneas diff no se comparten. No las use en un grupo de agentes con más de un agente. No son compatibles con agentes en la nube.

### Ejemplos {: #examples }
// Synchronize the order database: InitializeDiff("Order Database Synchronization");

// Using chunked diff with the synchronizing primary keys // of CustomerId and OrderId: DiffKeyList("CustomerId", "OrderId");

// With sufficient memory available, increase the chunk size: SetDiffChunkSize(100000);

// Start by processing the added records in this operation: DiffAdd();

<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Volver al inicio]](#top)

</div>


## `OrderedDiffKeyList` {: #difffunctions-ordereddiffkeylist }

### Declaración {: #declaration }
void OrderedDiffKeyList(string k1, bool isAscending1[, string k2, bool isAscending2,... string kN, bool isAscendingN])
### Sintaxis {: #syntax }
OrderedDiffKeyList(, [, , ,... , ])
#### Parámetros requeridos {: #required-parameters }

-   `k1, k2,... kN`: Nombres de cadenas de las claves de columna que se utilizarán para identificar de manera única un registro en una fuente
-   `isAscending1, isAscending2,... isAscendingN`: Valores booleanos para cada columna que indican si cada columna está ordenada de forma ascendente (`true`) o descendente (`false`)



-   El número de argumentos proporcionados debe ser dos o más y debe ser un número par.

### Descripción {: #description }

Establece la lista de claves utilizadas para identificar de manera única un registro en la fuente y especifica el orden de los registros de la clave como ascendente (`true`) o descendente (`false`).

Utilice este método (en lugar de la función `DiffKeyList`) en casos donde se garantice que los registros de la fuente estén en un orden específico.

El procesamiento de diferencias es más eficiente si los campos de la fuente están ordenados de la misma manera cada vez. En esos casos, no se utilizará un tamaño de fragmento y el uso de memoria no será un problema. Este método se llama típicamente junto con la función `InitializeDiff`.

!!! warning "Advertencia"
    Las funciones de diferencia solo se pueden utilizar en un solo agente privado, ya que las instantáneas de diferencia no se comparten. No las utilice en un grupo de agentes con más de un agente. No son compatibles con agentes en la nube.

<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Volver al inicio]](#top)

</div>


## `ResetDiff` {: #difffunctions-resetdiff }

### Declaración {: #declaration }
void ResetDiff(string diffId, int action)
### Sintaxis {: #syntax }
ResetDiff(, )
#### Parámetros requeridos {: #required-parameters }

-   `diffId`: Una cadena que identifica de manera única la operación de diferencia de otras operaciones de diferencia que se están ejecutando en el sistema
-   `action`: Un entero (ya sea `0` o `1`) que especifica cómo se debe restablecer la sesión de diferencia

### Descripción {: #description }

Restablece una sesión de diferencia existente.

El parámetro `action` (ya sea `0` o `1`) especifica cómo se debe restablecer la sesión de diferencia:

-   **`0` (Restablecer):** Olvida completamente la última instantánea y comienza de nuevo desde el principio. Esto forzará al sistema a tratar todas las entradas como "agregadas."
-   **`1` (Purgar):** Elimina cualquier archivo que haya quedado de una sesión de diferencia anterior. Esto no restablece la última instantánea; solo elimina archivos obsoletos dejados de sesiones de diferencia antiguas, fallidas o canceladas.

Este método se llama típicamente cuando se ha cambiado algo en un proceso de diferencia existente o si un proceso de diferencia ha fallado y dejado un estado inconsistente. No debe llamarse durante el procesamiento normal de diferencias. Si no hay una sesión de diferencia presente para este `diff_id`, no se realiza ninguna acción.

!!! warning "Advertencia"
    Las funciones de diferencia solo se pueden usar en un único agente privado, ya que las instantáneas de diferencia no se comparten. No las use en un grupo de agentes con más de un agente. No son compatibles con agentes en la nube.

### Ejemplos {: #examples }
// Purgar cualquier archivo que haya quedado de una sesión de diferencia anterior, // pero mantener la última instantánea ResetDiff("Sincronización de Base de Datos de Pedidos", 1);
<div markdown="1" class="conf-macro output-inline" align="center" hasbody="false" macro-name="backtotop">

[[Volver al inicio]](#top)

</div>


## `SetDiffChunkSize` {: #difffunctions-setdiffchunksize }

### Declaración {: #declaration }
void SetDiffChunkSize(int chunkSize)
### Sintaxis {: #syntax }
SetDiffChunkSize()
#### Parámetros requeridos {: #required-parameters }

-   `chunkSize`: Tamaño en bytes para los fragmentos utilizados durante la diferencia

### Descripción {: #description }

Establece el tamaño del fragmento (en bytes) utilizado durante la diferencia.

Un tamaño de fragmento más grande hará que el sistema use más memoria, pero procesará la diferencia más rápido. El valor predeterminado es 50000 bytes; si tiene suficiente memoria, puede aumentar este número.

Este método se llama típicamente junto con la función `InitializeDiff`.

!!! warning "Advertencia"
    Las funciones de diferencia solo se pueden usar en un único agente privado, ya que las instantáneas de diferencia no se comparten. No las use en un grupo de agentes con más de un agente. No son compatibles con agentes en la nube.

### Ejemplos {: #examples }
// Con suficiente memoria disponible, aumenta el tamaño del fragmento: SetDiffChunkSize(100000); ```