В этой статье я расскажу о не стандартном, по крайней мере, для нашей компании методе обновления данных.

У нас в компании экспресс-загрузка оказалась полезной в таких случаях:

  1. Загрузка всех нужных данных (уже оптимизированных) делает приложение очень тяжелым (к примеру, продажи по всем магазинам и товарам за последние хотя бы два года). Крутить миллиард строк в приложении вариант, но не самый удобный.
  2. Некоторые алгоритмы очень долгие. Например, у нас есть алгоритм, который по всем товарам (или магазинам и т.д.) отрабатывает 4-5 часов. И, если пользователь обновил данные по одному товару (магазину и т.д.), то для использования возможностей QlikView, приходится ждать следующего дня. День ожидания – неудобно.
  3. Очень удобно тестировать большие и не очень доработки.

Для описанных выше случаев мы используем одинаковую схему, которую мы назвали «Экспресс загрузка».

Экспресс-загрузка данных: Схема метода

Шаг 0.

QlikView Data Load

 

Шаг 1.

Шаг 2.

Шаг 3.

Пользователь предоставляет нам те данные, которые ему нужны (web, другой интерфейс).

 

Интерфейс преобразует эти данные так, чтобы мы получили их в удобном виде.

 

Запуск приложения (цепочки приложений) QlikView с переданными параметрами.

 

Рассылка сообщений об удачном/неудачном запуске.

 

Теперь распишу подробнее эти пункты.

Шаг 1. Предоставление данных пользователем и их обработка

Чтобы любой пользователь передавал нам параметры, по которым ему нужно представить данные, нужен удобный интерфейс. Мы делаем этот интерфейс либо на web, либо используя уже имеющиеся программные продукты в компании (так пользователям проще).

Как результат для QlikView готовятся данные в формате txt или csv. Также можно сделать таблицу в какой-либо базе данных, которую будет периодически считывать Qlik.

НА ЗАМЕТКУ! В основном мы используем текстовые файлы с разделителями. Сам файл называется логином того пользователя, который сделал запрос, содержимое файла содержит нужные нам колонки.

QlikView Data Load

Шаг 2. Запуск QlikView с переданными параметрами

Для того чтобы оперативно отследить запрос пользователя мы используем PowerShell.

  1. Для начала нужно проверить наличие файлов с запросами от пользователей.

Если файлы есть, то средствами того же PowerShell мы запускаем нужное приложение или цепочку приложений. Если же файлов нет, т.е. нет запросов от пользователей, то на этом этапе работа скрипта завершается.

  1. Копируем файлы с запросами пользователей к себе на диск (файлы могут быть на другом сервере).

Создаём список файлов. Обязательно указать ‘*’ в конце пути.

Копируем все файлы на сервер QlikView

  1. Далее запускаем нужные приложения в соответствующем порядке. Для этого используем функцию ReloadApp (подробно во вложении)

В приложении обязательно включаем лог файл, если во время перезапуска будет ошибка, то соответствующий отчёт придёт сотруднику QlikView. Если же ошибок не будет, то запустится следующее по порядку приложение.

Если для алгоритма есть полная ежедневная перезагрузка, то функция работает следующим образом: делается копия перезапускаемого приложения (к имени добавляется постфикс _express), и именно эта копия перезапускается, соответственно, QlikView генерит отдельный лог файл для этого процесса, который при необходимости можно будет анализировать и лог от ночного обновления не будет перезаписан.

Далее копии экстракторов удаляются, а копия основного приложения остаётся. И пользователь в итоге имеет два приложения: ежедневное со всеми данными и приложение только с запрашиваемыми данными (с постфиксом _express).

  1. Предварительно в самих приложениях необходимо сделать корректировки, добавить код, который будет работать, только если приложение имеет постфикс _express

Чтобы добавить такой код, используем функцию DocumentName()

QlikView Data Load

Какой код нужно добавить?

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

Например, так выгружается список товаров, по которым будет запускаться приложение.

QlikView Data Load

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

QlikView Data Load

Имея логины, при необходимости, можно добавить и другие персональные данные. Поле group генерится, если рассылку делать с помощью NPrinting.

c. Чтобы алгоритм отрабатывал только по нужным товарам, в необходимых местах добавляем условие:

Так как переменная vExpress  равна 1 только, когда имя приложения имеет постфикс _express, никаких сбоев при стандартной ночной или утренней перезагрузке уже не будет.

d. Если какая-то часть кода выполняется слишком долго, то при возможности лучше воспользоваться данными ночной выгрузкой, особенно, если эти данные в течение дня не меняются.

e. Все qvd-файлы, полученные при работе экстрактора с постфиксом _express, сохраняются в отдельную папку при добавлении в путь выгрузки переменной.

Переменная vAddPath принимает значение ‘\_Express также, когда приложение с постфиксом, соответственно минимизируется возможность некорректного сохранения файла во время ежедневного обновления данных.

При необходимости (в зависимости от алгоритма) можно инкрементально добавить данные из прошлых экспресс-загрузок, чтобы приложение аккумулировало информацию по всем запросам за день. В начале следующего дня данные можно обнулять.

f. Переменные, в примерах выше (vExpress и vAddPath) необходимо обнулить или присвоить им пустое значение в начале скрипта.

g. Для удобства сделать лог, чтобы понимать, кто с какими запросами обычно обращается к этому приложению и обращается ли вообще.QlikView Data Load

Я постарался описать основные изменения. Ситуация упрощается, если весь алгоритм работает только по запросу, и у нас есть только одно приложение.

Шаг 3.  Рассылка об успешной/ не очень успешной загрузке

Если во время работы алгоритма ошибок не было, то пользователю нужно сообщить об успешном обновлении данных. Если же произошла какая-либо ошибка, об этом должен узнать и сотрудник QlikView. Работа скрипта, конечно же, останавливается.

Рассылку можно осуществить двумя способами:

  • первый, напрямую из PowerShell (функция во вложении),
  • второй средством NPrinting, используя механизм запросов (об этом можно рассказать отдельно).

После отправки писем тестовые файлы нужно удалить.

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

QlikView Data Load

Вместо заключения

Метод «Экспресс загрузки» напрашивался давно. Для нас это оказалось очень удобным. Соответственно стандартного механизма нет. Чтобы добавить возможность экспресс загрузки, для каждого алгоритма, нужен индивидуальный подход. Я же постарался описать идею в целом. На данный момент по подобной схеме в компании работает три алгоритма. Для примера: чтобы большей частью адаптировать к этой схеме цепочку из 5 экстракторов и итогового приложения, потребовалось около 3-х дней. В итоге, алгоритм, который при полной перезагрузке (по всем SKU) отрабатывает дольше, чем за 5 часов, в экспресс режиме отрабатывает за 5-10 минут для нескольких товаров.

Надеюсь, информация будет полезной и предложенная идея «Экспресс загрузки» будет использована в вашей профессиональной деятельности.