Инкрементальная загрузка в Qlik Sense
Часто приходится иметь дело с данными, представляющими из себя таблицы в миллионы строк. Более того, в эти таблицы могут добавляться тысячи или миллионы строк ежедневно или ежемесячно. При этом, для анализа выявления тенденций и аномалий бывает необходимым использовать и исторические данные. Для тех, кто использует для анализа и визуализации Qlik Sense, загрузка больших объемов занимает много времени.
Такой была задача построить на Qlik Sense аналитический отчет по продажам сотрудников, позволяющий ежемесячно отслеживать изменения клиентских потребностей. В месяц в мотивацию сотрудников входит порядка 15 млн операций. За 10 минут в Qlik Sense загружается около 8 млн строк.
Учитывая, что необходимо сравнивать данные помесячно, загрузка данных даже за 6 месяцев может длиться часами.
Спасла инкрементальная загрузка. Из источников загружались только новые или измененные записи, а не все имеющиеся.
Инкрементальная загрузка - это механизм в Qlik Sense, с помощью которого из внешнего источника загружаются только обновленные данные, а основная масса неизменившихся данных загружается из внутреннего хранилища. Реализован механизм посредством файлов QVD.
QVD (Qlik View Data) – это формат файла, в котором содержится таблица данных, экспортируемая из программ Qlik View или Qlik Sense, и который может быть прочитан только этими программами. Этот формат оптимизирован для скорости при чтении данных из скрипта Qlik Sense, при этом не занимает много места и чтение данных из него в 10-100 раз быстрее, чем из других источников данных.
Инкрементальная загрузка имеет несколько вариантов:
· только добавление;
· добавление и обновление;
· добавление, обновление и удаление.
Рассмотрим самый простой вариант- добавление данных.
Наша задача - загрузить в Qlik Sense для анализа таблицу из ~80 млн строк и в дальнейшем ежемесячно пополнять её на ~15 млн строк.
Прежде чем начинать использовать метод инкрементальной загрузки, нужно в первый раз загрузить все данные из исходной таблицы. Загруженные данные необходимо сохранить в QVD.
Первичная загрузка данных в QVD
1. Запустите Qlik Sense и создайте новое приложение.
2. Откройте редактор скрипта загрузки данных.
3. Создайте раздел Загрузка таблицы первоначальная.
4. Столкнулась с тем, что при загрузке первоначальных данных с удаленного ресурса (в моем случае - из таблицы в БД MS SQL), возникает ошибка. Поэтому рекомендую выгрузить в таблицу в excel TOP 1000 строк из загружаемой таблицы и воспользоваться ею для создания первоначального QVD файла.
5. Загрузите все данные из файла Operation.xlsx
6. Добавьте строку сохранения данных в QVD файл. Cкрипт для загрузки на листе Загрузка таблицы первоначальная будет выглядеть так:
7. Загрузите данные.
8. Закомментируйте скрипт раздела Загрузка таблицы первоначальная.
9. Создайте раздел Проверка QVD
10. Создайте скрипт загрузки данных из QVD
11. Запустите скрипт. Убедитесь, что данные из QVD загружаются в оптимизированном режиме. Просмотрите модель данных, проверьте, что данные загружены.
12. Создайте новый раздел - Добавление данных в таблицу.
13. Для объединения новых загруженных данных с содержимым QVD-файла соединяем их со старыми данными, а затем снова сохраняем их в QVD. Новые данные можем брать уже из необходимого нам источника.
14. Сохраните изменения и запустите перезагрузку скрипта.
15. Новые данные загружаются в обычном режиме, а старые данные из QVD загружаются в оптимизированном режиме.
16. Просмотрите модель данных. Убедитесь, что данные в таблицу добавлены.
Таким образом, я по частям загрузила 6 месяцев данных об операциях. На сегодня в таблицу загружено более 81 млн строк.
Планирую в дальнейшем ежемесячно пополнять данные в приложении Qlik Sense на 13-15 млн строк, не ожидая загрузки данных часами и не рискуя при этом создать огромную нагрузку на сервер.
Здравствуйте!Вы пропустили описание LIB CONNECT TO 'SERVER' и FROM "BD_DM".shema1."table_motivation"where date_month='2021.07.31';Могли бы добавить и их описание в Вашу инструкциюЗаранее благодарю
Добрый день! Благодарю за проявленный интерес и поясняю значение операторов.
Оператор LIB CONNECT TO использует для подключения к базе данных сохраненное подключение, созданное в редакторе загрузки данных. В связи разграничением прав доступа, не всегда у пользователя может быть возможность создать новое подключение.
В данном примере загружается таблица “table_motivation” из подключения ‘SERVER’ в личное пространство пользователя.
Предложенная последовательность действий:
1. Выберем из списка подключений источник, на котором хранится интересующая нас таблица (‘SERVER’), и подключимся к нему
LIB CONNECT TO ‘SERVER’; (указанную команду можно получит также, нажав на ярлык “Вставить строку подключения” )
2. Так как таблица хранится на MS SQL сервере, то получаем информацию из нее стандартным SQL- запросом - конструкцией select-from-where.
SELECT ***(перечень полей)*** FROM “Имя БД”.схема.”Имя Таблицы” WHERE ***условие выборки***
Здравствуйте, спасибо за статью!
А если для инкремента используются агрегированные данные, как лучше выстроить конкатенацию данных, чтобы в qvd-файл не попадали дубли?
Здравствуйте, немного позже вернусь с ответом )