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.
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:
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.
Antes de la carga de Merge, la tabla resultante aparece de la siguiente manera:
Name | Number |
---|---|
Jake | 3 |
Jill | 2 |
Steven | 3 |
Después de la carga de Merge, la tabla aparece de la siguiente manera:
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:
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.