· Par Équipe HeyData
Série : Fonctions et mots-clés méconnus de Qlik Sense : une série · article 9 sur 13
Merge, Add, Replace : le rechargement partiel dans Qlik Sense
Un rechargement complet efface toutes les tables et rejoue tout le script. Pour ajouter les commandes du jour, ou appliquer quelques modifications venues d’un journal, c’est beaucoup de travail pour peu de lignes. Le rechargement partiel garde les tables en mémoire et n’exécute que certaines instructions, marquées par trois préfixes : Add, Replace et Merge.
Cet article fait partie de notre série sur les fonctions et mots-clés méconnus de Qlik Sense. Il s’appuie sur l’aide Qlik ; les liens sont en fin d’article.
Ce qui s’exécute, et quand
En rechargement partiel, Qlik Sense conserve toutes les tables existantes et n’exécute que les LOAD et SELECT précédés de Add, Replace ou Merge. Les autres sont ignorés. Le qualificatif Only fait l’inverse : une instruction Add Only, Replace Only ou Merge Only ne s’exécute que lors d’un rechargement partiel.
Only réserve une instruction au rechargement partiel.
Les instructions de contrôle (SET, LET, IF, FOR…) s’exécutent dans les deux cas. Un rechargement partiel exige que l’application contienne déjà des données.
Add : ajouter des lignes
Add LOAD ajoute des lignes à une table existante : celle qui a les mêmes champs, ou celle désignée par Concatenate. En rechargement complet, il se comporte comme un LOAD ordinaire. En partiel, il ne crée jamais de table : la table cible doit exister.
Add ne vérifie pas les doublons. Un second rechargement partiel ajoute de nouveau les mêmes lignes, sauf si vous les écartez :
Add LOAD ID, Name, Score
FROM [lib://Data/NewPersons.csv] (txt, utf8, embedded labels, delimiter is ',')
WHERE NOT Exists(ID);
Replace : remplacer une table
Replace LOAD supprime la table existante puis la recharge. En partiel, la suppression est systématique. En rechargement complet, elle n’a lieu que si une table de mêmes champs existe déjà, ou si Concatenate en désigne une. C’est l’outil pour rafraîchir une petite table de référence, des taux de change par exemple, sans toucher aux faits.
Merge : appliquer un journal de modifications
Merge est le plus riche des trois. Il applique à une table existante une liste d’opérations : le premier champ du LOAD contient l’opération, Insert, Update ou Delete (ou i, u, d).
Insert ajoute, Update remplace, Delete retire.
Merge (ChangeDate, vLastChange) ON ID
LOAD Operation, ID, Name, Score, ChangeDate
FROM [lib://Data/ChangeLog.csv] (txt, utf8, embedded labels, delimiter is ',')
WHERE ChangeDate > '$(vLastChange)';
ON IDdonne la clé primaire, éventuellement composée de plusieurs champs.(ChangeDate, vLastChange)est facultatif.ChangeDateordonne les opérations : pour une même clé, seule la plus récente compte. Après le chargement, la variablevLastChangereçoit la plus grande valeur deChangeDate. C’est le point de départ du rechargement suivant, d’où la clauseWHERE.Updatene modifie que les champs présents dans leLOAD: les autres gardent leur valeur.- La table cible est celle qui a les mêmes champs, hors champ d’opération, ou celle désignée par
Concatenate.
Merge fonctionne aussi en rechargement complet : il charge alors la table en ne gardant, pour chaque clé, que la dernière opération, et sans les lignes supprimées.
Déclencher un rechargement partiel
L’aide Qlik documente plusieurs moyens :
- un bouton sur une feuille, avec l’action Recharger les données et l’option Rechargement partiel ;
- dans Qlik Cloud, une planification de rechargement avec l’option Rechargement partiel activée ;
- sur Qlik Sense Enterprise on Windows, une tâche de rechargement de la QMC, avec l’option Rechargement partiel de ses propriétés d’exécution ;
- l’API du moteur (Qlik Engine JSON API).
Les pièges
- Les tables absentes. Un
LEFT JOINou unCONCATENATEvers une table qui n’existe qu’en rechargement complet fait échouer le partiel. Protégez-les avecIsPartialReload(), comme ci-dessous. - Les valeurs fantômes. Les valeurs supprimées par un rechargement partiel restent dans la liste interne des valeurs du champ jusqu’au prochain rechargement complet.
FieldValueCount()etFieldValue()peuvent donc en compter plus qu’il n’en existe. - Les doublons d’Add. Sans
WHERE NOT Exists()niDISTINCT, chaque rechargement partiel ajoute de nouveau les mêmes lignes. - Pas de persistance. Le rechargement partiel travaille en mémoire. Pour un historique qui survit à un rechargement complet, le chargement incrémental avec des QVD reste la méthode de référence. Les deux se complètent.
Le garde-fou pour les tables absentes :
IF NOT IsPartialReload() THEN
LEFT JOIN (Orders) LOAD OrderID, Region RESIDENT Regions;
END IF
À retenir
- Partiel = tables gardées. Seuls les LOAD préfixés par Add, Replace ou Merge s’exécutent.
- Only pour le partiel seul. Une instruction
… Onlyest ignorée en rechargement complet. - Add n’écarte pas les doublons. Ajoutez
WHERE NOT Exists(). - Replace remplace toute la table. Utile pour une petite table de référence.
- Merge applique Insert, Update, Delete. Avec une clé
ON, et une variable de séquence pour repartir du dernier changement. - Protégez les jointures.
IF NOT IsPartialReload()autour des instructions qui visent une table absente en partiel.
Essayer dans Qlik Sense
Ce script reprend les exemples de l’article avec les données des schémas, chargées en INLINE : il ne dépend d’aucun fichier ni d’aucune base. Collez-le dans l’éditeur de chargement de données d’une application vide, choisissez l’exemple avec la variable vExemple, puis rechargez.
// Merge, Add, Replace dans Qlik Sense : script d'essai (HeyData)
// Collez-le dans l'éditeur de chargement de données d'une application vide, choisissez
// l'exemple, rechargez, puis affichez les tables dans la visionneuse du modèle de données.
SET vExemple = 1; // 1 à 4
Persons:
LOAD ID, Name, Score, Date(Date#(ChangeDate, 'YYYY-MM-DD')) as ChangeDate
INLINE [
ID, Name, Score, ChangeDate
1, Anna, 10, 2026-01-02
2, Ben, 20, 2026-01-02
3, Chloé, 30, 2026-01-02
];
IF $(vExemple) = 1 THEN
// Exemple 1 : Merge applique un journal (deuxième schéma), ici en rechargement complet
Merge (ChangeDate, vLastChange) ON ID
LOAD Operation, ID, Name, Score, Date(Date#(ChangeDate, 'YYYY-MM-DD')) as ChangeDate
INLINE [
Operation, ID, Name, Score, ChangeDate
Insert, 4, Dan, 40, 2026-01-05
Update, 2, Ben, 25, 2026-01-05
Delete, 3, , , 2026-01-05
];
// Persons : 1 Anna 10, 2 Ben 25, 4 Dan 40 ; la variable vLastChange vaut le 2026-01-05.
END IF
IF $(vExemple) = 2 THEN
// Exemple 2 : Add sans doublon
Add LOAD ID, Name, Score, Date(Date#(ChangeDate, 'YYYY-MM-DD')) as ChangeDate
INLINE [
ID, Name, Score, ChangeDate
3, Chloé, 30, 2026-01-02
5, Eva, 50, 2026-01-06
]
WHERE NOT Exists(ID);
// Persons : 1, 2, 3 et 5 ; la ligne 3, déjà présente, n'est pas ajoutée une seconde fois.
END IF
IF $(vExemple) = 3 THEN
// Exemple 3 : Replace remplace toute la table de mêmes champs
Replace LOAD ID, Name, Score, Date(Date#(ChangeDate, 'YYYY-MM-DD')) as ChangeDate
INLINE [
ID, Name, Score, ChangeDate
9, Zoé, 90, 2026-01-07
];
// Persons ne contient plus que Zoé.
END IF
IF $(vExemple) = 4 THEN
// Exemple 4 : observer un rechargement partiel
// Ajoutez sur une feuille un bouton « Recharger les données » avec « Rechargement partiel »,
// et une table ReloadType, ReloadTime. Chaque clic ajoute une ligne « Partiel ».
ReloadLog:
LOAD 'Complet' as ReloadType, Timestamp(Now()) as ReloadTime AUTOGENERATE 1;
Add Only LOAD 'Partiel' as ReloadType, Timestamp(Now()) as ReloadTime AUTOGENERATE 1;
// Un rechargement complet remet la table à une seule ligne « Complet ».
END IF
Sources
- Aide Qlik Cloud : Rechargement partiel, déclenchement, limites et
IsPartialReload(). - Aide Qlik Cloud : Merge, Add et Replace.
- Aide Qlik Sense Enterprise on Windows, en anglais : modification d’une tâche de rechargement, option de rechargement partiel d’une tâche de la QMC.
Le texte et les exemples sont de HeyData. Cet article fait partie de notre série sur les fonctions et mots-clés méconnus de Qlik Sense : découvrir la série.