Загрузка новых и обновленных записей с помощью инкрементальной загрузки
Если приложение содержит большое количество данных из постоянно обновляющихся исходных баз данных, перезагрузка набора данных полностью может занять много времени. В этом случае из базы данных загружаются только новые или измененные записи. Все остальные данные должны быть уже доступны в приложении. Для этого можно использовать инкрементальную загрузку с помощью файлов QVD.
Основной процесс приведен ниже:
-
Загрузите новые или обновленные данные из исходной таблицы базы данных.
Это медленный процесс, но загружается только определенное число записей.
-
Загрузите уже доступные данные приложения из файла QVD.
Загружается много записей, но это намного более быстрый процесс.
-
Создайте новый файл QVD.
Данный файл можно использовать для последующих инкрементальных загрузок.
- Повторите процедуру для каждой загружаемой таблицы.
Ниже приведены примеры случаев использования инкрементальной загрузки. Однако в зависимости от структуры исходной базы данных и режима работы может потребоваться более сложное решение.
- Только добавить (обычно используется для файлов журнала)
- Только вставить (без обновления или удаления)
- Вставить и обновить (без удаления)
- Вставить, обновить и удалить
Вы можете прочитать файлы QVD как в оптимизированном, так и в стандартном режиме. (Используемый метод выбирается подсистемой Qlik Sense автоматически в зависимости от сложности действия.) Оптимизированный режим приблизительно в 10 раз быстрее стандартного режима и в 100 раз быстрее загрузки базы данных обычным способом.
Для получения дополнительной информации см. Работа с файлами QVD.
Только добавить
Простейшим случаем являются файлы журнала, в которых записи лишь добавляются, но никогда не удаляются. Применяются следующие условия:
-
База данных должна являться файлом журнала (или другим файлом, в который записи добавляются, но не вставляются и не удаляются), который содержится в текстовом файле (ODBC, OLE DB или другие базы данных не поддерживаются).
-
Qlik Sense следит за числом записей, которые были прочитаны ранее, и загружает только те записи, которые были добавлены в конце файла.
Example:
Buffer (Incremental) Load * From LogFile.txt (ansi, txt, delimiter is '\t', embedded labels);
Только вставить (без обновления или удаления)
Если данные находятся в базе данных, не являющейся простым файлом журнала, случай с добавлением не будет работать. Однако проблему можно решить с минимальными дополнительными усилиями. Применяются следующие условия:
-
Источником данных может быть любая база данных.
-
Qlik Sense загружает записи, вставленные в базу данных после выполнения последнего скрипта.
-
Поле ModificationTime (или похожее) требуется для распознавания новых записей программой Qlik Sense.
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;
Символы случайных значений в предложении SQL WHERE определяют начало и конец даты. Правильный синтаксис даты в базе данных см. в руководстве по базе данных.
Вставить и обновить (без удаления)
Следующий случай применяется, если данные в ранее загруженных записях в процессе выполнения скрипта могли измениться. Применяются следующие условия:
-
Источником данных может быть любая база данных.
-
Qlik Sense загружает записи, вставленные в базу данных или обновленные в базе данных после выполнения последнего скрипта.
-
Поле ModificationTime (или похожее) требуется для распознавания новых записей программой Qlik Sense.
-
Поле первичного ключа требуется для сортировки программой Qlik Sense обновленных записей из файла QVD.
-
Это решение переведет чтение файла QVD в стандартный режим (а не в оптимизированный режим), что все равно значительно быстрее загрузки всей базы данных.
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;
Вставить, обновить и удалить
В самом сложном случае записи действительно удаляются из базы данных в процессе выполнения скрипта. Применяются следующие условия:
-
Источником данных может быть любая база данных.
-
Qlik Sense загружает записи, вставленные в базу данных или обновленные в базе данных после выполнения последнего скрипта.
-
Qlik Sense удаляет записи, удаленные из базы данных после выполнения последнего скрипта.
-
Поле ModificationTime (или похожее) требуется для распознавания новых записей программой Qlik Sense.
-
Поле первичного ключа требуется для сортировки программой Qlik Sense обновленных записей из файла QVD.
-
Это решение переведет чтение файла QVD в стандартный режим (а не в оптимизированный режим), что все равно значительно быстрее загрузки всей базы данных.
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