На qRUG Camp 2017 был доклад о примерах использования Direct Discovery. Там мы напрямую обращались к внешней базе данных через запрос Direct Query и получали детализацию по агрегированным данным, а также выполняли сложные аналитические запросы во внешней базе данных для реализации Market Basket Analysis. Все эти эксперименты мы проделывали с Exasol, самой быстрой аналитической базой данных в мире, по данным теста TPC-H. Сегодня расскажу, как использовать Direct Query, чтобы QlikView и Qlik Sense работали с базой Exasol напрямую, не загружая данные в свою оперативную память.
Direct Discovery: матчасть
Основная функция Direct Discovery – возможность выполнения из QlikView или Qlik Sense запроса к внешней базе данных.
Что дает Direct Discovery:
- объем данных, используемых в запросе Direct Discovery, не ограничен размером используемой QlikView/Qlik Sense оперативной памяти
- cохраняется возможность ассоциативного анализа
- можно использовать в диаграммах измерения и меры, данные которых не загружены в модель данных QlikView/Qlik Sense
Когда Direct Discovery может пригодиться:
- Организация системы on-line мониторинга с постоянным обновлением информации по заданным ключевым показателям в QlikView/Qlik Sense
- Наличие большого объема данных для анализа и отсутствие технической возможности или архитектурного желания загрузить его в модель данных QlikView/Qlik Sense
- Ограниченный размер оперативной памяти для Qlik
- Реализация drill-down – когда нужна справочная или более детальная информация, которая не очень нужна в основных аналитических данных
- Реализация продвинутых аналитических функций, которые сложно или трудоемко реализовать в QlikView/Qlik Sense. Например, MBA (Market Basket Analysis) – анализ сочетаемости групп продуктов.
QlikView Help о Direct Discovery: https://help.qlik.com/en-US/qlikview/12.1/Subsystems/Client/Content/DirectDiscovery/direct-discovery-introduction.htm
Exasol: матчасть
На сегодняшний день, Exasol – самая быстрая в мире аналитическая база данных, по данным независимого исследования производительности СУБД TPC-H:
- Максимальное кол-во запросов в час при объеме данных 1 Тб: 5’246’338
- В 7 раз больше, чем у ближайшего конкурента (по данным 2017 года)
Основные преимущества Exasol:
- высокая скорость выполнения запросов,
- использование поколоночного хранения данных (columnar DB),
- высокая маштабируемость базы данных Exasol благодаря добавлению в кластер новых узлов,
- автоматическое распределение данных таблиц между узлами кластера,
- использование технологий MPP (Massively parallel processing) –многопоточной параллельной обработки данных,
- минимальная трудоемкость настроек для обеспечения высокой производительности за счет автоматической оптимизации выполняемых запросов и автоматического формирования индексов на основе статистики выполнения запросов,
- наличие бесплатной версии Exasol, позволяющей выполнять аналитические запросы на загруженных в оперативную память данных объемом до 200 ГБ, что эквивалентно 2 Терабайтам данных на жестком диске.
Из действительно впечатляющего: тестировали Exasol на «живых» данных крупной розницы. Вот один из примеров:
Объем данных: 6 млрд строк
Запрос:
- Выделить Топ-10 лучших магазинов,
- В них – Топ-100 самых продаваемых товаров
- Показать все магазины, где эти товары не продаются
Время выполнения запроса: 01 мин 04 сек
Это реально крутое время для такого многослойного запроса на 6 млрд. строк.
Бесплатная версия Exasol – Exasol Community Edition (1 Тб сырых данных, 1 узел, полная функциональность, поддержка в сообществе пользователей): https://www.exasol.com/en/download/
QlikView + Exasol: схема интеграции через Direct Query по шагам
Собственно, теперь рассмотрим схему реализации прямого обращения к внешней базе данных Exasol через запрос Direct Query по шагам.
Предварительные требования:
- Установлена версия QlikView: 12.10 SR7
- Установлена исходная внешняя база данных Exasol: бесплатная версия БД Exasol (6.0.0), работающая на 1-м узле.
В моем случае Exasol установлен на 1-м узле под управлением ОС CentOS,в виртуальной машине на Hyper-v.
- Установлен 64-битный Exasol ODBC-драйвер
- DNS конфигурируется при помощи инструмента Windows Data Source Administrator
Процесс по шагам:
- Добавляем источник данных
Открываем QlikView -> «File» -> «Edit script». Оказываемся в редакторе загрузки и добавляем новый источник данных ODBC:
- Пишем скрипт загрузки:
Используем Direct Query, чтобы QlikView обращался к данным в Exasol, а не загружал их к себе в оперативную память.
Вот такой скрипт у меня получился для примера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
ODBC CONNECT TO RETAIL_DEMO; DIRECT QUERY DIMENSION DESCRIPTION as PRODUCT_DESCRIPTION, PRODUCT_GROUP_DESC, SALES_DATE, Year_Name, Quarter_Name, Month_Name, Week_Name, Year, Quarter, Month, Week, AREA, CITY, NATIVE(' ''['' || longitude || '','' || latitude || '']'' ') as GeoCoord MEASURE PRICE_OVERALL DETAIL SALES_TIMESTAMP FROM EXA_DB.RETAIL_STAR.FACT_SALES_POSITIONS JOIN EXA_DB.RETAIL_STAR.ARTICLE ON ( EXA_DB.RETAIL_STAR.FACT_SALES_POSITIONS.ARTICLE_ID = EXA_DB.RETAIL_STAR.ARTICLE.ARTICLE_ID ) JOIN EXA_DB.RETAIL_STAR.MARKETS ON ( EXA_DB.RETAIL_STAR.FACT_SALES_POSITIONS.MARKET_ID = EXA_DB.RETAIL_STAR.MARKETS.MARKET_ID ) JOIN EXA_DB.RETAIL_STAR.Time_1 ON ( EXA_DB.RETAIL_STAR.FACT_SALES_POSITIONS.SALES_DATE = EXA_DB.RETAIL_STAR.Time_1.PK_Date ); TAG FIELDS GeoCoord WITH $geopoint; |
Подробности по написанию скрипта при помощи QlikView Direct Discovery даны, как обычно в Help-е: https://help.qlik.com/en-US/qlikview/12.0/Subsystems/Client/Content/DirectDiscovery/direct-discovery-introduction.htm
- Загружаем скрипт
Кликаем по «Reload». На этом шаге предрасчитываются отдельные значения для полей измерений и никаких фактических данных не загружается в QlikView
- Начинаем строить визуализации QlikView на основе больших объемов данных, доступных в Exasol в реальном времени:
Qlik Sense + Exasol: схема интеграции через Direct Query по шагам
Теперь то же самое проделаем с Qlik Sense – прямое обращение к внешней базе данных Exasol через запрос Direct Query по шагам.
Предварительные требования:
- Установлена актуальная версия Qlik Sense: November 2017
- Установлена исходная внешняя база данных Exasol: бесплатная версия БД Exasol (6.0.0), работающая на 1-м узле.
В моем случае Exasol установлен на 1-м узле под управлением ОС CentOS,в виртуальной машине на Hyper-v.
- Установлен 64-битный Exasol ODBC-драйвер
- DNS конфигурируется при помощи инструмента Windows Data Source Administrator
Процесс по шагам:
- Добавляем источник данных
Открываем Qlik Sense -> «Data Load Editor». Оказываемся в редакторе загрузки и добавляем новый источник данных ODBC:
- Пишем скрипт загрузки:
Используем Direct Query, чтобы Qlik Sense обращался к данным в Exasol, а не загружал их к себе в оперативную память.
Вот такой скрипт у меня получился для примера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
LIB CONNECT TO [RETAIL_DEMO]; DIRECT QUERY DIMENSION PRODUCT_GROUP_DESC, SALES_DATE, Year_Name, Quarter_Name, Month_Name, Week_Name, Year, Quarter, Month, Week, AREA, CITY, NATIVE(' ''['' || longitude || '','' || latitude || '']'' ') as GeoCoord MEASURE PRICE_OVERALL DETAIL SALES_TIMESTAMP FROM EXA_DB.RETAIL_STAR.FACT_SALES_POSITIONS JOIN EXA_DB.RETAIL_STAR.ARTICLE ON ( EXA_DB.RETAIL_STAR.FACT_SALES_POSITIONS.ARTICLE_ID = EXA_DB.RETAIL_STAR.ARTICLE.ARTICLE_ID ) JOIN EXA_DB.RETAIL_STAR.MARKETS ON ( EXA_DB.RETAIL_STAR.FACT_SALES_POSITIONS.MARKET_ID = EXA_DB.RETAIL_STAR.MARKETS.MARKET_ID ) JOIN EXA_DB.RETAIL_STAR.Time_1 ON ( EXA_DB.RETAIL_STAR.FACT_SALES_POSITIONS.SALES_DATE = EXA_DB.RETAIL_STAR.Time_1.PK_Date ); TAG FIELDS GeoCoord WITH $geopoint; |
Подробности по написанию скрипта при помощи Qlik Sense Direct Discovery даны, как обычно в Help-е: http://help.qlik.com/en-US/sense/November2017/Subsystems/Hub/Content/Scripting/ScriptRegularStatements/direct-query.htm
- Загружаем скрипт
Нажимаем на «Load Data». На этом шаге предрасчитываются отдельные значения для полей измерений и никаких фактических данных не загружается в Qlik Sense:
- Начинаем строить визуализации Qlik Sense на основе больших объемов данных, доступных в Exasol в реальном времени:
Всем большой аналитики с QlikView, Qlik Sense и Exasol!
P.s. Коллеги, нужна ли отдельная статья по тому, как работает Qlik Direct Discovery или все уже в курсе?
Нужна! Были бы благодарны!
Здравствуйте!
Большое спасибо за статью.
Не могли бы вы написать статью о том, как работает Qlik Direct Discovery, где и когда его использовать стоит и когда наоборот.
Спасибо