Использование файлов QVD для инкрементальной загрузки

Инкрементальная загрузка является распространенной задачей в отношении баз данных. Она определяется тем, что загружает из базы данных только новые или измененные записи. Все прочие данные так или иначе должны уже быть доступны. С помощью QVD-файлов QlikView (Qlik Sense) в большинстве случаев можно выполнить инкрементальную загрузку.

Основной процесс приведен ниже:

1. Загрузите новые данные из таблицы базы данных (процесс происходит медленно, но загружается ограниченное число записей).

2. Загрузите старые данные из файла QVD (загружается много записей, но процесс происходит значительно быстрее).

3. Создайте новый файл QVD.

4. Повторите процедуру для каждой загружаемой таблицы.

527

Трудоемкость действительного решения зависит от природы базы данных источника, в то же время можно указать следующие базовые случаи инкрементальной загрузки:

1) Случай 1: Только добавить (как правило, файлы протокола)

2) Случай 2: Только вставить (без обновления или удаления)

3) Случай 3: Вставить и обновить (без удаления)

4) Случай 4: Вставить, обновить и удалить

Ниже для каждого из этих решений находятся перечисленные решения. Чтение файлов QVD может происходить в «оптимизированном режиме» или «стандартном режиме». (Используемый метод выбирается обработчиком скриптов QlikView автоматически в зависимости от сложности действия). «Оптимизированный режим» быстрее «стандартного режима» приблизительно в 10 раз и в 100 раз быстрее загрузки базы данных обычным способом.

СЛУЧАЙ 1: ТОЛЬКО ДОБАВИТЬ

Простейшим случаем являются файлы журнала, в которых записи лишь добавляются, но никогда не удаляются. Применяются следующие условия:

  • База данных должна являться файлом протокола (или другим файлом, в который записи добавляются, но не вставляются и не удаляются), который содержится в текстовом файле (без ODBC/OLE DB).
  • QlikView (Qlik Sense) следит за числом записей, которые были прочитаны ранее, и загружает только те записи, которые были добавлены в конце файла.
528

Пример:

Buffer (Incremental) Load * From LogFile.txt (ansi, txt, delimiter is '\t', embedded labels); 

СЛУЧАЙ 2: ТОЛЬКО ВСТАВИТЬ (БЕЗ ОБНОВЛЕНИЯ ИЛИ УДАЛЕНИЯ)

Если данные находятся в базе данных, не являющейся простым файлом протокола, случай 1 не будет работать. Однако, проблему можно решить с минимальными дополнительными усилиями. Применяются следующие условия:

  • Источником данных может быть любая база данных.
  • QlikView (Qlik Sense) загружает записи, вставленные в базу данных после выполнения последнего скрипта.
  • Поле ModificationDate (или похожее) требуется для распознавания новых записей программой QlikView (Qlik Sense).
529

Пример:

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;  

(Символы случайных значений в утверждении SQL WHERE определяют начало и конец даты. Правильный синтаксис даты в базе данных см. в руководстве по базе данных).

СЛУЧАЙ 3: ВСТАВИТЬ И ОБНОВИТЬ (БЕЗ УДАЛЕНИЯ)

Следующий случай применяется, если данные в ранее загруженных записях в процессе выполнения скрипта могли измениться. Применяются следующие условия:

  • Источником данных может быть любая база данных.
  • QlikView загружает записи, вставленные в базу данных или обновленные в базе данных после выполнения последнего скрипта
  • Поле ModificationDate (или похожее) требуется для распознавания новых записей программой QlikView (Qlik Sense).
  • Поле первичного ключа требуется для сортировки обновленных записей из файла QVD программой QlikView (Qlik Sense).
  • Это решение переведет чтение файла QVD в «стандартный режим» (а не в «оптимизированный режим»), что все равно значительно быстрее загрузки всей базы данных.
530

Пример:

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;  

СЛУЧАЙ 4: ВСТАВИТЬ, ОБНОВИТЬ И УДАЛИТЬ

В самом сложном случае записи действительно удаляются из базы данных в процессе выполнения скрипта. Применяются следующие условия:

  • Источником данных может быть любая база данных.
  • QlikView загружает записи, вставленные в базу данных или обновленные в базе данных после выполнения последнего скрипта.
  • QlikView удаляет записи, удаленные из базы данных после выполнения последнего скрипта.
  • Поле ModificationDate (или похожее) требуется для распознавания новых записей программой QlikView.
  • Поле первичного ключа требуется для сортировки обновленных записей из файла QVD программой QlikView.
  • Это решение переведет чтение файла QVD в «стандартный режим» (а не в «оптимизированный режим»), что все равно значительно быстрее загрузки всей базы данных.
531

Пример:

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
Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

63 queries in 0,460 seconds