Utilisation de fichiers QVD pour le chargement incrémentiel
Le chargement incrémentiel est une tâche couramment utilisée avec les bases de données. Il consiste à ne charger de la base de données que les nouveaux enregistrements ou ceux qui ont été modifiés. Toutes les autres données doivent déjà être disponibles, d'une manière ou d'une autre. Les Fichiers QVD permettent d'exécuter un chargement incrémentiel dans la plupart des cas.
La procédure de base est décrite ci-après :
1. Chargez les nouvelles données de la table de base de données (un processus lent, mais qui charge un nombre limité d'enregistrements).
2. Chargez les anciennes données du fichier QVD (charge un grand nombre d'enregistrements, mais bien plus rapidement).
3. Créez un nouveau fichier QVD.
4. Répétez la procédure pour chaque table chargée.
La complexité de la solution utilisée dépend de la nature de la base de données source, mais on peut identifier les principaux cas ci-dessous :
1) Cas 1 : Ajout seul (typiquement des fichiers journaux).
2) Cas 2 : Insertion seule (sans mise à jour ou suppression)
3) Cas 3 : Insertion et mise à jour (sans suppression)
4) Cas 4 : Insertion, mise à jour et suppression
Vous trouverez ci-dessous les solutions pour chacun de ces cas. La lecture des fichiers QVD peut être effectuée soit en mode « optimisé », soit en « mode standard ». (La méthode employée est automatiquement sélectionnée par le moteur de script de QlikView selon la complexité de l'opération.) Le mode optimisé est (très approximativement) 10 fois plus rapide que le mode standard ou environ 100 fois plus rapide que le chargement de la base de données de façon ordinaire.
Cas 1 : Ajout seul
Le cas le plus simple est celui des fichiers journaux, dans lesquels les enregistrements sont uniquement ajoutés et jamais supprimés. Les conditions suivantes s'appliquent :
-
La base de données doit être un fichier journal (ou un autre fichier dans lequel les enregistrements sont ajoutés mais pas insérés ni supprimés) contenu dans un fichier texte (aucun ODBC/OLEDB).
-
QlikView garde trace du nombre d'enregistrements qui ont déjà été lus et charge uniquement les enregistrements ajoutés à la fin du fichier.
Buffer (Incremental) Load * From LogFile.txt (ansi, txt, delimiter is '\t', embedded labels);
Cas 2 : Insertion seule (sans mise à jour ou suppression)
Si les données se trouvent dans une base de données autre qu'un simple journal, l'approche décrite précédemment ne fonctionnera pas. Cependant, le problème peut encore être résolu avec un minimum de travail supplémentaire. Les conditions suivantes s'appliquent :
-
La source de données peut correspondre à n'importe quelle base de données.
-
QlikView charge les enregistrements insérés dans la base de données après la dernière exécution du script.
-
Un champ ModificationDate (ou un champ similaire) est requis pour que QlikView reconnaisse les nouveaux enregistrements.
QV_Table :
SQL SELECT PrimaryKey, X, Y FROM DB_TABLE
WHERE ModificationTime >= #$(LastExecTime)#
AND ModificationTime < #$(BeginningThisExecTime)#;
Concatenate LOAD PrimaryKey, X, Y FROM File.QVD (qvd);
STORE QV_Table INTO File.QVD;
(Les symboles dièse de la clause SQL WHERE définissent le début et la fin d'une date. Reportez-vous au manuel de votre base de données pour connaître la syntaxe correcte des dates de votre base de données.)
Cas 3 : Insertion et mise à jour (sans suppression)
Le cas suivant s'applique lorsque des données peuvent avoir été modifiées entre des exécutions du script dans les enregistrements déjà chargés. Les conditions suivantes s'appliquent :
-
La source de données peut correspondre à n'importe quelle base de données.
-
QlikView charge les enregistrements insérés ou mis à jour dans la base de données après la dernière exécution du script.
-
Un champ ModificationDate (ou un champ similaire) est requis pour que QlikView reconnaisse les nouveaux enregistrements.
-
Un champ de clé primaire est requis pour que QlikView extraie les enregistrements mis à jour du fichier QVD.
-
Cette solution forcera la lecture du fichier QVD en mode « standard » (plutôt qu'en mode « optimisé »), qui reste beaucoup plus rapide que le chargement de la base de données entière.
QV_Table :
SQL SELECT PrimaryKey, X, Y FROM DB_TABLE
WHERE ModificationTime >= #$(LastExecTime)#;
Concatenate LOAD PrimaryKey, X, Y FROM File.QVD
WHERE NOT Exists(PrimaryKey);
STORE QV_Table INTO File.QVD;
Cas 4 : Insertion, mise à jour et suppression
Le cas le plus difficile à traiter est celui d'enregistrements supprimés de la base de données source entre des exécutions du script. Les conditions suivantes s'appliquent :
-
La source de données peut correspondre à n'importe quelle base de données.
-
QlikView charge les enregistrements insérés ou mis à jour dans la base de données après la dernière exécution du script.
-
QlikView retire les enregistrements supprimés de la base de données après la dernière exécution du script.
-
Un champ ModificationDate (ou un champ similaire) est requis pour que QlikView reconnaisse les nouveaux enregistrements.
-
Un champ de clé primaire est requis pour que QlikView extraie les enregistrements mis à jour du fichier QVD.
-
Cette solution forcera la lecture du fichier QVD en mode « standard » (plutôt qu'en mode « optimisé »), qui reste beaucoup plus rapide que le chargement de la base de données entière.
Let ThisExecTime = Now( );
QV_Table :
SQL SELECT PrimaryKey, X, Y FROM DB_TABLE
WHERE ModificationTime >= #$(LastExecTime)#
AND ModificationTime < #$(ThisExecTime)#;
Concatenate LOAD PrimaryKey, X, Y FROM File.QVD
WHERE NOT EXISTS(PrimaryKey);
Inner Join SQL SELECT PrimaryKey FROM DB_TABLE;
If ScriptErrorCount = 0 then
STORE QV_Table INTO File.QVD;
Let LastExecTime = ThisExecTime;
End If