Saltar al contenido principal

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.

Para realizar una carga parcial programada, haga clic en Más en una app y después seleccione Programar recarga. En el cuadro de diálogo que se abre, active Carga parcial.

Sintaxis:  

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

Argumentos:  

Argumentos
Argumento Descripción
only Un cualificador opcional que indica que la sentencia solo debe ejecutarse durante las cargas parciales. La sentencia se ignora durante las cargas 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 siguiente operación como una cadena de texto: "Insert", "Update" o "Delete". También se aceptan: "i", "u" y "d".

Funcionalidad general

Durante una carga normal (no parcial), la construcción Merge LOAD funciona 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 Load debe contener información sobre la operación: Insert, Update o Delete.

Para cada registro cargado, el identificador de registro se compara 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.

Tabla destino

La tabla que se ha de modificar viene determinada por el conjunto de campos. Si ya existe una tabla con el mismo conjunto de campos (excepto el primer campo; la operación), esta será la tabla relevante para modificar. Alternativamente, se puede usar un prefijo Concatenate para especificar la tabla. Si no se determina la tabla de destino, el resultado de la construcción Merge LOAD se almacena en una nueva tabla.

Si se usa el prefijo Concatenate, la tabla resultante tiene un conjunto de campos correspondientes a la unión de la tabla existente y la entrada a la fusión. Por lo tanto, la tabla de destino puede obtener más campos que el registro de cambios que se usa como entrada para la fusión.

Una carga parcial hace lo mismo que una carga completa. Con la diferencia de que una carga parcial rara vez crea una nueva tabla. A menos que haya utilizado la cláusula Only, siempre existe una tabla de destino con el mismo conjunto de campos de la ejecución del script anterior.

Número de secuencia

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 asigna un nuevo valor al SequenceNoVar con el valor máximo que se ve en el campo SequenceNoField.

Operaciones

La instrucción Merge LOAD puede tener menos campos que la tabla de destino. Las diferentes operaciones tratan los campos faltantes de manera diferente:

Insert: Los campos que faltan en Merge LOAD, pero que existen en la tabla de destino, obtienen un NULL en la tabla de destino.

Delete: Los campos que faltan no afectan al resultado. Los registros relevantes se eliminan de todos modos.

Update: Los campos enumerados en Merge LOAD se actualizan en la tabla de destino. Los campos que faltan no se modifican. Esto significa que las dos instrucciones siguientes no son idénticas:

  • Merge on Key Concatenate Load 'U' as Operation, Key, F1, Null() as F2 From ...;
  • Merge on Key Concatenate Load 'U' as Operation, Key, F1 From ...;

La primera instrucción actualiza los registros enumerados y cambia F2 a NULL. La segunda no cambia F2, sino que deja los valores en la tabla de destino.