Ł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 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 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 [lib://DataFiles/File.QVD];
STORE QV_Table INTO [lib://DataFiles/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 [lib://DataFiles/File.QVD]
WHERE NOT Exists(PrimaryKey);
STORE QV_Table INTO [lib://DataFiles/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 [lib://DataFiles/File.QVD]
WHERE NOT EXISTS(PrimaryKey);
Inner Join SQL SELECT PrimaryKey FROM DB_TABLE;
If ScriptErrorCount = 0 then
STORE QV_Table INTO [lib://DataFiles/File.QVD];
Let LastExecTime = ThisExecTime;
End If