Korzystanie z plików QVD do ładowania przyrostowego
Ładowanie przyrostowe jest powszechnie wykonywaną operacją na bazach danych. Polega ono na ładowaniu z bazy danych wyłącznie nowych lub zmienionych wierszy. Wszystkie pozostałe dane powinny już być dostępne w takiej czy innej postaci. Pliki QVD umożliwiają w większości przypadków wykonanie ładowania przyrostowego.
Ogólny proces wygląda następująco:
1. Załaduj nowe dane z tabeli bazy danych (proces powolny, aby obejmujący niewielką liczbę wierszy).
2. Załaduj stare dane z pliku QVD (proces obejmujący wiele wierszy, ale znacznie szybszy).
3. Utwórz nowy plik QVD.
4. Powtórz procedurę dla każdej ładowanej tabeli.
Złożoność faktycznego rozwiązania tego typu zależy od charakteru źródłowej bazy danych, ale można wyróżnić następujące przypadki ogólne:
1) Przypadek 1: Tylko dołączanie (zazwyczaj pliki dziennika)
2) Przypadek 2: Tylko wstawianie (bez aktualizowania ani usuwania)
3) Przypadek 3: Wstawianie i aktualizowanie (bez usuwania)
4) Przypadek 4: Wstawianie, aktualizowanie i usuwanie
Poniżej opisano rozwiązania dla poszczególnych przypadków. Odczyt plików QVD może się odbywać w trybie zoptymalizowanym lub standardowym. (Silnik obsługi skryptów QlikView automatycznie dokonuje wyboru metody w zależności od złożoności operacji). Tryb zoptymalizowany jest w przybliżeniu 10 razy szybszy od trybu standardowego, czyli około 100 razy szybszy od zwykłego ładowania danych z bazy danych.
Przypadek 1: 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 (nie może to być źródło ODBC/OLE DB).
-
Aplikacja QlikView śledzi liczbę wcześniej odczytanych wierszy i ładuje jedynie wiersze dodane na końcu pliku.
Przykład:
Buffer (Incremental) Load * From LogFile.txt (ansi, txt, delimiter is '\t', embedded labels);
Przypadek 2: Tylko wstawianie (bez aktualizowania ani usuwania)
Jeśli dane są przechowywane w bazie danych innego rodzaju niż prosty plik dziennika, metoda opisana dla przypadku 1 nie zadziała. Mimo to można taką sytuację obsłużyć przy minimum dodatkowej pracy. Obowiązują następujące warunki:
-
Źródło danych może być dowolną bazą danych.
-
Aplikacja QlikView ładuje wiersze wstawione do bazy danych od czasu ostatniego wykonania skryptu.
-
Pole ModificationDate (lub podobne) jest wymagane, ponieważ umożliwia programowi QlikView rozpoznawanie wierszy, które są nowe.
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 (qvd);
STORE QV_Table INTO File.QVD;
Znaki kratki 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.
Przypadek 3: 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.
-
Aplikacja QlikView ładuje wiersze wstawione do bazy danych lub zaktualizowane w bazie danych od czasu ostatniego wykonania skryptu.
-
Pole ModificationDate (lub podobne) jest wymagane, ponieważ umożliwia programowi QlikView rozpoznawanie wierszy, które są nowe.
-
Wymagane jest pole klucza głównego, aby umożliwić aplikacji QlikView identyfikację zaktualizowanych rekordów 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;
Przypadek 4: 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.
-
Aplikacja QlikView ładuje wiersze wstawione do bazy danych lub zaktualizowane w bazie danych od czasu ostatniego wykonania skryptu.
-
Aplikacja QlikView usuwa wiersze usunięte z bazy danych od czasu ostatniego wykonania skryptu.
-
Pole ModificationDate (lub podobne) jest wymagane, ponieważ umożliwia programowi QlikView rozpoznawanie wierszy, które są nowe.
-
Wymagane jest pole klucza głównego, aby umożliwić aplikacji QlikView identyfikację zaktualizowanych rekordów 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