Перейти к содержанию
пятница, 14 августа 2026 г.

ИИ Вестник

Главные новости о развитии искусственного интеллекта в России

Создание собственного Native Filter плагина для Apache Superset: практическое руководство

Источник: Все публикации в потоке Разработка
Engineer coding a custom calendar filter plugin for Apache Superset dashboard.
Generated by Sourceful Riverflow (RouterAI)

Инженер МТС Web Services Александр Цай столкнулся с нехваткой актуальных гайдов по разработке плагинов для Apache Superset и решил поделиться собственным опытом. В статье подробно разбирается процесс создания кастомного фильтра-календаря, от структуры файлов до регистрации в системе.

Ведущий инженер-аналитик МТС Web Services Александр Цай представил развернутое руководство по разработке собственного Native Filter плагина для Apache Superset. Поводом послужила реальная производственная задача: при развертывании Superset 6.1.0 заказчик отказался от стандартного фильтра по датам и потребовал календарь в стиле PowerBI. Как выяснилось, официальная документация и генератор шаблонов морально устарели — последний не обновлялся с 2024 года и генерирует код, ссылающийся на несуществующие классы. Это вынудило команду разработать собственное решение, которое автор и описал в материале.

В основе подхода лежит понимание архитектуры Superset: фронтенд построен на React и TypeScript, а все плагины, включая фильтры, являются обычными ChartPlugin с метаданными, содержащими поведение Behavior.NativeFilter. Реестр фильтров формируется динамически: Superset берет все зарегистрированные плагины из getChartMetadataRegistry() и оставляет те, у которых есть это поведение. Это означает, что для добавления нового фильтра достаточно зарегистрировать свой плагин в точке расширения src/setup/setupPluginsExtra.ts, после чего он автоматически появится в списке доступных фильтров на дашборде. Автор приводит пример регистрации, где создается экземпляр CalendarFilterPlugin, настраивается ключ 'filter_calendar' и вызывается метод register().

Ключевая механика, которую необходимо понять при разработке фильтра, — это DataMask. Фильтр не выполняет запросы к базе данных напрямую, а через хук setDataMask передает дашборду команду модифицировать SQL-запросы для всех визуализаций. Объект DataMask содержит три поля: extraFormData — условия фильтрации, filterState — текущее значение для отображения, и ownState — состояние для сохранения. После отправки новой маски дашборд автоматически перезапрашивает все графики с учетом новых условий. Такой подход обеспечивает единообразную работу всех фильтров и упрощает интеграцию кастомных решений.

Структура плагина повторяет стандартные пакеты Superset: в директории src/ находятся index.ts для регистрации, CalendarFilterPlugin.tsx — React-компонент, buildQuery.ts для построения запроса к базе данных, controlPanel.ts для панели настроек, transformProps.ts для преобразования данных, types.ts с типами и common.ts с вспомогательными утилитами. Вместо написания календаря с нуля автор использует готовые компоненты из @superset-ui/core, такие как DatePicker и RangePicker, а для работы с датами — библиотеку dayjs, уже включенную в зависимости Superset. Это существенно сокращает объем кода и время разработки.

Автор подробно разбирает каждый файл, начиная с types.ts, где определяются пропсы и дефолтные настройки, включая возможность выбора одиночной даты или диапазона. В index.ts регистрируется плагин с указанием метаданных: имя, описание, иконка и ключевое поведение Behavior.NativeFilter. В buildQuery.ts описывается запрос к базе данных для получения минимальной и максимальной даты по выбранной колонке, что позволяет фильтру корректно отображать доступный диапазон. Автор признает, что код написан на TypeScript с некоторыми огрехами, так как он в основном питонист, но подчеркивает, что все проверено и работоспособно.

Для российского рынка эта статья имеет особую ценность, поскольку большинство компаний, использующих Superset, сталкиваются с необходимостью адаптации BI-инструментов под специфические требования заказчиков. Отсутствие актуальной документации на русском языке и устаревшие шаблоны создают барьер для разработчиков, поэтому практические руководства от опытных инженеров становятся незаменимым ресурсом. Автор намеренно не публиковал плагин в npm, чтобы дать возможность каждому доработать его под свои нужды, что стимулирует развитие сообщества и обмен опытом.

В перспективе подобные публикации могут способствовать росту популярности Apache Superset как альтернативы проприетарным BI-решениям, таким как PowerBI или Tableau. Однако остаются открытые вопросы: как обеспечить совместимость с будущими версиями Superset, учитывая быструю эволюцию платформы, и каким образом стандартизировать процесс разработки плагинов, чтобы избежать устаревания документации. Автор призывает читателей экспериментировать, дорабатывать плагин и делиться результатами, что позволит создать более устойчивую экосистему вокруг Superset. В целом, материал представляет собой ценный вклад в русскоязычное сообщество разработчиков BI-инструментов и открывает новые возможности для кастомизации аналитических платформ.

Читайте также