Chargement incrémentiel d'enregistrements nouveaux et mis à jour

Si votre application contient une grande quantité de données provenant de sources de base de données mises à jour en permanence, le chargement de l'ensemble de données complet peut se révéler extrêmement fastidieux. Dans ce cas, il est préférable de ne charger que les enregistrements modifiés ou les nouveaux enregistrements à partir de la base de données, toutes les autres données devant déjà être disponibles dans l'application. Le chargement incrémentiel, à l'aide de fichiers QVD, permet de procéder de la sorte.

La procédure de base est décrite ci-après :

  1. Chargez les données nouvelles ou mises à jour à partir de la table source de base de données.

    Il s'agit d'un processus lent, mais seul un nombre limité d'enregistrements est chargé.

  2. Chargez les données déjà disponibles dans l'application à partir du fichier QVD.

    De nombreux enregistrements sont chargés, mais ce processus est bien plus rapide.

  3. Créez un nouveau fichier QVD.

    Il s'agit du fichier que vous utiliserez pour le prochain chargement incrémentiel.

  4. Répétez la procédure pour chaque table chargée.

Les exemples suivants présentent des cas d'utilisation du chargement incrémentiel. Cependant, une solution plus complexe peut s'avérer nécessaire, selon la structure de la base de données source et le mode de fonctionnement choisi.

  • Ajout seul (généralement utilisé pour les fichiers journaux)
  • Insertion seule (sans mise à jour ni suppression)
  • Insertion et mise à jour (sans suppression)
  • Insertion, mise à jour et suppression

Vous pouvez lire les fichiers QVD en mode « optimisé » ou « standard ». (La méthode employée est automatiquement sélectionnée par le moteur Qlik Sense selon la complexité de l'opération.) Le mode optimisé est environ 10 fois plus rapide que le mode standard, ou environ 100 fois plus rapide que le chargement de la base de données effectué de façon classique.

Pour plus d'informations, voir Utilisation de fichiers QVD.

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 (les bases de données ODBC, OLE DB ou d'un autre type ne sont pas prises en charge).

  • Qlik Sense assure le suivi du nombre d'enregistrements qui ont déjà été lus et charge uniquement les enregistrements ajoutés à la fin du fichier.

Example:  

(Windows)

Buffer (Incremental) Load * From LogFile.txt (ansi, txt, delimiter is '\t', embedded labels);

Example:  

(Kubernetes)

Buffer (Incremental) Load * From [lib://MyDataFiles/LogFile.txt] (ansi, txt, delimiter is '\t', embedded labels);

Insertion seule (sans mise à jour ni suppression)

Si les données résident dans une autre base de données qu'un simple fichier 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.

  • Qlik Sense charge les enregistrements insérés dans la base de données après la dernière exécution du script.

  • Un champ ModificationTime (ou un champ similaire) est requis pour que Qlik Sense reconnaisse les nouveaux enregistrements.

Example:  

(Windows)

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#

AND ModificationTime < #$(BeginningThisExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM File.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.

Example:  

(Kubernetes)

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#

AND ModificationTime < #$(BeginningThisExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM [lib://MyDataFiles/File.QVD];

STORE QV_Table INTO [lib://MyDataFiles/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.

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.

  • Qlik Sense 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 ModificationTime (ou un champ similaire) est requis pour que Qlik Sense reconnaisse les nouveaux enregistrements.

  • Qlik Sense doit utiliser un champ clé principal pour trier les enregistrements mis à jour à partir du fichier QVD.

  • Cette solution force 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.

Example:  

(Windows)

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);

WHERE NOT Exists(PrimaryKey);

 

STORE QV_Table INTO File.QVD;

Example:  

(Kubernetes)

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#;

 

WHERE NOT Exists(PrimaryKey);

Concatenate LOAD PrimaryKey, X, Y FROM [lib://MyDataFiles/File.QVD];

WHERE NOT Exists(PrimaryKey);

 

STORE QV_Table INTO [lib://MyDataFiles/File.QVD];

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.

  • Qlik Sense charge les enregistrements insérés ou mis à jour dans la base de données après la dernière exécution du script.

  • Qlik Sense retire les enregistrements supprimés de la base de données après la dernière exécution du script.

  • Un champ ModificationTime (ou un champ similaire) est requis pour que Qlik Sense reconnaisse les nouveaux enregistrements.

  • Qlik Sense doit utiliser un champ clé principal pour trier les enregistrements mis à jour à partir du fichier QVD.

  • Cette solution force 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.

Example:  

(Windows)

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

Example:  

(Kubernetes)

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 [lib://MyDataFiles/File.QVD]

WHERE NOT EXISTS(PrimaryKey);

 

Inner Join SQL SELECT PrimaryKey FROM DB_TABLE;

 

If ScriptErrorCount = 0 then

STORE QV_Table INTO [lib://MyDataFiles/File.QVD];

Let LastExecTime = ThisExecTime;

End If