Ł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.
Przykład:
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 rekordy.
Przykład:
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.
Przykład:
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.
Przykład:
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