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.
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.
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. |
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.
Avant l'application de la construction Merge load, la table obtenue apparaît comme suit :
Name | Number |
---|---|
Jake | 3 |
Jill | 2 |
Steven | 3 |
Après l'application de la construction Merge load, la table apparaît comme suit :
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 :
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.