Apache Superset — Часто задаваемые вопросы (FAQs)

Содержание

Часто задаваемые вопросы

Можно ли присоединять/запрашивать несколько таблиц одновременно

Не в пользовательском интерфейсе исследования или визуализации. Источник данных Superset SQLAlchemy может быть только одной таблицей или представлением.

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

Представление — это простой логический уровень, который абстрагирует произвольные SQL-запросы в виде виртуальной таблицы. Это может позволить вам объединять и объединять несколько таблиц, а также применять некоторые преобразования с использованием произвольных выражений SQL. Ограничением является производительность вашей базы данных, поскольку Superset эффективно запускает запрос поверх вашего запроса (представления). Хорошей практикой может быть ограничение присоединения вашей основной большой таблицы только к одной или нескольким небольшим таблицам и избегание использования GROUP BY , где это возможно, поскольку Superset будет выполнять свою собственную GROUP BY , а выполнение работы дважды может снизить производительность.

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

Однако, если вы используете SQL Lab, такого ограничения нет, вы можете написать sql-запрос для объединения нескольких таблиц, если ваша учетная запись db имеет доступ к таблицам.

Насколько БОЛЬШИМ может быть мой источник данных

Он может быть гигантским! Надмножество действует как тонкий слой над вашими базами данных или механизмами обработки данных.

Как упоминалось выше, основным критерием является то, может ли ваша база данных выполнять запросы и возвращать результаты в сроки, приемлемые для ваших пользователей. Многие распределенные базы данных могут выполнять запросы, которые сканируют терабайты в интерактивном режиме.

Как создать собственную визуализацию

Мы рекомендуем прочитать инструкции в разделе Создание плагинов визуализации .

Могу ли я загружать и визуализировать данные в формате CSV

Абсолютно! Прочтите инструкции здесь , чтобы узнать, как включить и использовать загрузку CSV.

Почему время ожидания моих запросов истекло ?

Есть много причин, которые могут привести к длительному тайм-ауту запроса.

Для выполнения длинного запроса из Sql Lab по умолчанию Superset позволяет ему выполняться до 6 часов, прежде чем он будет убит сельдереем. Если вы хотите увеличить время выполнения запроса, вы можете указать время ожидания в конфигурации. Например:

SQLLAB_ASYNC_TIME_LIMIT_SEC = 60 * 60 * 6
Если вы видите тайм-ауты (504 Gateway Time-out) при загрузке панели мониторинга или фрагмента исследования, вы, вероятно, находитесь за шлюзом или прокси-сервером (например, Nginx). Если он не получил своевременный ответ от сервера Superset (который обрабатывает длинные запросы), эти веб-серверы будут напрямую отправлять клиентам код состояния 504. Superset имеет ограничение времени ожидания на стороне клиента для решения этой проблемы. Если запрос не вернулся в течение тайм-аута на стороне клиента (по умолчанию 60 секунд), Superset отобразит предупреждающее сообщение, чтобы избежать сообщения о тайм-ауте шлюза. Если у вас больше лимит времени ожидания шлюза, вы можете изменить настройки времени ожидания в superset_config.py :
SUPERSET_WEBSERVER_TIMEOUT = 60

Почему карта не отображается в геопространственной визуализации

Вам необходимо зарегистрировать бесплатную учетную запись на Mapbox.com , получить ключ API и добавить его в .env и .env-non-dev по ключу MAPBOX_API_KEY:

MAPBOX_API_KEY = "longstringofalphanumer1c"

Как добавить динамические фильтры на панель инструментов

Используйте виджет «Поле фильтров» , создайте фрагмент и добавьте его на панель инструментов.

Виджет «Поле фильтра» позволяет определить запрос для заполнения раскрывающихся списков, которые можно использовать для фильтрации. Чтобы создать список различных значений, мы запускаем запрос и сортируем результат по предоставленной вами метрике, сортируя по убыванию.

В виджете также есть флажок «Фильтр по дате» , который включает возможности фильтрации по времени на панели инструментов. После установки флажка и обновления вы увидите раскрывающиеся списки от и до.

По умолчанию фильтрация будет применяться ко всем срезам, построенным поверх источника данных, который имеет то же имя столбца, на котором основан фильтр. Также требуется, чтобы этот столбец был отмечен как «фильтруемый» на вкладке столбца редактора таблицы.

Но что, если вы не хотите, чтобы определенные виджеты отфильтровывались на панели инструментов? Вы можете сделать это, отредактировав панель мониторинга и отредактировав в форме поле метаданных JSON, а точнее ключ filter_immune_slices, который получает массив идентификаторов слайсов, на который никогда не должна влиять фильтрация на уровне панели мониторинга.

{
    "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_refreshfalse, и изменить период сдвига, установив stagger_timeзначение в миллисекундах в поле метаданных JSON:

{
    "stagger_refresh": false,
    "stagger_time": 2500
}
Здесь вся панель мониторинга будет обновляться сразу, если периодическое обновление включено. Время смещения 2,5 секунды игнорируется.

Почему «flask fab» или суперсет зависает/зависает/не отвечает при запуске (мой домашний каталог смонтирован по NFS)?

По умолчанию Superset создает и использует базу данных SQLite по адресу ~/.superset/superset.db. Известно, что SQLite плохо работает при использовании в NFS из-за неработающей реализации блокировки файлов в NFS.

Вы можете переопределить этот путь, используя переменную среды SUPERSET_HOME .

Другой обходной путь — изменить место, где superset хранит базу данных sqlite, добавив следующее superset_config.py:

SQLALCHEMY_DATABASE_URI = 'sqlite:////new/location/superset.db'
Подробнее о настройке Superset с помощью конфигурационного файла можно прочитать здесь .

Что делать, если схема таблицы изменилась

Схемы таблиц развиваются, и Superset должен это отражать. В жизненном цикле панели мониторинга довольно часто возникает необходимость добавить новое измерение или показатель. Чтобы заставить Superset обнаружить ваши новые столбцы, все, что вам нужно сделать, это перейти в «Данные» -> «Наборы данных» , щелкнуть значок редактирования рядом с набором данных, схема которого изменилась, и нажать « Синхронизировать столбцы из источника» на вкладке « Столбцы ». За сценой новые столбцы будут объединены. После этого вы можете повторно отредактировать таблицу, чтобы настроить вкладку «Столбцы», установить соответствующие флажки и снова сохранить.

Какой механизм базы данных я могу использовать в качестве серверной части для Superset

Чтобы уточнить, серверная часть базы данных — это база данных OLTP, используемая Superset для хранения своей внутренней информации, такой как ваш список пользователей, срезов и определений панели мониторинга.

Superset тестируется с использованием Mysql, Postgresql и Sqlite для его серверной части. Рекомендуется установить Superset на один из этих серверов баз данных для производства.

Использование хранилища столбцов, баз данных без OLTP, таких как Vertica, Redshift или Presto, в качестве базы данных просто не будет работать, поскольку эти базы данных не предназначены для такого типа рабочей нагрузки. Установка в Oracle, Microsoft SQL Server или других базах данных OLTP может работать, но не тестировалась.

Обратите внимание, что практически любые базы данных с интеграцией SqlAlchemy должны отлично работать в качестве источника данных для Superset, но не в качестве бэкэнда OLTP.

Как настроить аутентификацию и авторизацию OAuth

Вы можете взглянуть на этот пример конфигурации Flask-AppBuilder .

Как установить фильтр по умолчанию на панели инструментов

Просто примените фильтр и сохраните панель мониторинга, пока фильтр активен.

Есть ли способ принудительно использовать определенные цвета

Это возможно для каждой информационной панели путем предоставления сопоставления меток с цветами в атрибуте метаданных JSON с использованием ключа label_colors.

{
    "label_colors": {
        "Girls": "#FF69B4",
        "Boys": "#ADD8E6"
    }
}

Работает ли Superset с [какой-то database engine]

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

Чтобы механизм базы данных поддерживался в Superset через коннектор SQLAlchemy, необходимо наличие совместимого с Python диалекта SQLAlchemy , а также определенного драйвера DBAPI. База данных с ограниченной поддержкой SQL также может работать. Например, можно подключиться к Druid через коннектор SQLAlchemy, хотя Druid не поддерживает соединения и подзапросы. Еще один ключевой элемент поддержки базы данных — интерфейс спецификации Superset Database Engine. Этот интерфейс позволяет определять конфигурации и логику для конкретной базы данных, выходящие за рамки SQLAlchemy и DBAPI. Это включает в себя такие функции, как:

  • функция SQL, связанная с датой, которая позволяет Superset извлекать разную степень детализации времени при выполнении запросов временных рядов.
  • поддерживает ли движок подзапросы. Если false, Superset может выполнять двухэтапные запросы, чтобы компенсировать ограничение.
  • методы обработки журналов и определения процента выполнения запроса
  • технические сведения о том, как обрабатывать курсоры и соединения, если драйвер не является стандартным DBAPI

Помимо коннектора SQLAlchemy, также возможно, хотя и гораздо сложнее, расширить Superset и написать свой собственный коннектор. Единственным примером этого на данный момент является коннектор Druid, который заменяется растущей поддержкой SQL в Druid и недавней доступностью драйвера DBAPI и SQLAlchemy. Если база данных, которую вы планируете интегрировать, имеет какую-либо поддержку SQL, вероятно, предпочтительнее пойти по пути SQLAlchemy. Обратите внимание, что для того, чтобы собственный коннектор был возможен, база данных должна иметь поддержку выполнения запросов типа OLAP и должна иметь возможность выполнять действия, типичные для базового SQL:

  • совокупные данные
  • применять фильтры
  • применять фильтры типа HAVING
  • быть осведомленным о схеме, выставлять столбцы и типы

Предлагает ли Superset публичный API

Да, общедоступный REST API, и поверхность этого формального API неуклонно расширяется. Подробнее об этом API и взаимодействии с ним с помощью Swagger можно прочитать здесь .

Некоторые из первоначальных представлений о наборе конечных точек в /api/v1 изначально были указаны в SIP-17, и постоянно совершенствуется, чтобы охватить все больше и больше вариантов использования.

Доступный API задокументирован с помощью Swagger , и документацию можно сделать доступной в /swagger/v1 , включив следующий флаг в superset_config.py:

FAB_API_SWAGGER_UI = True
Существуют и другие недокументированные [частные] способы программного взаимодействия с Superset, которые не дают никаких гарантий и не рекомендуются, но могут временно подойти для вашего варианта использования:
  • используя ORM (SQLAlchemy) напрямую
  • с использованием внутреннего FAB ModelView API (устарело в Superset)
  • изменение исходного кода в вашем форке

Что делает смещение часов (Hours Offset) в «Редактировать набор данных» ?

В представлении «Редактировать набор данных» можно указать смещение по времени. Это поле позволяет настроить количество часов, которое будет добавлено или вычтено из столбца времени. Это можно использовать, например, для преобразования времени UTC в местное время.

Ivan Shamaev (Admin)
Работаю с Apache Superset с 2021 года. Веду этот блог, чтобы систематизировать свои знания и поделиться ими с другими специалистами. Подписывайтесь на мой телеграм канал @apache_superset_bi
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x