Accéder au contenu principal

Merge

Le préfixe Merge peut être ajouté à n'importe quelle instruction LOAD ou SELECT du script pour spécifier que la table chargée doit être fusionnée dans une autre table. Cela spécifie également que cette instruction doit être exécutée lors d'un chargement partiel.

Un cas d'utilisation type se produit, par exemple, lorsque vous chargez un journal des modifications et que vous souhaitez l'utiliser pour appliquer inserts, updates et deletes à une table existante.

Effectuez un chargement partiel via le bouton Charger. Pour plus d'informations, voir Bouton. Vous pouvez également utiliser Qlik Engine JSON API.

Pour effectuer un chargement partiel dans le cadre d'une planification, cliquez sur More dans l'application et sélectionnez Planifier le chargement. Dans la boîte de dialogue qui s'ouvre, activez Chargement partiel.

Syntax:  

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

 

Lors d'un chargement normal (non partiel), la construction Merge LOAD fonctionne comme une instruction Load normale, mais avec la fonctionnalité supplémentaire consistant à supprimer les enregistrements plus anciens obsolètes et les enregistrements indiqués comme devant être supprimés. Le premier champ de l'instruction Load doit contenir des informations sur l'opération : Insert, Update ou Delete.

Pour chaque enregistrement chargé, l'identificateur d'enregistrements est comparé aux enregistrements précédemment chargés et seul le dernier enregistrement (en fonction du numéro de séquence) est conservé. Si le dernier enregistrement est marqué à l'aide de Delete, aucun n'est conservé.

Si le préfixe Concatenate est utilisé ou s'il existe déjà une table avec le même ensemble de champs, cette table sera celle à modifier. Sinon, le résultat de la construction Merge LOAD sera stocké dans une nouvelle table.

Si le préfixe Concatenate est utilisé, la table obtenue peut contenir davantage de champs que le journal des modifications utilisé comme entrée de l'instruction Merge.

Un chargement partiel aura le même résultat qu'un chargement complet. La seule différence réside dans le fait que la construction Merge LOAD ne créera jamais de table. Il existe toujours une table correspondante provenant de la précédente exécution de script à modifier.

Si le journal des modifications chargé est un journal accumulé, à savoir, s'il contient des modifications déjà chargées, il est possible d'utiliser le paramètre SequenceNoVar dans une clause Where pour limiter le nombre de données d'entrée. La construction Merge LOAD peut alors s'appliquer uniquement aux enregistrements à charger dont le champ SequenceNoField est supérieur à SequenceNoVar. Une fois terminée, la construction Merge LOAD assignera une nouvelle valeur à SequenceNoVar avec la valeur maximale trouvée dans le champ SequenceNoField.

Arguments:  

Arguments
Argument Description
only Qualificateur facultatif indiquant que l'instruction doit être exécutée uniquement lors des chargements partiels. Lors des chargements normaux (non partiels), elle doit être ignorée.
SequenceNoField Nom du champ contenant un horodatage ou un numéro de séquence définissant l'ordre des opérations.
SequenceNoVar

Nom de la variable à laquelle est assignée la valeur maximale de SequenceNoField de la table en cours de fusion.

ListOfKeys Liste séparée par des virgules de noms de champ spécifiant la clé primaire.
operation Le premier champ de l'instruction Load doit contenir l'opération : Insert, Update ou Delete. Les opérations ‘i’, ‘u’ et ‘d’ sont également acceptées.

Example: Script de chargement de données

Dans cet exemple, une table en ligne nommée Persons est chargée avec quatre lignes. Merge change ensuite la table comme suit :

  • Ajoute la ligne Mary, 4
  • Supprime la ligne Steven, 3
  • Assigne le numéro 5 à Jake

La variable LastChangeDate sera définie sur la valeur maximale de la colonne ChangeDate après l'exécution de la commande 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 ];

Avant l'application de la construction Merge load, la table obtenue apparaît comme suit :

Resulting table
Name Number
Jake 3
Jill 2
Steven 3

Après l'application de la construction Merge load, la table apparaît comme suit :

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

Lors du chargement des données, la boîte de dialogue Progression du chargement de données indique les opérations effectuées :

Boîte de dialogue Progression du chargement de données

Data load progress dialog box.

Example: Script de chargement de données - Chargement partiel

Dans l'exemple suivant, l'argument Only spécifie que la commande Merge sera uniquement exécutée lors d'un chargement partiel. Les mises à jour seront filtrées en fonction de la valeur de la variable LastChangeDate précédemment capturée. Après l'application de la commande Merge, la variable LastChangeDate se verra assigner la valeur maximale de la colonne ChangeDate traitée lors de la fusion.

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