Laden von neuen und aktualisierten Datensätzen mit inkrementellem Laden

Wenn Ihre App große Datenmengen aus Datenbankquellen enthält, die kontinuierlich aktualisiert werden, dann kann das erneute Laden des gesamten Datensatzes zeitaufwändig sein. Beim inkrementellen Laden werden nur neue oder geänderte Datensätze aus der Datenbank geladen. Alle übrigen Daten sollten bereits in der App verfügbar sein. Dies erreichen Sie durch das inkrementelle Laden mit QVD-Dateien.

Der Prozess läuft folgendermaßen ab:

  1. Laden Sie neue oder aktualisierte Daten aus der Datenbankquelltabelle.

    Dieser Prozess dauert lange, es wird jedoch nur eine begrenzte Zahl von Datensätzen geladen.

  2. Laden Sie bereits in der App vorhandene Daten aus der QVD-Datei.

    Es werden viele Datensätze geladen, der Prozess geht jedoch viel schneller.

  3. Erstellen Sie eine neue QVD-Datei.

    Das ist die Datei, die Sie beim nächsten inkrementellen Laden verwenden werden.

  4. Diese Schritte werden für alle Tabellen wiederholt.

Die folgenden Beispiele zeigen Fälle, in denen inkrementelles Laden verwendet wird. Wenn es die Struktur der Quelldatenbank und die Vorgehensweise erfordern, können jedoch komplexere Lösungen erforderlich sein.

  • Nur angehängte Datensätze (typischerweise für Protokolldateien verwendet)
  • Nur eingefügte Datensätze (keine Aktualisierung oder Löschung)
  • Neu eingefügte und geänderte Datensätze (keine Löschung)
  • Neu eingefügte, geänderte und gelöschte Datensätze

Sie können QVD-Dateien im optimierten Modus oder im Standardmodus einlesen. (Je nach Komplexität der Operation ergibt sich die ausgewählte Methode automatisch aus der Qlik Sense-Engine.) Der optimierte Modus ist ungefähr 10-mal schneller als der Standardmodus oder etwa 100-mal schneller als der herkömmliche Ladevorgang der Datenbank.

Weitere Informationen finden Sie unter Arbeiten mit QVD-Dateien.

Nur angehängte Datensätze

Das einfachste Beispiel für einen solchen Fall ist eine Protokolldatei, bei der neue Datensätze einfach hinten angehängt und niemals gelöscht werden. Folgende Bedingungen müssen erfüllt sein:

  • Die Datenbank muss eine Protokolldatei sein (oder eine andere Datei, in der Datensätze angehängt und nicht eingefügt oder gelöscht werden). Die Protokolldatei muss sich in einer Textdatei befinden (ODBC-, OLE DB- und andere Datenbanken werden nicht unterstützt).

  • Qlik Sense speichert die Anzahl der bereits vorher geladenen Datensätze und liest nur die neuen Datensätze am Ende der Datei ein.

Example:  

(Inkrementelle) Pufferlast * aus LogFile.txt (ansi, txt, Trennzeichen ist '\t', eingebettete Beschriftungen);

Nur eingefügte Datensätze (keine Aktualisierung oder Löschung)

Werden die Daten in der Datenquelle anders als in einer einfach Log-Datei angehängt, reicht der Ansatz "Nur angehängte Datensätze" nicht aus. Das Problem kann dennoch mit ein klein wenig mehr Aufwand gelöst werden. Folgende Bedingungen müssen erfüllt sein:

  • Die Datenquelle kann eine beliebige sein.

  • Qlik Sense liest nur die Datensätze ein, die nach der letzten Ausführung des Skripts neu angelegt wurden.

  • Ein Feld ModificationTime (oder ähnlich) wird benötigt, anhand dessen Qlik Sense erkennt, welche Datensätze neu sind.

Example:  

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;

Die Hash-Zeichen in der SQL WHERE-Bedingung definieren den Anfang und das Ende eines Datums. Im Datenbank-Handbuch finden Sie die korrekte Datums-Syntax für Ihre Datenbank.

Neu eingefügte und geänderte Datensätze (keine Löschung)

In diesem Fall wurden bestehende Datensätze seit der letzten Ausführung des Skripts geändert. Folgende Bedingungen müssen erfüllt sein:

  • Die Datenquelle kann eine beliebige sein.

  • Qlik Sense lädt nur die Datensätze, die nach der letzten Ausführung des Skripts neu angelegt oder geändert wurden.

  • Ein Feld ModificationTime (oder ähnlich) wird benötigt, anhand dessen Qlik Sense erkennt, welche Datensätze neu sind.

  • Ein Primärschlüsselfeld wird benötigt, anhand dessen Qlik Sense aktualisierte Datensätze in der QVD-Datei aussortiert.

  • Diese Lösung bewirkt einen Wechsel zum Lese-Standardmodus für die QVD-Datei (statt des optimierten Modus), was bedeutend schneller ist als das Laden der gesamten Datenbank.

Example:  

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;

Neu eingefügte, geänderte und gelöschte Datensätze

Dies ist der komplizierteste Fall, denn hier wurden seit der letzten Ausführung des Skripts zusätzlich Datensätze gelöscht. Folgende Bedingungen müssen erfüllt sein:

  • Die Datenquelle kann eine beliebige sein.

  • Qlik Sense lädt nur die Datensätze, die nach der letzten Ausführung des Skripts neu angelegt oder geändert wurden.

  • Qlik Sense entfernt Datensätze, die nach der letzten Ausführung des Skripts aus der Datenbank gelöscht wurden.

  • Ein Feld ModificationTime (oder ähnlich) wird benötigt, anhand dessen Qlik Sense erkennt, welche Datensätze neu sind.

  • Ein Primärschlüsselfeld wird benötigt, anhand dessen Qlik Sense aktualisierte Datensätze in der QVD-Datei aussortiert.

  • Diese Lösung bewirkt einen Wechsel zum Lese-Standardmodus für die QVD-Datei (statt des optimierten Modus), was bedeutend schneller ist als das Laden der gesamten Datenbank.

Example:  

Let ThisExecTime = Now( );

 

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#

AND ModificationTime < #$(BeginningThisExecTime)#;

 

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