Apache Superset - FAQ
- Могу ли я обращаться сразу к нескольким таблицам?
- Насколько БОЛЬШИМ может быть мой источник данных?
- Как создать свою собственную визуализацию?
- Могу ли я загружать и визуализировать csv - файлы?
- Почему время ожидания моих запросов истекает слишком быстро?
- Почему не видно карту в визуализации mapbox?
- Как добавить динамические фильтры в дашборд?
- Как ограничить время обновления в дашборде?
- Почему Fabmanager или Superset зависает/ не отвечает при запуске (мой домашний каталог работает по NFS)?
- Что делать, если таблица изменилась?
- Как мне приступить к разработке нового типа визуализации?
- Какой движок базы данных я могу использовать в качестве серверной части для Superset?
- Как я могу настроить аутентификацию и авторизацию OAuth?
- Как установить фильтр по умолчанию в дашборде?
- Как сделать так, чтобы Superset обновил мою таблицу?
- Как использовать определенные цвета?
- Superset работает с [вставьте сюда базу данных]?
Могу ли я обращаться сразу к нескольким таблицам?
Напрямую - нет. Источником данных Superset SQLAlchemy может быть только одна таблица или одно представление.
При работе с таблицами решением может стать реализация таблицы, содержащей все поля, необходимые для Вашего анализа, посредством некоторого запланированного пакетного процесса.
Представление — это простой логический уровень, который резюмирует произвольные SQL-запросы в виде виртуальной таблицы. Это может позволить Вам объединять несколько таблиц, а также применять некоторые преобразования с использованием выражений SQL. Ограничением является производительность Вашей базы данных, поскольку Superset эффективно запускает запрос поверх Вашего запроса (представления). Хорошей практикой может быть присоединение Вашей основной таблицы только к одной или нескольким небольшим таблицам, кроме того, следует избегать функции Группировать по (GROUP BY), где это возможно, поскольку Superset будет выполнять свою собственную функцию GROUP BY, а выполнение двойной работы может снизить производительность.
Работаете ли Вы с таблицей или с представлением, важным фактом остается то, является ли Ваша база данных достаточно быстрой для того, чтобы обслуживать ее/его в интерактивном режиме, что обеспечивает хорошее взаимодействие с пользователем в Superset.
Насколько БОЛЬШИМ может быть мой источник данных?
Он может быть гигантским! Как это уже было упомянуто ранее, основным критерием является то , может ли Ваша база данных осуществлять запросы и возвращать результаты в течение приемлемого для пользователя промежутка времени. Многие распределенные базы данных могут выполнять запросы, сканирующие терабайты в интерактивном режиме.
Как создать свою собственную визуализацию?
Мы планируем облегчить процесс добавления новых визуализаций, а пока мы присвоили всем подобным запросам тег Пример (example), для того, чтобы пользователи могли ознакомиться с примерами добавления новых визуализаций.
https://github.com/airbnb/superset/issues?q=label%3Aexample+is%3Aclosed
Могу ли я загружать и визуализировать csv - файлы?
Да, с помощью кнопки Загрузть CSV( Upload a CSV ) в пункте меню Источники ( Sources) . После создания таблицы из CSV, она может быть загружена по аналогии с любыми другими таблицами на страницу Источники -> Таблицы ( Sources -> Tables).
Почему время ожидания моих запросов истекает слишком быстро?
Для этого может быть несколько причин:
- Для обработки длинных запросов из Sql Lab по умолчанию Superset дает 6 часов до того момента, как Celery уничтожит их. Если Вы хотите увеличить время обработки запросов, Вы можете прописать его в настройках. Например:
SQLLAB_ASYNC_TIME_LIMIT_SEC = 60 * 60 * 6
- Superset запущен на вэб-сервере Gunicorn, который может ограничивать время для обработки вэб-запросов. Если Вы хотите увеличить время, установленное по умолчанию (50), можете указать нужное значение при запуске вэб-сервера с помощью флага -t , который выражается в секундах.
superset runserver -t 300
- Если Вы видите уведомление 504 Gateway Time-out при загрузке дашборда или изучении фрагмента, возможно, Вы отстали от шлюза или прокси-сервера (например, Nginx). Без своевременного ответа от сервера Superset (который обрабатывает длинные запросы) эти веб-серверы будут напрямую отправлять клиентам код состояния 504. Superset имеет ограниченное времени ожидания для решения этой проблемы. Если запрос не вернулся в течение тайм-аута (по умолчанию 60 секунд), Superset отобразит предупреждающее сообщение, чтобы избежать сообщения о тайм-ауте шлюза. Если у Вас больший лимит времени ожидания, Вы можете изменить настройки времени ожидания в superset_config.py:
SUPERSET_WEBSERVER_TIMEOUT = 60
Почему не видно карту в визуализации mapbox?
Необходимо зарегистрироваться на mapbox.com, получить ключ API и настроить его, как MAPBOX_API_KEY в superset_config.py.
Как добавить динамические фильтры в дашборд?
Это достаточно просто: используйте виджетFilter Box , постройте фрагмент (Slice) и добавьте его в дашборд.
Виджет Filter Box позволяет определить запрос для заполнения раскрывающихся списков, которые можно использовать для фильтрации. Чтобы создать список различных значений, мы запускаем запрос и сортируем результат по предоставленной Вами метрике, сортируя по убыванию.
В виджете также есть флажок «Фильтр по дате», который включает возможности фильтрации по времени. После установки флажка и обновления Вы увидите раскрывающийся список «от» и «до».
По умолчанию фильтрация будет применяться ко всем фрагментам, построенным на основе источника данных, который имеет то же имя столбца, на котором основан и сам фильтр. Также необходимо, чтобы этот столбец был отмечен как «фильтруемый» на вкладке столбца редактора таблицы.
Но что, если Вы не хотите, чтобы определенные виджеты отфильтровывались в Вашем дашборде? В таком случае Вы можете отредактировать поле JSON, а точнее ключ filter_immune_slices, который получает массив sliceId, на которые никогда не должна влиять фильтрация на уровне дашборда.
{ "filter_immune_slices": [324, 65, 92], "expanded_slices": {}, "filter_immune_slice_fields": { "177": ["country_name", "__time_range"], "32": ["__time_range"] }, "timed_refresh_immune_slices": [324] }
В приведенном выше json-блобе фрагменты 324, 65 и 92 не будут затронуты какой-либо фильтрацией на уровне дашборда.
Теперь обратите внимание на ключ filter_immune_slice_fields. Он позволит Вам быть более конкретным и определить для конкретного slice_id, какие поля фильтра следует игнорировать.
Обратите внимание на использование ключевого слова __time_range, которое предназначено для работы с упомянутой выше фильтрацией временных рамок.
Но что происходит с фильтрацией при работе с разными таблицами или базами данных? Если имя столбца является общим, фильтр будет применен, это так просто!
Как ограничить время обновления в дашборде?
По умолчанию функция обновления дашборда позволяет автоматически повторно запрашивать каждый фрагмент дашборда в соответствии с установленным расписанием. Однако иногда Вам не нужно обновлять все фрагменты, особенно если выполняются «тяжеловесные» запросы. Чтобы исключить определенные фрагменты из процесса синхронизированного обновления, добавьте ключ timed_refresh_immune_slices в поле JSON дашборда:
{ "filter_immune_slices": [], "expanded_slices": {}, "filter_immune_slice_fields": {}, "timed_refresh_immune_slices": [324] }
В приведенном выше примере, если для панели мониторинга задано обновление по времени, каждый фрагмент за исключением 324, будет автоматически повторно запрашиваться по расписанию.
Обновление фрагмента также будет происходить в течение указанного периода. Вы можете отключить эту функцию, установив для stagger_refresh значение false, и изменить период обновления, установив для stagger_time значение в миллисекундах в поле JSON:
{ "stagger_refresh": false, "stagger_time": 2500 }
Почему Fabmanager или Superset зависает/ не отвечает при запуске (мой домашний каталог работает по NFS)?
По умолчанию Superset создает и использует базу данных sqlite в ~/.superset/superset.db.
Известно, что Sqlite работает не очень хорошо, если используется на NFS
Вы можете переопределить этот путь, используя переменную SUPERSET_HOME.
Другой обходной путь — изменить место, где Superset хранит базу данных sqlite, добавив SQLALCHEMY_DATABASE_URI = 'sqlite:////new/location/superset.db' в superset_config.py (при необходимости создайте файл), а затем добавить каталог, в котором superset_config. py «живет» в переменные среды окружения PYTHONPATH (например, export PYTHONPATH=/opt/logs/sandbox/airbnb/).
Что делать, если таблица изменилась?
Таблицы меняются, и Superset должен это учитывать. В жизненном цикле дашборда довольно часто возникает необходимость добавить новое измерение или показатель. Чтобы Superset обнаружил Ваши новые столбцы, все, что Вам нужно сделать, это перейти в Меню -> Источники -> Таблицы, щелкнуть значок редактирования рядом с таблицей, схема которой была изменена, и нажать Сохранить на вкладке Подробности. После этого Вы можете повторно отредактировать таблицу, чтобы настроить вкладку «Столбец», установить соответствующие флажки и снова сохранить изменения.
Как мне приступить к разработке нового типа визуализации?
Вот пример с комментариями: https://github.com/airbnb/superset/pull/3013
Какой движок базы данных я могу использовать в качестве серверной части для Superset?
В данном случае серверная часть— это база данных OLTP, используемая Superset для хранения своей внутренней информации, такой как ваш список пользователей, фрагментов и дашбордов.
Superset тестируется с использованием Mysql, Postgresql и Sqlite. Рекомендуется установить Superset на один из этих серверов баз данных.
Использование баз данных без OLTP, таких как Vertica, Redshift или Presto в качестве серверной части базы данных просто не будет работать, поскольку они не предназначены для такого типа рабочей нагрузки.
Установка в Oracle, Microsoft SQL Server или других базах данных OLTP может работать, но не тестировалась.
Обратите внимание, что практически любые базы данных с интеграцией SqlAlchemy должны отлично работать в качестве источника данных для Superset, но не в качестве бэкэнда OLTP.
Как я могу настроить аутентификацию и авторизацию OAuth?
Ознакомьтесь с этим файлом configuration example.
Как установить фильтр по умолчанию в дашборде?
Очень просто. Примените фильтр и сохраните дашборд, пока фильтр активен.
Как сделать так, чтобы Superset обновил мою таблицу?
При добавлении столбцов в таблицу Вы можете настроить Superset для обнаружения и объединения новых столбцов с помощью действия «Обновить метаданные» (Refresh Metadata) на странице «Источник» -> «Таблицы» (Source -> Tables). Просто установите флажок рядом с таблицами, схему которых Вы хотите обновить, и нажмите Действия -> Обновить метаданные (Actions -> Refresh Metadata).
Как использовать определенные цвета?
В поле JSON используйте ключ label_colors.
{ "label_colors": { "Girls": "#FF69B4", "Boys": "#ADD8E6" } }
Superset работает с [вставьте сюда базу данных]?
Был составлен список баз данных, которые хорошо работают с Superset (смотрите Database dependencies). Базы данных, не вошедшие в список, также могут работать хорошо. Надеемся, что в ближайшее время информация о базах данных будет дополнена.
Чтобы база данных поддерживалась в Superset через коннектор SQLAlchemy, необходимо наличие совместимого с Python диалекта SQLAlchemy, а также определенного драйвера DBAPI. База данных с ограниченной поддержкой SQL также может работать. Например, можно подключиться к Druid через коннектор SQLAlchemy. Еще один ключевой элемент поддержки базы данных — интерфейс спецификации Superset Database Engine. Этот интерфейс позволяет определять конфигурации для конкретной базы данных, выходящие за рамки SQLAlchemy и DBAPI. Также должны быть учтены и следующие особенности:
- функция SQL, связанная с датой, которая позволяет Superset извлекать разную степень детализации времени при выполнении запросов временных рядов;
- есть ли поддержка подзапросов. Если false, Superset может выполнять двухэтапные запросы, чтобы компенсировать данное ограничение;
- методы обработки журналов и определения процента выполнения запроса;
- технические сведения о том, как обрабатывать соединения, если драйвер не является стандартным DBAPI.
Помимо использования коннектора SQLAlchemy, также возможно (хотя и гораздо сложнее) использовать свой собственный коннектор. Единственным примером на данный момент является коннектор Druid. Если база данных, которую Вы планируете интегрировать, имеет какую-либо поддержку SQL, вероятно, предпочтительнее пойти по пути SQLAlchemy. Обратите внимание, что для того, чтобы собственный коннектор заработал, база данных должна иметь поддержку выполнения запросов типа OLAP и должна иметь возможность выполнять действия, типичные для базового SQL:
- агрегировать данные
- применять фильтры (==, !=, >, <, >=, <=, IN, …)
- задавать условия с помощью предложения HAVING
- учитывать схемы, отображать столбы и типы.