Saltar al contenido principal Saltar al contenido complementario

Merge

El prefijo Merge se puede añadir a cualquier sentencia LOAD o SELECT en el script para especificar que la tabla cargada debe fusionarse en otra tabla. También especifica que esta sentencia debe ejecutarse en una carga parcial.

El caso de uso típico es cuando carga un registro de cambios y desea usarlo para aplicar inserts, updates, y deletes a una tabla existente.

Nota informativaPara que la carga parcial funcione correctamente, la app debe abrirse con datos antes de que se active una carga parcial.

Realice una carga parcial con el botón Cargar. Para más información, vea Botón. También puede usar Qlik Engine JSON API.

Sintaxis:  

Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)

 

Durante una recarga normal (no parcial), la construcción Merge LOAD funcionará como una sentencia Load normal pero con la funcionalidad adicional de eliminar registros obsoletos más antiguos y registros marcados para su eliminación. El primer campo de la sentencia de carga debe contener información sobre la operación: Insert, Update o Delete.

Para cada registro cargado, el identificador de registro se comparará con los registros cargados previamente y solo se mantendrá el último registro (según el número de secuencia). Si el último registro está marcado con Delete, no se conservará ninguno.

Si se usa el prefijo Concatenate o si ya existe una tabla con el mismo conjunto de campos, esta será la tabla relevante que hay que modificar. De lo contrario, el resultado de la construcción Merge LOAD se almacenará en una nueva tabla.

Si se usa el prefijo Concatenate, la tabla resultante puede tener más campos que el registro de cambios que se utiliza como entrada a Merge.

Una carga parcial hará lo mismo que una carga completa. La única diferencia es que la construcción Merge LOAD nunca creará una nueva tabla. Siempre existe una tabla relevante de la ejecución de script anterior que modificar.

El registro de cambios cargado es un registro acumulado, es decir, contiene cambios que ya se han cargado, el parámetro SequenceNoVar se puede utilizar en una cláusula Where para limitar la cantidad de datos de entrada. Se podría hacer luego que el Merge LOAD cargue solo registros en los que el campo SequenceNoField sea mayor que SequenceNoVar. Al finalizar, Merge LOAD asignará un nuevo valor al SequenceNoVar con el valor máximo que se ve en el campo SequenceNoField.

Argumentos:  

Argumentos
Argumento Descripción
only Un cualificador opcional que indica que la sentencia solo debe ejecutarse durante las cargas parciales. Y debe ser ignorada durante las recargas normales (no parciales).
SequenceNoField El nombre del campo que contiene una fecha-hora o un número de secuencia que define el orden de las operaciones.
SequenceNoVar

El nombre de la variable a la que se le asigna el valor máximo de SequenceNoField de la tabla que se fusiona.

ListOfKeys Una lista de nombres de campo separados por comas que especifican la clave principal.
operation El primer campo de la sentencia de carga debe contener la operación: Insert, Update o Delete. ‘i’, ‘u’ y ‘d’ también se aceptan.

Ejemplo: Script de carga de datos

En este ejemplo, una tabla inline denominada Persons se carga con cuatro filas. Merge luego cambia la tabla de la siguiente manera:

  • Añade la fila Mary, 4
  • Elimina la fila Steven, 3
  • Asigna el número 5 a Jake

La variable LastChangeDate se establecerá en el valor máximo en la columna ChangeDate después de que se ejecute Merge.

Persons: load * inline [ Name, Number Jake, 3 Jill, 2 Steven, 3 ]; Merge (ChangeDate, LastChangeDate) on Name Concatenate(Persons) LOAD * inline [ Operation, ChangeDate, Name, Number Insert, 1/1/2021, Mary, 4 Delete, 1/1/2021, Steven, Update, 2/1/2021, Jake, 5 ];

Antes de la carga de Merge, la tabla resultante aparece de la siguiente manera:

Resulting table
Name Number
Jake 3
Jill 2
Steven 3

Después de la carga de Merge, la tabla aparece de la siguiente manera:

Resulting table
ChangeDate Name Number
2/1/2021 Jake 5
- Jill 2
1/1/2021 Mary 4

Cuando se cargan los datos, el cuadro de diálogo Progreso de la carga de datos muestra las operaciones que se realizan:

El cuadro de diálogo de progreso de carga de datos

Data load progress dialog box.

Ejemplo: Script de carga de datos: carga parcial

En el siguiente ejemplo, el argumento Only especifica que el comando Merge solo se ejecutará durante una carga parcial. Las actualizaciones se filtrarán en función del LastChangeDate capturado previamente. Una vez que Merge ha finalizado, a la variable LastChangeDate se le asignará el valor máximo de la columna ChangeDate procesada durante la fusión.

Merge Only (ChangeDate, LastChangeDate) on Name Concatenate(Persons) LOAD Operation, ChangeDate, Name, Number from [lib://ChangeFilesFolder/BulkChangesInPersonsTable.csv] (txt) where ChangeDate >= $(LastChangeDate);

¿Esta página le ha sido útil?

No dude en indicarnos en qué podemos mejorar si encuentra algún problema en esta página o su contenido, como, por ejemplo, errores tipográficos, pasos que falta o errores técnicos.