Основное руководство по установке Apache Superset от Дмитрия Шевченко

В настоящее время решения Open Source набирают популярность в мире и помогают компаниям решать важные задачи. Одним из главных преимуществ платформы с открытым исходным кодом является его стоимость, а также гибкость и свобода выбора разных структур, облаков и услуг. Наши специалисты всегда следят за развитием технологий в ИТ, подбирают новые подходы, разрабатывают и тестируют новые программы. Сегодня подготовили обзор про Apache Superset. Специалист по бизнес-приложениям компании DBI, Дмитрий Шевченко, расскажет, как настроить Superset, а также подробно покажет опции, которые BI-инструмент предлагает разработчикам.

Apache Superset — бесплатный BI-инструмент, в котором есть важный аналитический функционал «out of the box» с возможностью расширения.

Для ознакомления мы развернем тестовый сервер на одной из ОС семейства Linux (ОС Windows для Superset официально не поддерживаются). Есть два способа установки: через pip или развернуть docker-образ.

В случае выбора через docker у нас будет доступ к директории superset-fronend, содержащей файлы, относящиеся к инфопанелям (дашбордам) — визуализации, UI и пр. Если установим через pip все файлы будут в скомпилированном виде без возможности их редактирования.

Выберем вариант установки через pip, для ознакомления редактировать файлы фронтенда нам не понадобится.

Инструкция по установке есть здесь: https://superset.apache.org/docs/installation/installing-superset-from-scratch.

Сам процесс несложен, и мы не будем на нем останавливаться. Можно лишь отметить, что в некоторых версиях Superset случаются конфликты версий модулей, даже при корректно установленных требованиях. Однако эту проблему можно решить напрямую, переустановкой конкретной версии в pip.

Итак, наш dev-сервер запущен, и если мы выбрали опцию «установить примеры», то сразу можем наблюдать несколько симпатичных инфопанелей:

*Все скриншоты далее сделаны на основе встроенных примеров

 

Теперь рассмотрим, что собой представляет Superset «под капотом».

Перейдем из директории venv в ./lib/python3.8/site-packages/

Здесь три сотни директорий! Из них можно отметить следующие:

  • Flask_appbuilder — в основе Superset лежит Flask, а точнее Flask Appbuilder. Сравнивая их документацию, можно заметить много общего – схожий UI, гранулированный доступ, локализация через Babel, набор cli-команд и пр.
  • Jinja2 — шаблонизатор на основе python, позволяет организовать некое подобие параметров внутри отчетов.
  • Markdown — язык текстовой разметки, позволяет красиво встроить в отчет поясняющий текст, а также ссылку или изображение.

Так выглядит код для элемента markdown:

А так он отображается в отчете:

Вообще, если в отчете Superset надо настроить привлекательность, например, цвет шрифта и табличек, фон — добро пожаловать в CSS, а если нужен кастомный визуальный элемент – можно найти или создать свой в js, такой вот Web-BI получается.

  • Sqlalchemy — библиотека для работы с SQL базами, доступ к интерфейсу, которой можно получить из GUI Superset. Удобно, чтобы протестировать запрос перед его визуализацией:

  • Yaml – опции импорта-экспорта данных в Superset реализованы в виде yaml – файлов, можно в один клик экспортировать наш отчет с dev-сервера и перенести его на prod. Для более сложных манипуляций можно настроить автоматическую обработку и развертывание таких файлов через API, спецификация по которому доступна по адресу {Superset instance}/swagger/v1, в нашем случае это http://localhost:8088/swagger/v1:

Здесь можно увидеть методы для всех наших объектов – запросов, датасетов, и даже annotaion layer, который мне пока не приходилось использовать.

Теперь перейдем в директорию superset. Здесь хранятся исходные файлы *.py, отвечающие за логику приложения. Видно, директорию examples, где лежат наши инфопанели-примеры. Сейчас нас интересует файл config.py, где прописано множество настроек для конфигурации нашего приложения. Чтобы изменить эти настройки, сам файл мы трогать не будем, а создадим новый файл superset_config.py (можно в любой директории, даже вне venv) и пропишем путь к нему через команду:

export SUPERSET_CONFIG_PATH=/{YOUR PATH}/superset_config.py

Теперь мы можем написать все нужные нам параметры в этот файл, и они перезапишут соответствующие определения в config.py.

Остановимся на некоторых интересных параметрах из config.py подробнее:

  • SQLALCHEMY_DATABASE_URI – путь ко внутренней БД Superset, хранящей все наши метаданные: дашборды, датасеты, чарты и пр. По умолчанию это БД на sqlite, но для прода рекомендуется поставить PostgreSQL или MySQL. В дальнейшем мы можем настроить подключение к этой БД в самом Superset, чтобы получить данные для self-аналитики.
  • BABEL_DEFAULT_LOCALE – локализация по умолчанию, можем выбрать русский язык. При желании, конечно, всегда можно дополнить или изменить её самому, инструкции по настройке локализации есть здесь: https://superset.apache.org/docs/contributing/translations
  • DEFAULT_FEATURE_FLAGS – параметр–словарь, в котором можно настроить много интересных опций, например:

ENABLE_TEMPLATE_PROCESSING — позволяет использовать jinja –переменные. Как их применять — тема для отдельной статьи, сейчас отметим, что можно например создать датасет и использовать в нем Jinja для выборки только данных, к которым относится текущий пользователь через {{ current_user_id() }}, либо создав свой макрос.

DASHBOARD_CROSS_FILTERS – добавляют при создании чартов (не для всех визуализаций) опция. «Emit dashboard cross filters» — позволяет нажимать на чарты, чтобы фильтровать отчет по выбранному значению, например, так:

Можем также настроить, на какие из чартов этот фильтр будет применим:

Видим, что на «Большое число» теперь кросс-фильтр не действует:

DASHBOARD_RBAC – позволяет дать доступ для дашборда на чтение определенной роли, в обход основных ограничений. Полезно, если надо дать доступ к отчету, но не к набору данных, на которых он построен.

Важно отметить, что перезаписывать параметры в DEFAULT_FEATURE_FLAGS основного конфиг-файла нужно уже в FEATURE_FLAGS файла superset_config.py!

EXTRA_CATEGORICAL_COLOR_SCHEMES – набор цветовых схем, которые можно использовать для чарта/дашборда, можем создать собственную цветовую схему для чартов. Superset может подхватить новую схему «на лету», даже без перезагрузки сервера – достаточно сохранить изменения в superset_config.py:

Как отмечалось ранее, при развертывании через venv основные файлы фронтенда будут нам недоступны, однако кое-что мы настроить все-таки можем. Из директории superset перейдем в static/assets/images. Здесь мы видим файл superset-logo-horiz.png, отвечающий за лого нашего приложения. Заменим его на что-нибудь более интересное и перезапустим наш сервер, а также нужно очистить кэш:

Расширение функционала «out of the box» прошло успешно!

Конечно, опций по настройке Superset значительно больше – здесь есть и возможность асинхронного выполнения запросов, настройка рассылок, интеграция через Auth, конфигурация логирования и т.д. Философия Superset и Flask, лежащим в его основе, в этом плане совпадают — предоставить разработчику костяк с открытым кодом, на основе которого можно настроить и создать то, что нужно для конкретной задачи.

Если у вас остались вопросы по настройке Apache Superset, или любому из решений Open Source, мы готовы предоставить консультацию и подробно обсудить вашу проблему.  Позвоните или напишите нам – мы с удовольствием ответим на все ваши вопросы!