Ładowanie nowych i zaktualizowanych rekordów za pomocą funkcji ładowania przyrostowego
Jeśli aplikacja zawiera dużą ilość danych z baz danych, które są na bieżąco aktualizowane, przeładowanie całego zestawu danych może być czasochłonne. W tym przypadku należy załadować nowe lub zmienione rekordy z bazy danych. Pozostałe dane powinny już być dostępne w aplikacji. Operację taką umożliwia funkcja ładowania przyrostowego za pomocą plików QVD.
Ogólny proces wygląda następująco:
-
Załaduj nowe lub zaktualizowane dane z tabeli źródłowej bazy danych.
Jest to proces powolny, ale ładowana jest tylko ograniczona liczba rekordów.
-
Załaduj dane już dostępne w aplikacji z pliku QVD.
Załadowanych zostanie wiele rekordów, ale jest to proces znacznie szybszy.
-
Utwórz nowy plik QVD.
Plik ten będzie służyć na potrzeby następnego ładowania przyrostowego.
- Powtórz procedurę dla każdej ładowanej tabeli.
W poniższym przykładzie przedstawiono przypadki stosowania funkcji ładowania przyrostowego. Potrzebne może się jednak okazać bardziej kompleksowe rozwiązanie zależne od struktury źródłowej bazy danych i trybu operacji.
- Tylko dołączanie (zazwyczaj stosowane dla plików dziennika)
- Tylko wstawianie (bez aktualizowania ani usuwania)
- Wstawianie i aktualizowanie (bez usuwania)
- Wstawianie, aktualizowanie i usuwanie
Pliki QVD można odczytywać w trybie zoptymalizowanym i trybie standardowym. (Silnik Qlik Sense automatycznie dokonuje wyboru metody w zależności od złożoności operacji). Tryb zoptymalizowany jest ok. 10 razy szybszy od trybu standardowego, czyli ok. 100 razy szybszy od zwykłego ładowania danych z bazy danych.
Więcej informacji zawiera temat Praca z plikami QVD.
Tylko dołączanie
Najprostszy przypadek dotyczy obsługi plików dziennika, do których wiersze są jedynie dołączane, bez usuwania. Obowiązują następujące warunki:
-
Bazą danych musi być plik dziennika (lub inny plik, do którego wiersze są jedynie dołączane, bez wstawiania ani usuwania) w postaci pliku tekstowego (ODBC, OLE DB lub inne bazy danych nie są obsługiwane).
-
Program Qlik Sense śledzi liczbę wcześniej odczytanych wierszy i ładuje tylko wiersze dodane na końcu pliku.
Example:
Buffer (Incremental) Load * From LogFile.txt (ansi, txt, delimiter is '\t', embedded labels);
Tylko wstawianie (bez aktualizowania ani usuwania)
Jeśli dane są przechowywane w bazie danych innego rodzaju niż prosty plik dziennika, metoda polegająca tylko na dołączaniu nie będzie działać. Mimo to można taką sytuację rozwiązać przy minimalnym nakładzie dodatkowej pracy. Obowiązują następujące warunki:
-
Źródło danych może być dowolną bazą danych.
-
Program Qlik Sense ładuje wiersze wstawione do bazy danych od czasu ostatniego wykonania skryptu.
-
Pole ModificationTime (lub podobne) jest wymagane, aby program Qlik Sense rozpoznał nowe wiersze.
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;
Znaki krzyżyka w klauzuli SQL WHERE wyznaczają początek i koniec daty. Informacje o prawidłowej składni zapisu daty w używanej bazie danych można znaleźć w dokumentacji bazy.
Wstawianie i aktualizowanie (bez usuwania)
Ten przypadek ma zastosowanie, jeśli dane z wcześniej załadowanych wierszy mogły ulec zmianie od czasu wykonania skryptu. Obowiązują następujące warunki:
-
Źródło danych może być dowolną bazą danych.
-
Program Qlik Sense ładuje wiersze wstawione do bazy danych lub zaktualizowane w bazie danych od czasu ostatniego wykonania skryptu.
-
Pole ModificationTime (lub podobne) jest wymagane, aby program Qlik Sense rozpoznał nowe wiersze.
-
Wymagane jest pole klucza głównego, aby program Qlik Sense mógł zidentyfikować zaktualizowane rekordy w pliku QVD.
-
Zastosowane rozwiązanie wymaga odczytu pliku QVD w trybie standardowym (a nie zoptymalizowanym), co jednak i tak będzie znacznie szybsze od ładowania całej bazy danych.
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;
Wstawianie, aktualizowanie i usuwanie
Najtrudniejszym do obsłużenia przypadkiem jest sytuacja, w której wiersze są usuwane z bazy danych między kolejnymi wykonaniami skryptu. Obowiązują następujące warunki:
-
Źródło danych może być dowolną bazą danych.
-
Program Qlik Sense ładuje wiersze wstawione do bazy danych lub zaktualizowane w bazie danych od czasu ostatniego wykonania skryptu.
-
Program Qlik Sense usuwa wiersze usunięte z bazy danych od czasu ostatniego wykonania skryptu.
-
Pole ModificationTime (lub podobne) jest wymagane, aby program Qlik Sense rozpoznał nowe wiersze.
-
Wymagane jest pole klucza głównego, aby program Qlik Sense mógł zidentyfikować zaktualizowane rekordy w pliku QVD.
-
Zastosowane rozwiązanie wymaga odczytu pliku QVD w trybie standardowym (a nie zoptymalizowanym), co jednak i tak będzie znacznie szybsze od ładowania całej bazy danych.
Example:
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