Чтобы настроить приложение, создайте файл superset_config.py. Добавьте этот файл в PYTHONPATH или создайте переменную среды SUPERSET_CONFIG_PATH, указав полный путь к файлу superset_config.py.
Например, при развёртывании RT.DataVision непосредственно в системе на базе Linux, где файл superset_config.py находится в каталоге /app, вы можете запустить:
export SUPERSET_CONFIG_PATH=/app/superset_config.py
Если вы используете собственный Dockerfile с официальным образом RT.DataVision в качестве базового образа, вы можете добавить свои переопределения, как показано ниже:
COPY --chown=superset superset_config.py /app/
ENV SUPERSET_CONFIG_PATH /app/superset_config.py
Развёртывания docker-compose по-разному обрабатывают конфигурацию приложения. Подробности см. здесь.
Ниже приведены некоторые параметры, которые вы можете установить в файле superset_config.py:
# Конфигурация для конкретного RT.DataVision
ROW_LIMIT = 5000
# Конфигурация Flask App Builder
# Секретный ключ приложения будет использоваться для безопасной подписи cookie сессии и шифрования чувствительных данных в базе данных
# Убедитесь, что вы меняете этот ключ для развёртывания с помощью надёжного ключа
# Альтернативно вы можете установить его с помощью переменной среды `SUPERSET_SECRET_KEY`
# Вам необходимо установить ключ для производственных сред, иначе сервер не запустится, и соответственно в логах вы увидите ошибку
SECRET_KEY = 'рандомно_сгенерированный_надёжный_секретный_ключ'
# Строка подключения SQLAlchemy к базе данных
# Это подключение определяет путь к БД, в которой хранятся метаданных RT.DataVision (графики, подключения, таблицы, дашборды и пр.)
# Обратите внимание, что данными для подключения к источникам данных, которые вы хотите изучить, вы должны управлять непосредственно в UI
# Свойство check_same_thread=false гарантирует, что клиент sqlite не обеспечивает однопоточный доступ, что может привести к проблеме
SQLALCHEMY_DATABASE_URI = 'sqlite:////путь/к/rtdatavision.db?check_same_thread=false'
# Флаг Flask-WTF для CSRF
WTF_CSRF_ENABLED = True
# Добавьте эндпоинты, которые должны быть освобождены от защиты CSRF
WTF_CSRF_EXEMPT_LIST = []
# Токен CSRF, срок действия которого истекает через 1 год
WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365
# Установите ключ API, чтобы включить визуализацию Mapbox
MAPBOX_API_KEY = ''
Все параметры и значения по умолчанию, определённые в config.py, можно переопределить в локальном файле superset_config.py. Вы можете изучить файл, чтобы понять, что можно настроить локально, а также какие значения установлены по умолчанию.
Поскольку superset_config.py действует как модуль конфигурации Flask, его можно использовать для изменения настроек самого Flask, а также расширений Flask, таких как flask-wtf, flask-caching, flask-migrate и flask-appbuilder. Веб-фреймворк Flask App Builder, используемый RT.DataVision, предлагает множество настроек конфигурации. Обратитесь к документации Flask App Builder для получения дополнительной информации о том, как его настроить.
Обязательно измените следующие параметры:
Если вам нужно исключить эндпоинты из CSRF (например, если вы используете кастомный эндпоинт обратной передачи аутентификации), вы можете добавить эндпоинты в WTF_CSRF_EXEMPT_LIST:
WTF_CSRF_EXEMPT_LIST = [‘’]
Для запуска RT.DataVision требуется определённый пользователем SECRET_KEY. Добавьте сильный SECRET_KEY в файл superset_config.py, например:
SECRET_KEY = 'рандомно_сгенерированный_надёжный_секретный_ключ'
Вы можете создать надёжный безопасный ключ с помощью openssl rand -base64 42.
Если вы хотите изменить существующий SECRET_KEY, выполните следующие действия:
1. Добавьте новые SECRET_KEY и PREVIOUS_SECRET_KEY в superset_config.py:
PREVIOUS_SECRET_KEY = 'текущий_ключ'
SECRET_KEY = 'сгенерированный_надёжный_новый_ключ'
Вы можете найти свой текущий SECRET_KEY с помощью этих команд (если RT.DataVision работает с docker, выполните их из контейнера с приложением RT.DataVision):
superset shell
from flask import current_app; print(current_app.config["SECRET_KEY"])
2. Сохраните файл superset_config.py с этими значениями.
3. Запустите superset re-encrypt-secrets.
4. Удалите параметр PREVIOUS_SECRET_KEY и его значение из superset_config.py в целях безопасности и сохраните файл.
По умолчанию RT.DataVision настроен на использование SQLite, это простой и быстрый способ начать работу (установка не требуется).
Однако в производственных средах использование SQLite крайне не рекомендуется из соображений безопасности, масштабируемости и целостности данных. Важно использовать только поддерживаемые движки баз данных и рассмотреть возможность использования другого выбранного движка базы данных на отдельном хосте или контейнере.
RT.DataVision поддерживает движки/версии баз данных, перечисленные в таблице ниже.
Таблица “Поддерживаемые движки/версии баз данных”
Движок базы данных | Поддерживаемые версии |
---|---|
PostgreSQL | 10.Х, 11.Х, 12.Х, 13.Х, 14.Х, 15.Х |
MySQL | 5.7, 8.Х |
Используйте драйверы базы данных и строки подключения, представленные в таблице.
Таблица "Драйверы БД и строки подключения"
База данных | Пакет PyPI | Строка подключения |
---|---|---|
PostgreSQL | pip install psycopg2 | postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name> |
MySQL | pip install mysqlclient | mysql://<UserName>:<DBPassword>@<Database Host>/<Database Name> |
Чтобы сконфигурировать хранилище метаданных RT.DataVision, задайте для ключа конфигурации SQLALCHEMY_DATABASE_URI в superset_config соответствующую строку подключения.
Вы можете запустить RT.DataVision на Nginx или Apache, но рекомендуется использовать Gunicorn в асинхронном режиме. Он обеспечивает эффективный параллелизм и довольно прост в установке и настройке. Обратитесь к документации выбранной вами технологии, чтобы настроить приложение Flask WSGI так, чтобы оно корректно работало в вашей среде. Далее приведена асинхронная настройка, которая успешно работает в производственной среде:
-w 10 \
-k gevent \
--worker-connections 1000 \
--timeout 120 \
-b 0.0.0.0:6666 \
--limit-request-line 0 \
--limit-request-field_size 0 \
--statsd-host localhost:8125 \
"superset.app:create_app()"
Обратитесь к документации Gunicorn для получения дополнительной информации. Обратите внимание, что веб-сервер разработки (superset run или flask run) не предназначен для использования в производственной среде.
Если вы не используете Gunicorn, вы можете отключить использование flask-compress, установив COMPRESS_REGISTER = False в superset_config.py.
В настоящее время sdk Python Google BigQuery несовместим с gevent из-за динамических свойств манкипатчинга в основной библиотеке Python со стороны gevent. Итак, когда вы используете BigQuery в качестве источника данных в RT.DataVision с сервером gunicorn, вам необходимо использовать отличный от gevent тип воркера.
Вы можете настроить восходящий поток HTTPS через балансировщик нагрузки или обратный прокси-сервер (например, nginx) и выполнить разгрузку SSL\TLS до того, как трафик достигнет приложения RT.DataVision. В этой настройке локальный трафик от воркера Celery, выполняющего снапшот графика для Оповещений и отчётов (Alerts & Reports), может получить доступ к RT.DataVision по URL-адресу http:// из-за точки входа. Вы также можете настроить SSL в Gunicorn (веб-сервере Python), если используете официальный docker-образ RT.DataVision.
Если вы используете RT.DataVision за балансировщиком нагрузки или обратным прокси-сервером (например, Nginx или ELB на AWS), вам может потребоваться использовать эндпоинт проверки работоспособности, чтобы ваш балансировщик нагрузки знал, работает ли ваш инстанс RT.DataVision. Такая функциональность предоставляется в эндпоинте /health, который вернёт ответ 200, содержащий ОК, если веб-сервер работает.
Если балансировщик нагрузки вставляет заголовки X-Forwarded-For/X-Forwarded-Proto, вам следует установить ENABLE_PROXY_FIX = True в файле конфигурации RT.DataVision (superset_config.py), чтобы извлекать и использовать заголовки.
В случае, если обратный прокси-сервер используется для обеспечения SSL-шифрования, может потребоваться явное определение X-Forwarded-Proto. Для веб-сервера Apache это можно настроить следующим образом:
RequestHeader set X-Forwarded-Proto "https"
RT.DataVision построен на Flask-AppBuilder (FAB), который поддерживает множество провайдеров “из коробки” (GitHub, Twitter, LinkedIn, Google, Azure и т.д.). Помимо этого, RT.DataVision можно настроить для соединения с другими имплементациями сервера авторизации OAuth2, которые поддерживают авторизацию с помощью «кода».
Убедитесь, что пакет pip Authlib установлен на веб-сервере.
Сначала сконфигурируйте авторизацию RT.DataVision в superset_config.py:
from flask_appbuilder.security.manager import AUTH_OAUTH
# Установите тип аутентификации на OAuth
AUTH_TYPE = AUTH_OAUTH
OAUTH_PROVIDERS = [
{ 'name':'egaSSO',
'token_key':'access_token', # Имя токена в ответе access_token_url
'icon':'fa-address-card', # Иконка для провайдера
'remote_app': {
'client_id':'myClientId', # Идентификатор клиента (идентификация приложения RT.DataVision)
'client_secret':'MySecret', # Секрет для этого идентификатора клиента (идентификация приложения RT.DataVision)
'client_kwargs':{
'scope': 'read' # Область авторизации
},
'access_token_method':'POST', # Метод HTTP для вызова access_token_url
'access_token_params':{ # Дополнительные параметры для вызовов access_token_url
'client_id':'myClientId'
},
'access_token_headers':{ # Дополнительные заголовки для вызовов access_token_url
'Authorization': 'Basic Base64EncodedClientIdAndSecret'
},
'api_base_url':'https://myAuthorizationServer/oauth2AuthorizationServer/',
'access_token_url':'https://myAuthorizationServer/oauth2AuthorizationServer/token',
'authorize_url':'https://myAuthorizationServer/oauth2AuthorizationServer/authorize'
}
}
]
# Разрешить самостоятельную регистрацию пользователей, что позволит создавать пользователей Flask из авторизованных пользователей
AUTH_USER_REGISTRATION = True
# Роль самостоятельной регистрации пользователя по умолчанию
AUTH_USER_REGISTRATION_ROLE = "Public"
Затем создайте CustomSsoSecurityManager, который расширяет SupersetSecurityManager и переопределяет oauth_user_info:
import logging
from superset.security import SupersetSecurityManager
class CustomSsoSecurityManager(SupersetSecurityManager):
def oauth_user_info(self, provider, response=None):
logging.debug("Oauth2 provider: {0}.".format(provider))
if provider == 'egaSSO':
# Например, эта строка запрашивает GET для base_url + '/' + userDetails с Bearer Authentication,
# и ожидает, что сервер авторизации проверит токен и ответит данными пользователя
me = self.appbuilder.sm.oauth_remotes[provider].get('userDetails').data
logging.debug("user_data: {0}".format(me))
return { 'name' : me['name'], 'email' : me['email'], 'id' : me['user_name'], 'username' : me['user_name'], 'first_name':'', 'last_name':''}
...
Данный файл должен находиться в том же каталоге, что и superset_config.py, с именем custom_sso_security_manager.py. Далее добавьте следующие 2 строки в superset_config.py:
from custom_sso_security_manager import CustomSsoSecurityManager
CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager
Учитывайте следующие примечания:
OAUTH_PROVIDERS = [
{ 'name':'egaSSO',
'token_key':'access_token', # Имя токена в ответе access_token_url
'icon':'fa-address-card', # Иконка для провайдера
'remote_app': {
'client_id':'myClientId', # Идентификатор клиента (идентификация приложения RT.DataVision)
'client_secret':'MySecret', # Секрет для идентификатора клиента (идентификация приложения RT.DataVision)
'server_metadata_url': 'https://myAuthorizationServer/.well-known/openid-configuration'
}
}
]
Flask-AppBuilder (FAB) поддерживает аутентификацию учётных данных пользователя на сервере LDAP.
Чтобы использовать LDAP, вам необходимо установить пакет python-ldap. Обратите внимание, что пакет python-ldap поставляется с RT.DataVision версии ≥ 1.3.1.
Подробности смотрите в документации FAB по LDAP.
AUTH_ROLES_MAPPING в Flask-AppBuilder — это справочник, который осуществляет маппинг имён групп LDAP/OAUTH на роли FAB. Он используется для назначения ролей пользователям, которые проходят аутентификацию с помощью LDAP или OAuth.
Следующий справочник AUTH_ROLES_MAPPING выполняет маппинг группы OAUTH superset_users на роли RT.DataVision Gamma и Alpha, а группу OAUTH superset_admins на роль RT.DataVision Admin:
AUTH_ROLES_MAPPING = { "superset_users": ["Gamma","Alpha"], "superset_admins": ["Admin"], }
Следующий справочник AUTH_ROLES_MAPPING выполняет маппинг DN LDAP cn=superset_users,ou=groups,dc=example,dc=com на роли RT.DataVision Gamma и Alpha, а также DN LDAP cn=superset_admins,ou=groups,dc=example,dc=com на роль RT.DataVision Admin:
AUTH_ROLES_MAPPING = { "cn=superset_users,ou=groups,dc=example,dc=com": ["Gamma","Alpha"], "cn=superset_admins,ou=groups,dc=example,dc=com": ["Admin"], }
Примечание. Для выполнения маппинга необходимо установить AUTH_LDAP_SEARCH. Для получения более подробной информации обратитесь к документации FAB Security.
Вы также можете использовать переменную конфигурации AUTH_ROLES_SYNC_AT_LOGIN, чтобы контролировать, как часто Flask-AppBuilder синхронизирует роли пользователя с группами LDAP/OAUTH. Если для AUTH_ROLES_SYNC_AT_LOGIN установлено значение True, Flask-AppBuilder будет синхронизировать роли пользователя при каждом входе в систему. Если для AUTH_ROLES_SYNC_AT_LOGIN установлено значение False, Flask-AppBuilder будет синхронизировать роли пользователя только при их первой регистрации.
FLASK_APP_MUTATOR — это функция конфигурации, которая может быть предоставлена в вашей среде, получает объект приложения и может изменять его любым способом. Например, добавьте FLASK_APP_MUTATOR в свой superset_config.py, чтобы установить срок действия cookie-файла сессии на 24 часа:
from flask import session
from flask import Flask
def make_session_permanent():
'''
Enable maxAge for the cookie 'session'
'''
session.permanent = True
# Установите максимальный срок сессии на 24 часа
PERMANENT_SESSION_LIFETIME = timedelta(hours=24)
def FLASK_APP_MUTATOR(app: Flask) -> None:
app.before_request_funcs.setdefault(None, []).append(make_session_permanent)
Фича-флаги — метод разработки программного обеспечения, который позволяет разработчикам включать и выключать компоненты/функциональности в системе без необходимости её перезапуска и без развёртывания нового кода. Фича-флаги позволяют контролировать включение или выпуск новых функций при развёртывании инстанса системы под определённые потребности пользователей. Это позволяет разработчикам тестировать новые функциональные возможности и откатывать проблемные изменения.
В RT.DataVision есть целый ряд настроек для развёртывания инстанса приложения и сохранения для него определённой конфигурации. Они находятся в файле config.py и доступны для изменений.
RT.DataVision имеет множество параметров конфигурации. Некоторые из них являются фича-флагами, а некоторые — нет. Существуют две ключевые характеристики, определяющие что является фича-флагом, а что параметром конфигурации:
В RT.DataVision фича-флаги определены в файле config.py в объекте DEFAULT_FEATURE_FLAGS. Переключение настройки через файл config.py не рекомендуется использовать.
Чтобы корректно переопределить значения фича-флагов, используйте один из способов:
1. Установите значение фича-флага в конфигурационном файле.
Файл /docker/pythonpath_dev/superset_config.py содержит объект FEATURE_FLAGS, который объединяется и перезаписывает значения в DEFAULT_FEATURE_FLAGS. Например, DEFAULT_FEATURE_FLAGS = { 'FOO': True, 'BAR': False } в config.py и FEATURE_FLAGS = { 'BAR': True, 'BAZ': True } в superset_config.py будут объединены, а значения фича-флагов будут переопределены в { 'FOO': True, 'BAR': True, 'BAZ': True }.
Для переопределения значений фича-флагов внесите в объект FEATURE_FLAGS файла superset_config.py фича-флаг и его значение подобным образом:
FEATURE_FLAGS = {
'VERSIONED_EXPORT': True,
}
2. Определите фича-флаг через соответствующую переменную окружения.
Чтобы установить фича-флаг таким способом, сначала определите соответствующую ему переменную окружения. Для этого добавьте к имени фича-флага префикс SUPERSET_FEATURE_. Например, для включения/отключения фича-флага ENABLE_TEMPLATE_PROCESSING, необходимо в командной строке установить SUPERSET_FEATURE_ENABLE_TEMPLATE_PROCESSING в качестве переменной окружения перед запуском RT.DataVision.
export SUPERSET_FEATURE_FLAGS='{"VERSIONED_EXPORT": true}'
Существует несколько основных типов фича-флагов, перечень которых представлен в файле FEATURE_FLAGS.md:
1. Разрабатываемые. Эти настройки считаются незавершёнными и их следует использовать только в средах разработки.
Настройка | Описание | Значение по умолчанию |
CLIENT_CACHE | Включает использование кэша клиента (браузера), который хранит часто используемые данные, для уменьшения количества запросов к серверу и соответственно ускорения работы RT.DataVision. | False |
DASHBOARD_CACHE | Включает кэширование результатов запросов, используемых для генерации дашбордов, чтобы ускорить их отображение при последующих посещениях. | False |
DASHBOARD_NATIVE_FILTERS_SET | Включает встроенную фильтрацию к запросам, используемым для генерации дашбордов, что позволяет пользователям фильтровать данные без необходимости написания дополнительных SQL-запросов. | False |
DISABLE_DATASET_SOURCE_EDIT | Отключает возможность редактирования датасетов, т.е. устанавливает режим “только чтение”. | False |
DRILL_TO_DETAIL | Позволяет пользователям дашбордов щёлкнуть правой кнопкой мыши на элемент визуализации и получить модальное окно, отображающее базовые данные (включая все столбцы) с фильтром, применённым к выбранной части графика (например, сектору кругового графика). | False |
ENABLE_ADVANCED_DATA_TYPES |
Включает поддержку расширенных типов данных в запросах. Т.е. пользователи могут использовать сложные типы данных, такие как JSON, ARRAY и HSTORE, в своих запросах. Это позволяет пользователям работать с более богатыми и структурированными данными, что может быть полезно при анализе и визуализации данных. Однако стоит учесть, что поддержка этих типов данных зависит от конкретной подключённой БД. Например, PostgreSQL поддерживает все три упомянутых типа данных, в то время как MySQL поддерживает только ARRAY. |
False |
ENABLE_EXPLORE_JSON_CSRF_PROTECTION |
Принудительно включает защиту CSRF для:
|
False |
ENABLE_TEMPLATE_REMOVE_FILTERS | Включает поддержку удаления фильтров из шаблонов. Это позволяет пользователям настраивать и изменять фильтры в соответствии с их потребностями. Используется совместно с ENABLE_TEMPLATE_PROCESSING. | False |
HORIZONTAL_FILTER_BAR | Позволяет авторам дашбордов устанавливать ориентацию панели фильтров в верхней части макета (при отключенном флаге панель фильтрации располагается на макете слева). | False |
KV_STORE | Включает использование хранилища key-value для хранения данных. | False |
PRESTO_EXPAND_DATA | При включении вложенные типы в Presto будут расширены до дополнительных столбцов и/или массивов. Функция экспериментальная и работает не со всеми вложенными типами. | False |
REMOVE_SLICE_LEVEL_LABEL_COLORS | Используется для удаления атрибутов, связанных с цветом, из данных формы графика, чтобы уменьшить полезную нагрузку, когда график загружался как часть инициализации дашборда. Эти атрибуты больше не загружаются, что делает эту оптимизацию устаревшей. | False |
SHARE_QUERIES_VIA_KV_STORE | Активирует возможность совместного использования запросов в Лаборатории SQL без необходимости их сохранения. | False |
TAGGING_SYSTEM | Включает недавно добавленную в пользовательский интерфейс функцию добавления тегов к диаграммам, информационным панелям и сохраненным запросам. | False |
2. Тестируемые.Разработка этих настроек завершена, в настоящее время проходит тестирование. Их можно использовать, но возможны ошибки.
Настройка | Описание | Значение по умолчанию |
ALERT_REPORTS | В сочетании со соответствующими настройками в файле config.py включает возможность отправки дашбордов и графиков по электронной почте на основе событийных или хронологических триггеров (добавляет раздел Оповещения и отчеты). | False |
ALLOW_FULL_CSV_EXPORT | Активирует возможность полного экспорта данных в формате CSV для дашбордов (добавляет кнопку Полная выгрузка в CSV). Полный экспорт является условным, т.к. в конфигурации есть дополнительный параметр, ограничивающий количество выгружаемых строк. По умолчанию отключён из-за возможных проблем с памятью/производительностью сервера. | False |
CACHE_IMPERSONATION | Включает кэширование для каждого ключа Impersonation (например, имени пользователя) в источнике данных, где включено “олицетворение” пользователя. | False |
CONFIRM_DASHBOARD_DIFF |
Включает запрос на подтверждение обновления дашборда у пользователей, если системой были обнаружены различия в структуре запроса или параметрах визуализации. Этот флаг помогает предотвратить случайное изменение или удаление дашбордов, а также обеспечивает дополнительный уровень контроля над процессом обновления. Если пользователь уверен в изменениях и не хочет видеть запрос на подтверждение, он может отключить этот флаг. |
|
DASHBOARD_EDIT_CHART_IN_NEW_TAB | Открывает форму редактирования графика на новой вкладке, когда пользователь нажимает кнопку Редактировать график на любом дашборде. Редактирование графика на новой вкладке означает, что пользователю не нужно выходить из дашборда, чтобы редактировать график, при условии, что дашборд не обновляется автоматически при сохранении графика. | False |
DASHBOARD_FILTERS_EXPERIMENTAL | Включает дополнительные возможности фильтрации дашбордов, которые могут быть нестабильными или требующими дополнительной настройки. Экспериментальные функции фильтрации могут предоставлять более гибкие и мощные инструменты для работы с данными, но они также могут быть плохо протестированы или иметь известные проблемы. Включение этого флага может быть полезным для пользователей, которые хотят опробовать новые функции или решить специфические задачи фильтрации, но требует осторожности и возможно дополнительной поддержки со стороны разработчиков системы. | False |
DASHBOARD_NATIVE_FILTERS | Добавляет панель фильтрации на дашборды (нативную фильтрацию). Подробнее о фильтрации см. п. 7 Фильтрация дашбордов в Инструкции пользователя. | True |
DYNAMIC_PLUGINS | Новый способ добавления плагинов визуализации с помощью их выбора из удалённого файла JavaScript (вероятно появится в новых версиях RT.DataVision). | False |
ENABLE_FILTER_BOX_MIGRATION | Включает автоматическую миграцию фильтра filter-box дашбордов (реализация фильтрации дашбордов, использовавшаяся до нативной фильтрации). Когда этот флаг включен, система автоматически переносит фильтры из старого filter-box в новый, что позволяет пользователям обновить свои дашборды без потери настроенных фильтров. Этот процесс миграции может быть полезен при обновлении или переходе на новую версию системы, чтобы обеспечить непрерывность работы с фильтрами. Однако, если в процессе миграции возникают проблемы или требуется ручное управление фильтрами, этот флаг можно отключить. | False |
ENABLE_JAVASCRIPT_CONTROLS | Разрешает использование Javascript-контролов. Позволяет разработчикам настраивать определённые графики (например, геопространственные), добавляя возможность написания своих скриптов. Но открывает уязвимость безопасности XSS. | False |
GENERIC_CHART_AXES | Включает поддержку возможности менять ориентацию отображения гистограммы (вертикально\горизонтально). | True |
GLOBAL_ASYNC_QUERIES |
Повышает производительность дашборда за счёт:
|
False |
RLS_IN_SQLLAB | Применяет правила RLS к запросам, выполняемым Лабораторией SQL, чтобы пользователи не имели возможности запрашивать те данные, к которым у них не должно быть доступа в соответствии с правилами RLS, соблюдаемыми в других компонентах RT.DataVision. | False |
SSH_TUNNELING | Включает SSH-туннель между RT.DataVision и хранилищем данных, для безопасного подключения к базам данных, которые могут быть недоступны напрямую из-за политик/конфигураций безопасности. Подробности см. в п. 9 SSH-туннелирование. | False |
USE_ANALAGOUS_COLORS | Генерирует дополнительные аналогичные цвета в цветовой палитре, препятствующие дублированию цветов на дашбордах. | False |
UX_BETA | Включает доступ к экспериментальному интерфейсу пользователя (UX) в бета-версии, т.е. к новым функциям и улучшениям пользовательского интерфейса, которые находятся в стадии разработки и тестирования. | False |
VERSIONED_EXPORT | Включает поддержку экспорта\импорта данных (дашбордов, источников, пр.). Если установлено True, то ожидается ZIP-формат; если False или флаг вообще не определён, то YAML. | True |
3. Стабильные. После успешного тестирования настройка перемещается в категорию Стабильные. Такие настройки могут быть включены по умолчанию.
Настройка | Описание | Значение по умолчанию |
ALERTS_ATTACH_REPORTS | Отправка скриншотов по электронной почте для Оповещения и отчеты вместе с отчётом. | True |
ALLOW_ADHOC_SUBQUERY | Использование подзапросов при написании SQL-запроса для построения графиков (вместо простого перетаскивания метрик\измерений). К этим подзапросам применяются правила RLS, поэтому функцию можно безопасно включать. | False |
DASHBOARD_CROSS_FILTERS | Включает кросс-фильтрацию дашборда. Подробнее о кросс-фильтрации см. п. 7.10 Кросс-фильтрация в Инструкции пользователя. | False |
DASHBOARD_RBAC | Если активировать флаг, то можно управлять списком ролей, которые будут иметь доступ к дашбордам. Такой доступ к дашборду неявно предоставляет доступ на чтение к графикам, размещённым на дашборде, и ко всем связанным датасетам. | False |
DISABLE_LEGACY_DATASOURCE_EDITOR | Скрывает устаревший редактор источников данных (если флаг активен). | False |
DRUID_JOINS | При использовании последней версии БД Druid, поддерживающей JOIN, включите флаг. | False |
EMBEDDABLE_CHARTS | Позволяет встраивать отдельный график с использованием iFrame. График и его содержимое являются “статичными” и не предоставляют доступ к источникам данных и не требуют аутентификации. | True |
EMBEDDED_SUPERSET | Позволяет создавать дашборды с помощью пакета @superset-ui/embedded-sdk в npm. | False |
ENABLE_DND_WITH_CLICK_UX | При построении графика делает кликабельными поля, служащие для размещения значений при перетаскивании, т.е. при клике на поле отображается модальное окно для выбора значений вручную из списка. | True |
ENABLE_EXPLORE_DRAG_AND_DROP | Разрешает перетаскивание элементов для определения полей Запрос при построении графика. | True |
ENABLE_TEMPLATE_PROCESSING | Активирует поддержку шаблонов Jinja (добавляет кнопку Параметры в Лабораторию SQL). | False |
ENFORCE_DB_ENCRYPTION_UI | Шифрование всех подключений к базе данных перед сохранением в метахранилище RT.DataVision. | False |
ESCAPE_MARKDOWN_HTML | Экранирует HTML-код (вместо его рендеринга) в компонентах Markdown. | False |
LISTVIEWS_DEFAULT_CARD_VIEW | Для списковых представлений (дашбордов, графиков и т.д.) регулирует представление по умолчанию с таблицы/списка на макет на основе карточек по умолчанию. | False |
SCHEDULED_QUERIES | Разрешает пользователям устанавливать расписание для запросов в Лаборатории SQL (для поддержки данных запроса в актуальном состоянии). | – |
SQLLAB_BACKEND_PERSISTENCE | При работе с Лабораторией SQL сохраняет в бэкенд историю запросов пользователя, связанных только с текущим редактором. | True |
SQL_VALIDATORS_BY_ENGINE | Включает функцию валидации запросов в реальном времени. Подробнее см. в последних абзацах п. 8.1 Шаблоны Jinja в Инструкции администратора. | – |
THUMBNAILS | Включает поддержку создания миниатюр. Требуются воркеры Celery и настройка соответствующих параметров THUMBNAILS_ в config.py. Подробнее см. п. 3.5 Кэширование миниатюр в Инструкции администратора. | True |
4. Устаревшие. Для этих настроек в настоящее время по умолчанию установлено значение True, и они могут быть удалены в будущих версиях. В текущей версии можно отключить их, установив для своей конфигурации значение False.
Настройка | Описание | Значение по умолчанию |
ALLOW_DASHBOARD_DOMAIN_SHARDING | Разрешает дашборду использовать поддомены для отправки запроса графика. Также понадобятся ENABLE_CORS и SUPERSET_WEB SERVER_DOMAINS для списка доменов. | True |
DISPLAY_MARKDOWN_HTML | Разрешает отображение HTML-тегов в компонентах Markdown. | True |
FORCE_DATABASE_CONNECTIONS_SSL | Функция устарела. | False |
Чтобы настроить CORS (совместное использование ресурсов разных источников, Cross-Origin Resource Sharing), необходимо установить следующую зависимость:
pip install rt.datavision[cors]
Для настройки CORS можно указать следующие ключи в superset_config.py:
Chrome позволяет одновременно открывать до 6 подключений к одному домену. Когда на дашборде более 6 графиков, запросы на выборку стоят в очереди продолжительное время и ждут следующего доступного сокета. Функция шардинга домена может быть включена только в конфигурации (по умолчанию RT.DataVision не разрешает междоменные запросы).
Добавьте следующий параметр в файл superset_config.py:
Создайте шарды домена в качестве поддоменов вашего основного домена, чтобы авторизация работала корректно на новых доменах. Например:
SUPERSET_WEBSERVER_DOMAINS=['superset-1.mydomain.com','superset-2.mydomain.com','superset-3.mydomain.com','superset-4.mydomain.com']
Или добавьте следующий параметр в файл superset_config.py, если шарды домена не являются поддоменами основного домена:
SESSION_COOKIE_DOMAIN = '.mydomain.com'
RT.DataVision позволяет добавлять middleware-компоненты (т.е. промежуточное ПО). Чтобы добавить middleware-компонент, обновите ключ ADDITIONAL_MIDDLEWARE в файле superset_config.py. ADDITIONAL_MIDDLEWARE должен быть списком ваших дополнительных классов middleware-компонентов.
Например, чтобы использовать AUTH_REMOTE_USER из-за прокси-сервера, такого как Nginx, вам нужно добавить простой класс middleware-компонента, чтобы добавить значение HTTP_X_PROXY_REMOTE_USER (или любой другой кастомный заголовок из прокси) в переменную среды REMOTE_USER Gunicorn.
RT.DataVision использует Flask-Caching для кэширования. Flask-Caching поддерживает различные бэкенды кэширования, включая Redis (рекомендуется), Memcached, SimpleCache (в памяти) или локальную файловую систему. Также поддерживаются кастомные бэкенды кэширования.
Кэширование можно настроить, предоставив справочники в superset_config.py, соответствующие спецификациям конфигурации Flask-Caching.
Таким образом можно настроить следующие конфигурации кэша:
Например, чтобы настроить кэш состояний фильтра с помощью Redis:
FILTER_STATE_CACHE_CONFIG = {
'CACHE_TYPE': 'RedisCache',
'CACHE_DEFAULT_TIMEOUT': 86400,
'CACHE_KEY_PREFIX': 'superset_filter_cache',
'CACHE_REDIS_URL': 'redis://localhost:6379/0'
}
Чтобы использовать выделенные хранилища кэша, необходимо установить дополнительные библиотеки Python:
Эти библиотеки можно установить с помощью pip.
Обратите внимание, что требуется определённая форма кэширования Состояний фильтров (Filter State) и Исследовать (Explore). Если какой-либо из этих кэшей не определён, RT.DataVision возвращается к использованию встроенного кэша, который хранит данные в БД метаданных. Рекомендуется использовать выделенный кэш, но встроенный кэш также можно использовать для кэширования других данных.
Например, чтобы использовать встроенный кэш для хранения данных графиков, используйте следующую конфигурацию:
DATA_CACHE_CONFIG = {
"CACHE_TYPE": "SupersetMetastoreCache",
"CACHE_KEY_PREFIX": "superset_results", # убедитесь, что эта строка уникальна, чтобы избежать коллизий
"CACHE_DEFAULT_TIMEOUT": 86400, # 60 секунд * 60 минут * 24 часа
}
Таймаут кэша для графиков может быть переопределён настройками отдельного графика, датасета или базы данных. Каждая из этих конфигураций будет проверена по порядку, прежде чем вернуться к значению по умолчанию, определённому в DATA_CACHE_CONFIG.
Обратите внимание, что, установив для таймаута кэша значение -1, кэширование данных графиков можно отключить либо для каждого графика, датасета или базы данных, либо по умолчанию, если оно установлено в DATA_CACHE_CONFIG.
Кэширование результатов запросов Лаборатории SQL (SQL Lab) используется, когда асинхронные запросы включены и настраиваются с помощью RESULTS_BACKEND.
Обратите внимание, что эта конфигурация не использует для своей конфигурации справочник flask-caching, а вместо этого требует объект cachelib.
Подробности см. в п. 6 Асинхронные запросы через Celery.
Кэширование миниатюр — дополнительная функция, которую можно включить, активировав соответствующий флаг в конфигурации:
FEATURE_FLAGS = {
"THUMBNAILS": True,
"THUMBNAILS_SQLA_LISTENERS": True,
}
По умолчанию миниатюры отображаются для каждого пользователя, а для анонимных пользователей они возвращаются к пользователю Selenium. Чтобы всегда отображать миниатюры от имени фиксированного пользователя (в данном примере admin), используйте следующую конфигурацию:
from superset.tasks.types import ExecutorType
THUMBNAIL_SELENIUM_USER = "admin"
THUMBNAIL_EXECUTE_AS = [ExecutorType.SELENIUM]
Для этой функции вам понадобится система кэширования и воркеры Celery. Все миниатюры хранятся в кэше и обрабатываются воркерами асинхронно.
Пример конфигурации, в которой изображения хранятся на S3, может быть следующим:
from flask import Flask
from s3cache.s3cache import S3Cache
...
class CeleryConfig(object):
broker_url = "redis://localhost:6379/0"
imports = (
"superset.sql_lab",
"superset.tasks.thumbnails",
)
result_backend = "redis://localhost:6379/0"
worker_prefetch_multiplier = 10
task_acks_late = True
CELERY_CONFIG = CeleryConfig
def init_thumbnail_cache(app: Flask) -> S3Cache:
return S3Cache("bucket_name", 'thumbs_cache/')
THUMBNAIL_CACHE_CONFIG = init_thumbnail_cache
# Асинхронная selenium-задача миниатюры будет использовать следующего пользователя
THUMBNAIL_SELENIUM_USER = "Admin"
При использовании приведённого выше примера ключи кэша для дашбордов будут иметь вид superset_thumb__dashboard__{ID}. Вы можете переопределить базовый URL-адрес для selenium следующим образом:
WEBDRIVER_BASEURL = "https://superset.company.com"
Дополнительную конфигурацию веб-диска Selenium можно установить с помощью WEBDRIVER_CONFIGURATION. Вы можете имплементировать кастомную функцию для selenium-аутентификации. Функция по умолчанию использует cookie сессии flask-login. Ниже приведён пример сигнатуры кастомной функции:
def auth_driver(driver: WebDriver, user: "User") -> WebDriver:
pass
И для конфигурации:
WEBDRIVER_AUTH_FUNC = auth_driver
RT.DataVision по умолчанию логирует события специальных действий в своей внутренней базе данных (DBEventLogger). Доступ к этим логам можно получить в пользовательском интерфейсе, выбрав Безопасность (Security) > Журнал действий (Action Log). Вы можете свободно кастомизировать эти логи, имплементируя свой собственный класс лога событий. Когда кастомный класс лога включён, DBEventLogger отключается, и логи перестают заполняться в представлении логов в интерфейсе. Чтобы архивировать все логи, кастомный класс логов должен расширять встроенный класс логов DBEventLogger.
Ниже приведён пример простого класса JSON-to-stdout:
def log(self, user_id, action, *args, **kwargs):
records = kwargs.get('records', list())
dashboard_id = kwargs.get('dashboard_id')
slice_id = kwargs.get('slice_id')
duration_ms = kwargs.get('duration_ms')
referrer = kwargs.get('referrer')
for record in records:
log = dict(
action=action,
json=record,
dashboard_id=dashboard_id,
slice_id=slice_id,
duration_ms=duration_ms,
referrer=referrer,
user_id=user_id
)
print(json.dumps(log))
После внесения изменений обновите конфигурацию, чтобы применить инстанс логгера, который вы хотите использовать:
EVENT_LOGGER = JSONStdOutEventLogger()
При желании RT.DataVision можно настроить для логирования событий в StatsD. Большинство обращений к эндпоинтам, а также ключевые события, такие как начало и завершение запросов, регистрируются в Лаборатории SQL (SQL Lab).
Чтобы настроить логирование StatsD, необходимо сконфигурировать логгер в файле superset_config.py.
from superset.stats_logger import StatsdStatsLogger
STATS_LOGGER = StatsdStatsLogger(host='localhost', port=8125, prefix='superset')
Обратите внимание, что вы также можете имплементировать свой собственный логгер, производный от superset.stats_logger.BaseStatsLogger.
Чтобы обновить RT.DataVision, развёрнутый в docker-контейнере, выполните:
1. Сначала обязательно завершите работающие контейнеры в Docker Compose:
docker compose down
2. Затем обновите папку, реплицирующую репозиторий superset, через git:
cd superset/
git pull origin master
3. Затем перезапустите контейнеры, и все изменённые docker-образы будут автоматически удалены:
docker compose up
Проверка версии DataVision
/usr/local/bin/python3.9 -m pip list | grep datavision
Создадим резервную копию БД
sudo -u postgres pg_dump -U postgres datavision2 > /root/datavision2-2024-10-22-220ver.sql
Чтобы обновить RT.DataVision в собственной установке, выполните следующие команды:
pip install apache-superset --upgrade
export FLASK_APP=/usr/local/lib/python3.9/site-packages/superset
export SUPERSET_CONFIG_PATH=/etc/datavision/conf/superset_config.py
superset db upgrade
superset init
Обычно при обновлении RT.DataVision дашборды и графики не удаляются, но всё-таки рекомендуется сделать резервную копию БД метаданных перед обновлением. Перед обновлением производственной среды рекомендуется выполнить обновление в промежуточной среде и, наконец, обновить производственную среду во время непикового использования.
Для больших аналитических баз характерен запуск запросов, которые выполняются в течение продолжительного количества минут или даже часов. Чтобы включить поддержку длительных запросов, которые выполняются за пределами типичного времени ожидания веб-запроса (30-60 секунд), необходимо сконфигурировать асинхронный бэкенд для RT.DataVision, который состоит из:
Для конфигурирования Celery необходимо определить CELERY_CONFIG в файле superset_config.py. Процессы веб-сервера и воркеров должны иметь одинаковую конфигурацию.
class CeleryConfig(object):
broker_url = "redis://localhost:6379/0"
imports = (
"superset.sql_lab",
"superset.tasks.scheduler",
)
result_backend = "redis://localhost:6379/0"
worker_prefetch_multiplier = 10
task_acks_late = True
task_annotations = {
"sql_lab.get_sql_results": {
"rate_limit": "100/s",
},
}
CELERY_CONFIG = CeleryConfig
Чтобы запустить воркера Celery для использования конфигурации, выполните следующую команду:
celery --app=superset.tasks.celery_app:app worker --pool=prefork -O fair -c 4
Чтобы запустить джоб, который планирует запуск периодических фоновых джобов, выполните следующую команду:
celery --app=superset.tasks.celery_app:app beat
Чтобы настроить бэкенд результатов, вам нужно передать инстанс производной от flask_caching.backends.base в ключ конфигурации RESULTS_BACKEND в вашем superset_config.py. Вы можете использовать Memcached, Redis, S3, память или файловую систему (в рамках однонодового развёртывания или в целях тестирования) или написать свой собственный интерфейс кэширования. superset_config.py может выглядеть примерно так:
# Для S3
from s3cache.s3cache import S3Cache
S3_CACHE_BUCKET = 'foobar-superset'
S3_CACHE_KEY_PREFIX = 'sql_lab_result'
RESULTS_BACKEND = S3Cache(S3_CACHE_BUCKET, S3_CACHE_KEY_PREFIX)
# Для Redis
from flask_caching.backends.rediscache import RedisCache
RESULTS_BACKEND = RedisCache(
host='localhost', port=6379, key_prefix='superset_results')
Для повышения производительности MessagePack или PyArrow теперь используются для сериализации результатов. Это можно отключить, установив RESULTS_BACKEND_USE_MSGPACK = False в superset_config.py, если возникнут какие-либо проблемы. При обновлении существующей среды очистите хранилище кэша от существующих результатов.
Учитывайте следующие примечания:
Flower является веб-инструментом для мониторинга кластера Celery. Вы можете установить Flower из pip:
pip install flower
Чтобы запустить Flower, выполните:
celery --app=superset.tasks.celery_app:app flower
Функциональность Оповещения и отчеты (Alerts & Reports) в RT.DataVision позволяет пользователям легко создавать уведомления, инициируемые событиями (т.е. оповещения) или запланированные уведомления (т.е. рассылка).
Рассылка содержит снапшот дашборда или графика вместе со ссылкой, которая позволяет получателям перейти непосредственно к RT.DataVision для дальнейшего изучения визуализации или дашборда. Оповещения предоставляют настраиваемую ссылку, которая облегчает просмотр и дальнейшее изучение.
На панели инструментов перейдите в раздел Настройки (Settings) и выберите пункт Оповещения и Отчеты (Alerts & Reports).
Для открытия формы Оповещения (Alerts) перейдите в Настройки (Settings) > Оповещения и отчеты (Alerts & Reports) > вкладка Оповещения (Alerts). Вкладка Оповещения (Alerts) отображается по умолчанию при переходе в раздел Оповещения и отчеты (Alerts & Reports).
Для открытия формы Отчеты (Reports) перейдите в Настройки (Settings) > Оповещения и отчеты (Alerts & Reports) > вкладка Отчеты (Reports).
В левом верхнем углу форм Оповещения (Alerts) и Отчеты (Reports) находится информация о Последнем обновлении (Last Updated) данных на странице. Для обновления отображаемых данных воспользуйтесь кнопкой обновления на форме.
На вкладках Оповещения (Alerts) и Отчеты (Reports) располагаются фильтры и функции поиска, предназначенные для оперативного поиска необходимых оповещений или рассылок по заданным параметрам.
Доступные фильтры включают следующее:
Для поиска записей воспользуйтесь полем Поиск (Search):
Информация на вкладках Оповещения (Alerts) и Отчеты (Reports) представляет собой таблицы, которые содержат следующие заголовки столбцов:
В данном разделе, в качестве примера, будет описан процесс создания оповещения, которое срабатывает при неудачной попытке входа пользователя в систему в течение последних 24 часов. Для создания такого оповещения:
1. Перейдите в Настройки (Settings) > Оповещения и Отчеты (Alerts & Reports) > вкладка Оповещения (Alerts).
2. Нажмите кнопку + Оповещение (+ Alert). Откроется окно создания нового оповещения.
3. Укажите основные сведения об оповещении в следующих полях:
4. Укажите Условия оповещения (Alert condition) для определения события, которое запускает активацию и уведомление о оповещении. Для этого заполните следующие поля:
5. Укажите Расписание условия оповещения (Alert Condition Schedule)* для определения частоты, с которой данные проверяются на предмет выполнения заданного условия. Для этого:
6. Укажите Настройки расписания (Schedule Settings) в следующих полях:
7. Укажите Содержимое сообщения (Message Content)*. Для этого:
8. Укажите Метод уведомления (Notification method)*. Вы можете указать несколько методов. Для этого:
9. Нажмите кнопку Добавить (Add) для завершения создания оповещения. После создания оповещение отобразится в общей таблице оповещений.
В данном разделе, в качестве примера, будет описан процесс создания отчета со статистикой по пользователям, которая будет отправляться по электронной почте каждый день в 15:00. Для создания такого отчета:
1. Перейдите в Настройки (Settings) > Оповещения и отчеты (Alerts & Reports) > вкладка Отчеты (Reports).
2. Нажмите кнопку + Рассылка (+ Report). Откроется окно Добавить отчет (Add Report).
2. Укажите основные сведения о рассылке в следующих полях:
2. Настройте Расписание отчета (Report Schedule)* для определения того, как часто рассылка будет отправляться на определённый канал уведомлений. Для этого:
3. Укажите Настройки расписания (Schedule Settings) в следующих полях:
4. Укажите Содержимое сообщения (Message Content)*. Для этого:
5. Укажите Метод уведомления (Notification Method)*. Вы можете указать несколько методов. Для этого:
9. Нажмите кнопку Добавить (Add) для завершения создания отчета. После создания отчет отобразится в общей таблице отчетов.
Интерфейс дашборда или графика также позволяет запланировать рассылку отчета. Для этого:
1. Перейдите в разделы Дашборы или Графики и нажмите на название необходимого графика или дашборда. Откроется форма выбранного элемента.
2. Нажмите кнопку … и выберите пункт Настройте отчет по электронной почте (Set up an email report). Откроется окно Запланировать новый отчет по электронной почте (Schedule a new email report).
3. В открывшемся окне Запланировать новый отчет по электронной почте (Schedule a new email report) настройте рассылку:
Для проверки результата перейдите в Настройки (Settings ) > Оповещения и Отчеты (Alerts & Reports) > вкладка Отчеты (Reports) и убедитесь в наличии созданной рассылки.
Лог выполнения — это список всех отдельных исполнений оповещения или рассылки. Для просмотра журнала выполнения:
1. Перейдите в Настройки (Settings ) > Оповещения и Отчеты (Alerts & Reports) на вкладку Оповещения (Alerts) или Отчеты (Reports).
2. Найдите необходимое оповещение или отчет и нажмите соответствующую ему кнопку Журнал выполнения (Execution Log), расположенную в столбце Действие (Activity). Откроется лог выполнения для выбранного оповещения или рассылки.
Описание столбцов в таблице лога:
Определения значков:
Описание сообщений лога представлено ниже:
Все остальные сообщения должны быть ошибками из-за недопустимых SQL-запросов.
Если оповещение или рассылка не могут быть выполнены, владелец оповещения или рассылки получит уведомление по электронной почте (независимо от исходного метода уведомления) об ошибке. Получатели оповещений или рассылок не будут уведомлены об ошибках во время выполнения. Затем владельцы могут использовать логи для проверки сообщения об ошибке на предмет устранения.
Для редактирования оповещения или отчета:
1. Перейдите в Настройки (Settings ) > Оповещения и Отчеты (Alerts & Reports) на вкладку Оповещения (Alerts) или Отчеты (Reports).
2. Найдите необходимое оповещение или отчет и нажмите соответствующую ему кнопку Редактировать (Edit), расположенную в столбце Действие (Activity). Откроется окно редактирования выбранного оповещения или отчета.
3. Внесите необходимые изменения и нажмите кнопку Сохранить (Save).
Для удаления оповещения или отчета:
1. Перейдите в Настройки (Settings ) > Оповещения и Отчеты (Alerts & Reports) на вкладку Оповещения (Alerts) или Отчеты (Reports).
2. Найдите необходимое оповещение или отчет и нажмите соответствующую ему кнопку Удалить (Delete), расположенную в столбце Действие (Activity). Откроется окно удаления выбранного оповещения или отчета.
3. Для подтверждения действия введите УДАЛИТЬ и нажмите кнопку Удалить (Delete).
Для массового удаления оповещений или отчетов:
1. Перейдите в Настройки (Settings ) > Оповещения и Отчеты (Alerts & Reports) на вкладку Оповещения (Alerts) или Отчеты (Reports).
2. Нажмите кнопку Групповой выбор (Bulk Select).
3. Отметьте флажками все записи, требующие удаления, и нажмите кнопку Удалить (Delete). Откроется окно подтверждения удаления.
4. Для подтверждения действия введите УДАЛИТЬ и нажмите кнопку Удалить (Delete).
Для корректной работы рассылки при использовании протокола HTTPS необходимо чтобы были выполнены следующие настройки в конфигурационном файле superset_config.py:
# В следующих переменных указывайте адрес с использованием протокола HTTPS и в формате FQDN
# Доменное имя должно быть прописано в сертификате безопасности
# Вся цепочка сертификатов должна быть размещена в хранилище сертификатов на сервере приложения
# Это ссылка для внутреннего использования
WEBDRIVER_BASEURL = "https://rtdatavision.mydomain.ru"
# Это ссылка, отправленная получателю
WEBDRIVER_BASEURL_USER_FRIENDLY = "https://rtdatavision.mydomain.ru"
# Конфигурация электронной почты
SMTP_HOST = "smtp.sendgrid.net" # замените на ваш хост
SMTP_STARTTLS = False
SMTP_SSL_SERVER_AUTH = False # если вы используете SMTP-сервер с валидным сертификатом
SMTP_SSL = False
SMTPUSER = "ваш_пользователь" # используйте пустую строку "" при использовании неаутентифицированного SMTP-сервера
SMTP_PORT = 25 # ваш порт, например 587
SMTP_PASSWORD = "ваш_пароль" # используйте пустую строку "" при использовании неаутентифицированного SMTP-сервера
SMTP_MAIL_FROM = "noreply@youremail.com"
SCREENSHOT_LOCATE_WAIT = 100
SCREENSHOT_LOAD_WAIT = 600
# Конфигурация веб-драйвера
# Если вы используете Firefox, вы можете придерживаться значений по умолчанию
# Если вы используете Chrome, добавьте следующие WEBDRIVER_TYPE и WEBDRIVER_OPTION_ARGS
WEBDRIVER_TYPE = "chrome"
WEBDRIVER_OPTION_ARGS = [
"--force-device-scale-factor=2.0",
"--high-dpi-support=2.0",
"--headless",
"--disable-gpu",
"--disable-dev-shm-usage",
"--no-sandbox",
"--disable-setuid-sandbox",
"--disable-extensions",
]
Лаборатория SQL (SQL Lab) и Исследовать (Explore) поддерживает шаблоны Jinja в запросах. Чтобы включить шаблоны, необходимо включить флаг функции ENABLE_TEMPLATE_PROCESSING в superset_config.py. Когда шаблоны включены, python-код можно встраивать в виртуальные датасеты и в Custom SQL в фильтрах и элементах управления метриками в Исследовать (Explore). По умолчанию в контексте Jinja доступны следующие переменные:
Например, чтобы добавить диапазон времени в виртуальный датасет, вы можете написать следующее:
SELECT *
FROM tbl
WHERE dttm_col > '{{ from_dttm }}' and dttm_col < '{{ to_dttm }}'
Вы также можете использовать логику Jinja, чтобы сделать ваш запрос устойчивым к очистке фильтра временного диапазона:
SELECT *
FROM tbl
WHERE (
{% if from_dttm is not none %}
dttm_col > '{{ from_dttm }}' AND
{% endif %}
{% if to_dttm is not none %}
dttm_col < '{{ to_dttm }}' AND
{% endif %}
true
)
Обратите внимание, как параметры Jinja вызываются в двойных скобках в запросе и без в логических блоках.
Чтобы добавить кастомную функциональность в контекст Jinja, вам необходимо перегрузить контекст Jinja по умолчанию в вашей среде, определив JINJA_CONTEXT_ADDONS в вашей конфигурации RT.DataVision (superset_config.py). Объекты, на которые есть ссылки в справочнике, доступны для использования пользователями там, где доступен контекст Jinja.
JINJA_CONTEXT_ADDONS = {
'my_crazy_macro': lambda x: x*2,
}
Значения по умолчанию для шаблонов Jinja можно указать в меню Параметры (Parameters) пользовательского интерфейса Лаборатории SQL (SQL Lab). В пользовательском интерфейсе вы можете назначить набор параметров в формате JSON.
{
"my_table": "foo"
}
Параметры становятся доступными в вашем SQL (пример: SELECT * FROM {{ my_table }}) с помощью синтаксиса шаблонов Jinja. Параметры шаблона Лаборатории SQL (SQL Lab) хранятся вместе с датасетом как TEMPLATE PARAMETERS.
Существует специальный параметр _filters, который можно использовать для проверки фильтров, используемых в шаблоне Jinja.
{
"_filters": [
{
"col": "action_type",
"op": "IN",
"val": ["sell", "buy"]
}
]
}
SELECT action, count(*) as times
FROM logs
WHERE action in {{ filter_values('action_type'))|where_in }}
GROUP BY action
Примечание. _filters не сохраняется вместе с датасетом. Он используется только в пользовательском интерфейсе Лаборатории SQL (SQL Lab).
Помимо шаблонов Jinja по умолчанию, Лаборатория SQL (SQL Lab) также поддерживает самоопределяемый процессор шаблонов, устанавливая CUSTOM_TEMPLATE_PROCESSORS в вашей конфигурации RT.DataVision. Значения в этом справочнике переопределяют процессоры шаблонов Jinja по умолчанию для указанного движка базы данных. В приведённом ниже примере настраивается кастомный процессор шаблонов presto, который имплементирует собственную логику обработки шаблона макроса с парсингом регулярных выражений (regex). Он использует макрос стиля $ вместо стиля {{ }} в шаблонах Jinja.
Настроив его с помощью CUSTOM_TEMPLATE_PROCESSORS, шаблон SQL в базе данных presto обрабатывается кастомным, а не шаблоном по умолчанию.
def DATE(
ts: datetime, day_offset: SupportsInt = 0, hour_offset: SupportsInt = 0
) -> str:
"""Текущий день в виде строки."""
day_offset, hour_offset = int(day_offset), int(hour_offset)
offset_day = (ts + timedelta(days=day_offset, hours=hour_offset)).date()
return str(offset_day)
class CustomPrestoTemplateProcessor(PrestoTemplateProcessor):
"""Кастомный процессор шаблонов presto."""
engine = "presto"
def process_template(self, sql: str, **kwargs) -> str:
"""Обрабатывает шаблон sql с макросом стиля $, используя регулярное выражение."""
# Добавляет кастомные функции макросов.
macros = {
"DATE": partial(DATE, datetime.utcnow())
} # type: Dict[str, Any]
# Обновляет с помощью макросов, определённых в context и kwargs.
macros.update(self.context)
macros.update(kwargs)
def replacer(match):
"""Расширяет макросы в стиле $ соответствующими вызовами функций."""
macro_name, args_str = match.groups()
args = [a.strip() for a in args_str.split(",")]
if args == [""]:
args = []
f = macros[macro_name[1:]]
return f(*args)
macro_names = ["$" + name for name in macros.keys()]
pattern = r"(%s)\s*\(([^()]*)\)" % "|".join(map(re.escape, macro_names))
return re.sub(pattern, replacer, sql)
CUSTOM_TEMPLATE_PROCESSORS = {
CustomPrestoTemplateProcessor.engine: CustomPrestoTemplateProcessor
}
Лаборатория SQL (SQL Lab) также включает функцию валидации запросов в реальном времени с плагинными бэкендами. Вы можете сконфигурировать, какая имплементация валидации с каким движком базы данных используется, добавив блок, подобный следующему, в файл конфигурации:
FEATURE_FLAGS = {
'SQL_VALIDATORS_BY_ENGINE': {
'presto': 'PrestoDBSQLValidator',
}
}
Доступные валидаторы можно найти в sql_validators.
В этом разделе рассматриваются предопределённые макросы Jinja в RT.DataVision.
Макрос {{ current_username() }} возвращает имя пользователя, который авторизовался в системе в данный момент.
Если в конфигурации RT.DataVision включено кэширование, то по умолчанию значение username будет использоваться RT.DataVision при вычислении ключа кэша. Ключ кэша — это уникальный идентификатор, который определяет, будет ли осуществляться кэш-попадание в будущем, и RT.DataVision сможет получать кэшированные данные.
Вы можете отключить добавление значения username в расчёт ключа кэша, добавив следующий параметр в свой код Jinja:
{{ current_username(add_to_cache_keys=False) }}
Макрос {{ current_user_id() }} возвращает user_id текущего пользователя, который авторизовался в системе.
Если в вашей конфигурации RT.DataVision включено кэширование, то по умолчанию значение user_id будет использоваться RT.DataVision при вычислении ключа кэша. Ключ кэша — это уникальный идентификатор, который определяет, будет ли осуществляться кэш-попадание в будущем, и RT.DataVision сможет получать кэшированные данные.
Вы можете отключить добавление значения user_id в вычисление ключа кэша, добавив в свой код Jinja следующий параметр:
{{ current_user_id(add_to_cache_keys=False) }}
Макрос {{ url_param('custom_variable') }} позволяет определять произвольные параметры URL и ссылаться на них в коде SQL.
Ниже описан конкретный пример:
1. Вы пишете следующий запрос в Лаборатории SQL (SQL Lab):
SELECT count(*)
FROM ORDERS
WHERE country_code = '{{ url_param('countrycode') }}'
2. Вы размещаете RT.DataVision в домене www.example.com и отправляете своему коллеге в Испании следующий URL-адрес Лаборатории SQL (SQL Lab) www.example.com/superset/sqllab?countrycode=ES, а коллеге в США — следующий URL-адрес Лаборатории SQL (SQL Lab) www.example.com/superset/sqllab?countrycode=US.
3. Для вашего коллеги в Испании запрос Лаборатории SQL (SQL Lab) будет отображаться следующим образом:
SELECT count(*)
FROM ORDERS
WHERE country_code = 'ES'
4. Для вашего коллеги в США запрос Лаборатории SQL (SQL Lab) будет отображаться следующим образом:
SELECT count(*)
FROM ORDERS
WHERE country_code = 'US'
Функция {{ cache_key_wrapper() }} явно указывает RT.DataVision добавить значение в накопленный список значений, используемых при вычислении ключа кэша.
Эта функция необходима только в том случае, если вы хотите обернуть возвращаемые значения собственной кастомной функции в ключ кэша. Вы можете получить больше информации здесь.
Обратите внимание, что эта функция обеспечивает кэширование значений user_id и username в вызовах функций current_user_id() и current_username() (если у вас включено кэширование).
Вы можете получить значение для конкретного фильтра в виде списка, используя {{ filter_values() }}.
Это может быть полезным, если:
Ниже описан конкретный пример:
SELECT action, count(*) as times
FROM logs
WHERE
action in {{ filter_values('action_type')|where_in }}
GROUP BY action
Здесь фильтр where_in преобразует список значений из filter_values('action_type') в строку, подходящую для выражения IN.
Макрос {{ get_filters() }} возвращает фильтры, применённые к данному столбцу. Помимо возврата значений (аналогично тому, как это делает filter_values()), макрос get_filters() возвращает оператор, указанный в пользовательском интерфейсе Исследовать (Explore).
Это может быть полезным, если:
Ниже описан конкретный пример:
WITH RECURSIVE
superiors(employee_id, manager_id, full_name, level, lineage) AS (
SELECT
employee_id,
manager_id,
full_name,
1 as level,
employee_id as lineage
FROM
employees
WHERE
1=1
{# Render a blank line #}
{%- for filter in get_filters('full_name', remove_filter=True) -%}
{%- if filter.get('op') == 'IN' -%}
AND
full_name IN {{ filter.get('val')|where_in }}
{%- endif -%}
{%- if filter.get('op') == 'LIKE' -%}
AND
full_name LIKE {{ "'" + filter.get('val') + "'" }}
{%- endif -%}
{%- endfor -%}
UNION ALL
SELECT
e.employee_id,
e.manager_id,
e.full_name,
s.level + 1 as level,
s.lineage
FROM
employees e,
superiors s
WHERE s.manager_id = e.employee_id
)
SELECT
employee_id, manager_id, full_name, level, lineage
FROM
superiors
order by lineage, level
С помощью макроса dataset можно запрашивать физические и виртуальные датасеты.
Это может быть полезным, если вы определили вычисляемые столбцы и метрики в своих датасетах и хотите повторно использовать определение в adhoc-запросах SQL Lab.
Чтобы использовать макрос, сначала вам нужно найти идентификатор датасета. Это можно сделать, перейдя к представлению, показывающему все датасеты, наведя указатель мыши на интересующий вас датасет и просмотрев его URL-адрес. Например, если URL-адрес датасета https://superset.example.org/superset/explore/table/42/, его идентификатор равен 42.
Получив идентификатор, вы можете запросить его, как если бы это была таблица:
SELECT * FROM {{ dataset(42) }} LIMIT 10
Если вы хотите выбрать определения метрик, помимо столбцов, вам необходимо передать дополнительный аргумент ключевого слова:
SELECT * FROM {{ dataset(42, include_metrics=True) }} LIMIT 10
Поскольку метрики являются агрегатами, результирующее выражение SQL будет сгруппировано по всем столбцам, не являющимся метриками. Вместо этого вы можете указать подмножество столбцов для группировки:
SELECT * FROM {{ dataset(42, include_metrics=True, columns=["ds", "category"]) }} LIMIT 10
Чтобы настроить SSH-туннелирование, выполните:
1. Включите флаг функции:
2. Создайте базу данных с включенным туннелем ssh.
RT.DataVision позволяет использовать два разных типа аутентификации (базовый + закрытый ключ). Эти учётные данные должны быть получены от вашего провайдера услуг.
3. Убедитесь, что данные передаются.
Для работы RT.DataVision требуется установить драйверы базы данных Python DB-API и диалект SQLAlchemy для каждого хранилища данных, к которому вы хотите подключиться.
RT.DataVision не поставляется в комплекте с возможностью подключения к базам данных (исключения представлены ниже). Вам необходимо будет установить необходимые пакеты для базы данных, которую вы хотите использовать в качестве БД метаданных, а также пакеты, необходимые для подключения к базам данных, к которым вы хотите получить доступ через RT.DataVision.
Ниже представлен список баз данных, поддержка которых была протестирована в RT.DataVision и подключение к которым доступно “из коробки”:
О том, как подключить поддерживаемые “из коробки” БД, представленные в списке выше, и возможные для подключения к RT.DataVision БД, описано в п. 11 Настройки подключения БД. Общая информация о подключении БД дана в п. 10.3 Подключение к базе данных и п. 10.4 Расширенные настройки подключения БД.
Обратите внимание, что поддерживаются многие другие базы данных, основными критериями которых являются наличие функциональности диалекта SQLAlchemy и драйвера Python. Поиск по ключевым словам sqlalchemy + [имя базы данных] должен помочь вам найти необходимую информацию.
Если вы хотите создать коннектор базы данных для интеграции RT.DataVision, прочитайте следующее руководство.
Чтобы выбрать базу данных, выполните следующее:
1. На панели инструментов наведите курсор на Настройки (Settings), а затем в раскрывающемся меню выберите Database Connections.
2. Откроется окно Базы данных (Databases), которое содержит список всех подключённых к RT.DataVision баз данных. Нажмите + База данных (+ Database).
2. Появится окно Подключение к базе данных (Connect a database). Выберите соответствующую плитку базы данных.
Или, если ваша база данных не входит в их число, выберите базу данных из раскрывающегося списка Поддерживаемые базы данных (Supported Databases).
Внимание. RT.DataVision “из коробки” поддерживает следующие базы данных: SQLite, PostgreSQL, Dremio, Oracle, MySQL, SAP Hana, ClickHouse, SQL Server.
Но вы можете подключить базы данных, перечисленные в пп. 11.1 — 11.44.
Вы можете настроить подключение к базе данных двумя следующими способами в зависимости от типа базы данных:
1. Через определение учётных данных для подключения — если вы подключаетесь к одной из следующих баз данных (Google BigQuery, PostgreSQL, Snowflake, MySQL, Amazon Redshift, Google Sheets), вы можете подключиться к ней, указав учётные данные (хост, порт и т.д.) и/или другие сведения о подключении.
2. Через предоставление URI SQLAlchemy — если вашей базы данных нет в списке выше, вы можете подключиться к ней, указав URI SQLAlchemy.
Для демонстрации первого способа подключения к БД используется PostgreSQL. Выполните следующее:
1. Выберите в окне Подключение к базе данных (Connect a database) плитку PostgreSQL.
2. Откроется форма с полями для заполнения учётными данными.
Поля для определения учётных данных включают (обязательные поля отмечены *):
3. После заполнения полей нажмите Подключить (Connect), чтобы подключить базу данных PostgreSQL к RT.DataVision. Если значения полей были указаны корректно, то БД будет подключена.
Примечание. RT.DataVision может предложить указать дополнительные параметры конфигурации. Обратитесь за информацией к п. 10.4 Расширенные настройки подключения БД.
Большинство поддерживаемых баз данных подключаются через SQLAlchemy URI. Для получения детальной информации обратитесь к пп. 11.1 — 11.44.
Для демонстрации данного способа используется SQLite. Выполним следующее:
1. Выберите плитку SQLite в окне Подключение к базе данных (Connect a database).
2. Откроется форма для заполнения, на которой есть только два обязательных для заполнения поля Отображаемое имя (Display name)* и SQLAlchemy URI* для подключения к базе данных.
3. После заполнения формы нажмите Тестовое соединение (Test connection), чтобы проверить, работает ли подключение. Если подключение корректно, появится уведомление о валидном подключении.
4. Если никаких дополнительных настроек подключения не требуется, то нажмите Подключить (Connect). База данных SQLite будет подключена к RT.DataVision.
Иногда при желании вы можете настроить для подключения к базе данных дополнительные параметры. Но для некоторых баз данных настройка дополнительных параметров является обязательным требованием для осуществления подключения. Примером могут служить следующие БД:
Давайте посмотрим, как использовать интерфейс дополнительных настроек.
Независимо от того, подключили ли вы свою базу данных, предоставив учётные данные или использовав URI SQLAlchemy, вам будет предоставлена возможность указать расширенные параметры в окне Подключение к базе данных (Connect a database).
Ниже будет подробно рассмотрена каждая группа расширенных параметров.
Для начала нажмите на группу Лаборатория SQL (SQL Lab) в окне Подключение к базе данных (Connect a database) на вкладке Расширенные (Advanced), чтобы развернуть группу. Отобразившиеся параметры Лаборатории SQL будут использоваться для настройки того, как ваша база данных будет взаимодействовать с Лабораторией SQL.
Расширенные параметры Лаборатории SQL содержат:
Следующая группа Представления (Perfomance) используется для настройки параметров производительности вашей базы данных.
Параметры Представления (Perfomance) содержат:
Группа Безопасность (Security) используется для включения расширенных сведений о подключении в соответствии с типом вашей базы данных.
Расширенные параметры Безопасности (Security) позволяют:
Группа расширенных параметров Другое (Other) используется для указания дополнительных настроек (например, параметров и версий), если это необходимо.
Расширенные параметры группы Другое (Other):
Ниже представлен параметр конфигурации, в котором администратор может определить предпочтительные, выводимые в интерфейсе базы данных:
# Список предпочитаемых баз данных по порядку.
# Эти базы данных будут отображаться в окне Подключение к базе данных (Connect a database).
# Используйте атрибут "engine_name" соответствующей спецификации движка БД в `superset/db_engine_specs/`.
PREFERRED_DATABASES: List[str] = [
"PostgreSQL",
"Presto",
"MySQL",
"SQLite",
]
Примечание. По причинам авторского права логотипы для каждой базы данных не распространяются вместе с RT.DataVision.
Чтобы настроить изображение предпочитаемой базы данных, администраторы должны создать маппинг в файле superset_text.yml с движком и расположением изображения. Изображение может быть размещено локально внутри вашего статического\файлового каталога или онлайн (например, S3).
DB_IMAGES:
postgresql: "path/to/image/postgres.jpg"
bigquery: "path/to/s3bucket/bigquery.jpg"
snowflake: "path/to/image/snowflake.jpg"
В настоящее время поддерживаются следующие базы данных:
Когда пользователь выбирает базу данных, которой нет в данном списке, он увидит устаревшее диалоговое окно, запрашивающее URI SQLAlchemy. Новые базы данных можно добавлять постепенно в новый поток. Для поддержки расширенной конфигурации спецификация ядра БД должна иметь следующие атрибуты:
Кроме того, спецификация движка БД должна имплементировать следующие методы класса:
Для таких баз данных, как MySQL и Postgres, которые используют стандартный формат engine+driver://user:password@host:port/dbname, всё, что вам нужно сделать, это добавить BasicParametersMixin в спецификацию движка БД, а затем определить параметры 2-4 из перечня выше (parameters_schema уже присутствует).
Для других баз данных вам необходимо имплементировать методы самостоятельно. Спецификация движка BigQuery DB — хороший пример того, как это сделать.
PyAthenaJDBC — это оболочка, совместимая с Python DB 2.0, для драйвера JDBC Amazon Athena.
Пакет PyPI для установки БД:
pip install "PyAthenaJDBC>1.0.9
Строка подключения для Amazon Athena выглядит следующим образом:
awsathena+jdbc://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...
Обратите внимание, что вам нужно будет экранировать и кодировать при формировании строки подключения следующим образом:
s3://... -> s3%3A//...
Вы также можете использовать библиотеку PyAthena (Java не требуется).
Пакет PyPI для установки БД используется следующий:
pip install "PyAthena>1.2.0
И следующая строка подключения:
awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...
PyDynamoDB — клиент Python DB API 2.0 (PEP 249) для Amazon DynamoDB.
Пакет PyPI для установки Amazon DynamoDB:
pip install pydynamodb
Строка подключения для Amazon DynamoDB выглядит следующим образом:
dynamodb://{aws_access_key_id}:{aws_secret_access_key}@dynamodb.{region_name}.amazonaws.com:443?connector=superset
Чтобы получить дополнительную информацию, обратитесь к PyDynamoDB WIKI.
Библиотека sqlalchemy-redshift — рекомендуемый способ подключения к Redshift через SQLAlchemy.
Для корректной работы этого диалекта требуется либо redshift_connector, либо psycopg2.
Пакет PyPI для установки Redshift:
pip install sqlalchemy-redshift
Для формирования строки подключения вам понадобятся следующие значения параметров:
Вот как выглядит URI SQLAlchemy:
redshift+psycopg2://<userName>:<DBPassword>@<AWS End Point>:5439/<Database Name>
Вот как выглядит URI SQLAlchemy:
redshift+redshift_connector://<userName>:<DBPassword>@<AWS End Point>:5439/<Database Name>
Кластер Amazon Redshift также поддерживает создание временных учётных данных пользователя базы данных на основе IAM.
Роль IAM вашего приложения RT.DataVision должна иметь разрешения на вызов операции redshift:GetClusterCredentials.
Вам необходимо определить следующие аргументы для подключения БД Redshift в интерфейсе окно Подключение к базе данных (Connect a database) > вкладка Расширенные (Advanced) > Другое (Other) > Параметры движка (Engine Parameters):
{"connect_args":{"iam":true,"database":"<database>","cluster_identifier":"<cluster_identifier>","db_user":"<db_user>"}}
И URI SQLAlchemy должен быть установлен на:
redshift+redshift_connector://
Бессерверная система Redshift поддерживает подключение с использованием ролей IAM.
Роль IAM вашего приложения RT.DataVision должна иметь разрешения redshift-serverless:GetCredentials и redshift-serverless:GetWorkgroup для бессерверной рабочей группы Redshift.
Вам необходимо определить следующие аргументы для подключения БД Redshift в интерфейсе: окно Подключение к базе данных (Connect a database) > вкладка Расширенные (Advanced) > Другое (Other) > Параметры движка (Engine Parameters):
{"connect_args":{"iam":true,"is_serverless":true,"serverless_acct_id":"<aws account number>","serverless_work_group":"<redshift work group>","database":"<database>","user":"IAMR:<superset iam role name>"}}
Библиотека sqlalchemy-doris — рекомендуемый способ подключения к Apache Doris через SQLAlchemy.
Пакет PyPI для установки Doris:
pip install pydoris
Для формирования строки подключения вам потребуются следующие значения параметров:
Вот как выглядит строка подключения:
doris://<User>:<Password>@<Host>:<Port>/<Catalog>.<Database>
Рекомендуемый способ подключения к Apache Drill — через SQLAlchemy. Вы можете использовать пакет sqlalchemy-drill:
pip install sqlalchemy-drill
Как только это будет сделано, вы можете подключиться к Drill двумя способами: либо через интерфейс REST, либо с помощью JDBC. Если вы подключаетесь через JDBC, у вас должен быть установлен драйвер Drill JDBC.
Базовая строка подключения для Drill выглядит так:
drill+sadrill://<username>:<password>@<host>:<port>/<storage_plugin>?use_ssl=True
Чтобы подключиться к Drill, работающему на локальной машине, работающей во встроенном режиме, вы можете использовать следующую строку подключения:
drill+sadrill://localhost:8047/dfs?use_ssl=False
Подключение к Drill через JDBC является более сложным, рекомендуется следовать этому руководству.
Строка подключения выглядит так:
drill+jdbc://<username>:<password>@<host>:<port>
Рекомендуется прочитать документацию Apache Drill и прочитать файл README GitHub, чтобы узнать, как работать с Drill через ODBC.
Родной коннектор для Druid поставляется с RT.DataVision (флаг DRUID_IS_ACTIVE).
Но он постепенно устаревает в пользу коннектора SQLAlchemy/DBAPI, доступного в библиотеке pydruid:
pip install pydruid
Строка подключения выглядит так:
druid://<User>:<password>@<Host>:<Port-default-9088>/druid/v2/sql
Ниже разбивка ключевых компонентов этой строки подключения:
При добавлении подключения к Druid вы можете настроить подключение несколькими способами в окне Подключение к базе данных (Connect a database).
Вы можете добавить сертификаты в поле Корневой сертификат (Root Certificate) при конфигурировании нового подключения базы данных к Druid.
При использовании кастомного сертификата pydruid автоматически использует схему https.
Чтобы отключить проверку SSL, добавьте следующее в поле Extras:
engine_params:
{"connect_args":
{"scheme": "https", "ssl_verify_cert": false}}
Общие агрегации или метрики Druid могут быть определены и использованы в RT.DataVision. Первый и более простой вариант использования — использовать матрицу чекбоксов, отображаемую в редактируемом представлении источника данных (окно Подключение к базе данных (Connect a database) → вкладка Список столбцов Druid (List Druid Column)).
Если отметить чекбоксы GroupBy и Filterable, столбец появится в соответствующих раскрывающихся списках в представлении Исследовать (Explore). Отметки в Count Distinct, Min, Max или Sum приведут к созданию новых метрик, которые появятся на вкладке Список показателей Druid (List Druid Metric) после сохранения источника данных.
После редактирования этих метрик их элемент JSON будет соответствовать определению агрегации Druid. Вы можете создать свои собственные агрегации вручную на вкладке Список показателей Druid (List Druid Metric), следуя документации Druid.
Druid поддерживает постагрегацию, и это работает в RT.DataVision. Всё, что вам нужно сделать, это создать метрику, как если бы вы создавали агрегацию вручную, но указать postagg для Metric Type. Затем вы должны предоставить валидное определение постагрегации json (как указано в документации Druid) в поле JSON.
Библиотека pyhive — рекомендуемый способ подключения к Hive через SQLAlchemy:
pip install pyhive
Ожидаемая строка подключения имеет следующий формат:
hive://hive@{hostname}:{port}/{database}
Рекомендуемая библиотека подключения к Apache Impala — impyla:
pip install impyla
Ожидаемая строка подключения имеет следующий формат:
impala://{hostname}:{port}/{database}
Рекомендуемая библиотека коннекторов для Apache Kylin — kylinpy:
pip install kylinpy
Ожидаемая строка подключения имеет следующий формат:
kylin://<username>:<password>@<hostname>:<port>/<project>?<param1>=<value1>&<param2>=<value2>
Рекомендуемая библиотека коннекторов для Apache Pinot — pinotdb:
pip install pinotdb
Ожидаемая строка подключения имеет следующий формат:
pinot+http://<pinot-broker-host>:<pinot-broker-port>/query?controller=http://<pinot-controller-host>:<pinot-controller-port>/``
Ожидаемая строка подключения с использованием имени пользователя и пароля имеет следующий формат:
pinot://<username>:<password>@<pinot-broker-host>:<pinot-broker-port>/query/sql?controller=http://<pinot-controller-host>:<pinot-controller-port>/verify_ssl=true``
Библиотека sqlalchemy-solr предоставляет интерфейс Python\SQLAlchemy для Apache Solr:
pip install sqlalchemy-solr
Строка подключения для Solr выглядит так:
solr://{username}:{password}@{host}:{port}/{server_path}/{collection}[/?use_ssl=true|false]
Рекомендуемая библиотека коннекторов для Apache Spark SQL — pyhive:
pip install pyhive
Ожидаемая строка подключения имеет следующий формат:
hive://hive@{hostname}:{port}/{database}
Рекомендуемая библиотека коннекторов к Ascend.io — impyla:
pip install impyla
Ожидаемая строка подключения имеет следующий формат:
ascend://{username}:{password}@{hostname}:{port}/{database}?auth_mechanism=PLAIN;use_ssl=true
Чтобы использовать ClickHouse с RT.DataVision, вам потребуется добавить следующую библиотеку Python:
clickhouse-connect>=0.6.8
Если вы запускаете RT.DataVision с помощью Docker Compose, добавьте в файл ./docker/requirements-local.txt следующее:
clickhouse-connect>=0.6.8
Рекомендуемая библиотека коннекторов для ClickHouse — clickhouse-connect:
pip install clickhouse-connect
Ожидаемая строка подключения имеет следующий формат:
clickhousedb://<user>:<password>@<host>:<port>/<database>[?options…]clickhouse://{username}:{password}@{hostname}:{port}/{database}
Вот пример реальной строки подключения:
clickhousedb://demo:demo@github.demo.trial.altinity.cloud/default?secure=true
Если вы используете Clickhouse локально на своем компьютере, вы можете обойтись без использования http-протокола в URL-адресе, который использует пользователя по умолчанию без пароля (и не шифрует соединение):
clickhousedb://localhost/default
Рекомендуемая библиотека коннекторов для CockroachDB — sqlalchemy-cockroachdb:
pip install cockroachdb
Ожидаемая строка подключения имеет следующий формат:
cockroachdb://root@{hostname}:{port}/{database}?sslmode=disable
Рекомендуемая библиотека коннекторов для CrateDB — crate.
Вам также необходимо установить дополнительные компоненты для этой библиотеки. Рекомендуется добавить в файл требований примерно следующий текст:
crate[sqlalchemy]==0.26.0
Ожидаемая строка подключения имеет следующий формат:
crate://crate@127.0.0.1:4200
Рекомендуемая библиотека коннекторов для Databend — databend-sqlalchemy. RT.DataVision был протестирован на databend-sqlalchemy>=0.2.3.
Рекомендуемая строка подключения:
databend://{username}:{password}@{host}:{port}/{database_name}
Вот пример строки подключения RT.DataVision к базе данных Databend:
databend://user:password@localhost:8000/default?secure=false
Databricks предлагает собственный драйвер DB API 2.0, databricks-sql-connector, который можно использовать с диалектом sqlalchemy-databricks. Вы можете установить оба с помощью:
pip install "apache-superset[databricks]"
Чтобы использовать коннектор Hive, вам потребуется следующая информация из вашего кластера:
Получив всю эту информацию, добавьте базу данных типа Databricks Native Connector и используйте следующий URI SQLAlchemy:
databricks+connector://token:{access_token}@{server_hostname}:{port}/{database_name}
Вам также необходимо добавить следующую конфигурацию в окно Подключение к базе данных (Connect a database) > вкладка Расширенные (Advanced) > Другое (Other) > поле Engine Parameters с указанием вашего HTTP-пути:
{
"connect_args": {"http_path": "sql/protocolv1/o/****"}
}
Первоначально RT.DataVision использовал databricks-dbapi для подключения к Databricks. Вы можете попробовать его, если у вас возникли проблемы с официальным коннектором Databricks:
pip install "databricks-dbapi[sqlalchemy]"
Существует два способа подключения к Databricks при использовании databricks-dbapi: с помощью коннектора Hive или коннектора ODBC. Оба способа работают одинаково, но для подключения к эндпоинтам SQL можно использовать только ODBC.
Чтобы подключиться к кластеру Hive, добавьте базу данных типа Databricks Interactive Cluster в RT.DataVision и используйте следующий URI SQLAlchemy:
databricks+pyhive://token:{access_token}@{server_hostname}:{port}/{database_name}
Вам также необходимо добавить следующую конфигурацию в окно Подключение к базе данных (Connect a database) → вкладка Расширенные (Advanced) → Другое (Other) → поле Engine Parameters с указанием вашего HTTP-пути:
{"connect_args": {"http_path": "sql/protocolv1/o/****"}}
Для ODBC сначала необходимо установить драйверы ODBC для вашей платформы.
Для обычного подключения используйте следующее в качестве URI SQLAlchemy после выбора Databricks Interactive Cluster или Databricks SQL Endpoint для базы данных, в зависимости от вашего варианта использования:
databricks+pyodbc://token:{access_token}@{server_hostname}:{port}/{database_name}
И для аргументов подключения:
{"connect_args": {"http_path": "sql/protocolv1/o/****", "driver_path": "/path/to/odbc/driver"}}
Путь к драйверу должен быть:
Для подключения к эндпоинту SQL вам необходимо использовать HTTP-путь от эндпоинта:
{"connect_args": {"http_path": "/sql/1.0/endpoints/****", "driver_path": "/path/to/odbc/driver"}}
Рекомендуемая библиотека коннекторов для Dremio — sqlalchemy_dremio:
pip install sqlalchemy_dremio
Ожидаемая строка подключения для ODBC (порт по умолчанию — 31010) имеет следующий формат:
dremio://{username}:{password}@{host}:{port}/{database_name}/dremio?SSL=1
Ожидаемая строка подключения для Arrow Flight (Dremio 4.9.1+, порт по умолчанию — 32010) имеет следующий формат:
dremio+flight://{username}:{password}@{host}:{port}/dremio
Данный пост в блоге от Dremio содержит дополнительные полезные инструкции по подключению RT.DataVision к Dremio.
Рекомендуемая библиотека коннекторов для Elasticsearch — elasticsearch-dbapi:
pip install elasticsearch-dbapi
Строка подключения для Elasticsearch выглядит так:
elasticsearch+http://{user}:{password}@{host}:9200/
elasticsearch+https://{user}:{password}@{host}:9200/
Elasticsearch имеет ограничение по умолчанию в 10000 строк, поэтому вы можете увеличить это ограничение в своём кластере или установить ограничение строк RT.DataVision в конфигурации.
ROW_LIMIT = 10000
Например, вы можете запросить несколько индексов в Лаборатории SQL (SQL Lab).
SELECT timestamp, agent FROM "logstash"
Но чтобы использовать визуализации для нескольких индексов, вам необходимо создать индекс алиаса в вашем кластере.
POST /_aliases
{
"actions" : [
{ "add" : { "index" : "logstash-**", "alias" : "logstash_all" } }
]
}
Затем зарегистрируйте свою таблицу с алиасом logstash_all.
По умолчанию RT.DataVision использует часовой пояс UTC для запроса Elasticsearch. Если вам нужно уточнить часовой пояс, внесите изменения в подключённую базу данных в окне Подключение к базе данных (Connect a database) и введите настройки указанного часового пояса в параметре по пути: вкладка Расширенные (Advanced) > Другое (Other) > Параметры движка (Engine Parameters):
{
"connect_args": {
"time_zone": "Asia/Shanghai"
}
}
Ещё одна проблема, связанная с часовым поясом, заключается в том, что до версии elasticsearch7.8, если вы хотите преобразовать строку в объект DATETIME, вам нужно использовать функцию CAST, но эта функция не поддерживает настройку time_zone. Поэтому рекомендуется обновиться до более поздней версии чем elasticsearch7.8. С версией более elasticsearch7.8 вы можете использовать функцию DATETIME_PARSE для решения этой проблемы. Функция DATETIME_PARSE предназначена для поддержки параметра time_zone, при этом вам необходимо указать номер версии elasticsearch в параметре по пути: вкладка Расширенные (Advanced) > Другое (Other) > поле Версия (Version). RT.DataVision будет использовать для преобразования функцию DATETIME_PARSE.
Чтобы отключить верификацию SSL, добавьте следующее в параметр по пути: окно Подключение к базе данных (Connect a database) > вкладка Базовые (Basic) > поле SQLAlchemy URI:
elasticsearch+https://{user}:{password}@{host}:9200/?verify_certs=False
Рекомендуемая библиотека коннекторов для Exasol — sqlalchemy-exasol:
pip install sqlalchemy-exasol
Строка подключения для Exasol выглядит так:
exa+pyodbc://{username}:{password}@{hostname}:{port}/my_schema?CONNECTIONLCALL=en_US.UTF-8&driver=EXAODBC
Рекомендуемая библиотека коннекторов для Firebird — sqlalchemy-firebird. RT.DataVision протестирован на sqlalchemy-firebird>=0.7.0, <0.8.
Рекомендуемая строка подключения:
firebird+fdb://{username}:{password}@{host}:{port}//{path_to_db_file}
Вот пример строки подключения RT.DataVision к локальной базе данных Firebird:
firebird+fdb://SYSDBA:masterkey@192.168.86.38:3050//Library/Frameworks/Firebird.framework/Versions/A/Resources/examples/empbuild/employee.fdb
Рекомендуемая библиотека коннекторов для Firebolt — firebolt-sqlalchemy. RT.DataVision протестирован на firebolt-sqlalchemy>=0.0.1.
Рекомендуемая строка подключения:
firebolt://{username}:{password}@{database}?account_name={name}
или
firebolt://{username}:{password}@{database}/{engine_name}?account_name={name}
Также возможно подключение с использованием аккаунта сервиса:
firebolt://{client_id}:{client_secret}@{database}?account_name={name}
или
firebolt://{client_id}:{client_secret}@{database}/{engine_name}?account_name={name}
Рекомендуемая библиотека коннекторов для BigQuery — sqlalchemy-bigquery:
pip install shillelagh[gsheetsapi]
При добавлении нового подключения BigQuery в RT.DataVision вам потребуется добавить файл учётных данных аккаунта сервиса GCP (в формате JSON).
1. Создайте свой аккаунт сервиса через панель управления Google Cloud Platform, предоставьте ей доступ к соответствующим датасетам BigQuery и загрузите файл конфигурации JSON для аккаунта сервиса.
2. В RT.DataVision вы можете:
{
"type": "service_account",
"project_id": "...",
"private_key_id": "...",
"private_key": "...",
"client_email": "...",
"client_id": "...",
"auth_uri": "...",
"token_uri": "...",
"auth_provider_x509_cert_url": "...",
"client_x509_cert_url": "..."
}
3. Или вместо этого вы можете подключиться через SQLAlchemy URI.
bigquery://{project_id}
{
"credentials_info": <contents of credentials JSON file>
}
Полученный файл должен иметь следующую структуру:
{
"credentials_info": {
"type": "service_account",
"project_id": "...",
"private_key_id": "...",
"private_key": "...",
"client_email": "...",
"client_id": "...",
"auth_uri": "...",
"token_uri": "...",
"auth_provider_x509_cert_url": "...",
"client_x509_cert_url": "..."
}
}
После этого вы сможете подключиться к своим датасетам BigQuery.
Чтобы иметь возможность загружать файлы CSV или Excel в BigQuery в RT.DataVision, вам также необходимо добавить библиотеку pandas_gbq.
В настоящее время sdk Python Google BigQuery несовместим с gevent из-за динамических свойств манкипатчинга в основной библиотеке Python со стороны gevent. Итак, когда вы развёртываете RT.DataVision с сервером gunicorn, вам необходимо использовать отличный от gevent тип воркера.
Google Sheets имеют очень ограниченный SQL API. Рекомендуемая библиотека коннекторов для Google Sheets — shillelagh:
pip install shillelagh[gsheetsapi]
Чтобы подключить RT.DataVision к Google Sheets, необходимо выполнить несколько шагов. Данная инструкция содержит самые последние инструкции по настройке подключения.
Hologres — интерактивный аналитический сервис в режиме реального времени, разработанный Alibaba Cloud. Он полностью совместим с PostgreSQL 11 и легко интегрируется с экосистемой больших данных:
pip install psycopg2
Строка подключения выглядит так:
postgresql+psycopg2://{username}:{password}@{host}:{port}/{database}
Параметры подключения Hologres:
Библиотека IBM_DB_SA предоставляет интерфейс Python/SQLAlchemy для IBM Data Servers:
pip install ibm_db_sa
Вот рекомендуемая строка подключения:
db2+ibm_db://{username}:{passport}@{hostname}:{port}/{database}
В SQLAlchemy имплементированы две версии диалекта DB2. Если вы подключаетесь к версии DB2 без синтаксиса LIMIT [n], рекомендуемая строка подключения для возможности использования Лаборатории SQL (SQL Lab):
ibm_db_sa://{username}:{passport}@{hostname}:{port}/{database}
Библиотека nzalchemy предоставляет интерфейс Python/SQLAlchemy для Netezza:
pip install nzalchemy
Вот рекомендуемая строка подключения:
netezza+nzpy://{username}:{password}@{hostname}:{port}/{database}
Рекомендуемая библиотека соединителей для Kusto — sqlalchemy-kusto>=2.0.0.
Строка подключения для Kusto (диалект sql) выглядит следующим образом:
kustosql+https://{cluster_url}/{database}?azure_ad_client_id={azure_ad_client_id}&azure_ad_client_secret={azure_ad_client_secret}&azure_ad_tenant_id={azure_ad_tenant_id}&msi=False
Строка подключения для Kusto (диалект kql) выглядит следующим образом:
kustokql+https://{cluster_url}/{database}?azure_ad_client_id={azure_ad_client_id}&azure_ad_client_secret={azure_ad_client_secret}&azure_ad_tenant_id={azure_ad_tenant_id}&msi=False
Убедитесь, что у пользователя есть права доступа и использования всех необходимых баз данных/таблиц/представлений.
Рекомендуемая библиотека коннекторов для SQL Server — pymssql:
pip install pymssql
Строка подключения для SQL Server выглядит так:
mssql+pymssql://<Username>:<Password>@<Host>:<Port-default:1433>/<Database Name>/?Encrypt=yes
Также возможно подключение с помощью pyodbc с параметром odbc_connect.
Пример строки подключения для SQL Server:
mssql+pyodbc:///?odbc_connect=Driver%3D%7BODBC+Driver+17+for+SQL+Server%7D%3BServer%3Dtcp%3A%3Cmy_server%3E%2C1433%3BDatabase%3Dmy_database%3BUid%3Dmy_user_name%3BPwd%3Dmy_password%3BEncrypt%3Dyes%3BConnection+Timeout%3D30
Рекомендуемая библиотека коннекторов для MySQL — mysqlclient:
pip install mysqlclient
Вот строка подключения:
mysql://{username}:{password}@{host}/{database}
Хост:
Одна из проблем с mysqlclient заключается в том, что он не сможет подключиться к более новым базам данных MySQL, используя caching_sha2_password для аутентификации, поскольку плагин не включён в клиент. В этом случае вместо этого следует использовать mysql-connector-python:
mysql+mysqlconnector://{username}:{password}@{host}/{database}
Рекомендуемая библиотека коннекторов для Ocient — sqlalchemy-ocient:
pip install sqlalchemy-ocient
Формат строки подключения к Ocient:
ocient://user:password@[host][:port][/database][?param1=value1&...]
Пример строки подключения к базе данных exampledb, расположенной по адресу examplehost:4050, с включённым TLS:
ocient://admin:abc123@examplehost:4050/exampledb?tls=on
Т.е. для строки подключения необходимо ввести учётные данные user и password, по умолчанию для хоста используется localhost, для порта по умолчанию — 4050, для базы данных по умолчанию — system, а для tls по умолчанию — unverified.
Убедитесь, что у пользователя есть права доступа и использования всех необходимых баз данных, схем, таблиц, представлений и хранилищ, поскольку движок Ocient SQLAlchemy по умолчанию не проверяет права пользователя или роли.
Рекомендуемая библиотека коннекторов — cx_Oracle:
pip install cx_Oracle
Строка подключения имеет следующий формат:
oracle://<username>:<password>@<hostname>:<port>
При создании подключения с несколькими хостами (через tnsnames.ora), вместо @host укажите tns вида:
oracle://readonly_mst:XXXXXXXXXX@
(DESCRIPTION =
(TRANSPORT_CONNECT_TIMEOUT=5)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbclr.ce.rt.ru)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = stbclr.ce.rt.ru)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbCLR)
)
)
Обратите внимание, что библиотека коннектора Postgres psycopg2 поставляется вместе с RT.DataVision.
Строка подключения выглядит так:
postgresql://{username}:{password}@{host}:{port}/{database}
Хост:
Порт — по умолчанию 5432.
Вы можете запросить SSL, добавив ?sslmode=require в конце:
postgresql://{username}:{password}@{host}:{port}/{database}?sslmode=require
Вы можете прочитать о других режимах SSL, которые поддерживает Postgres, в Таблице 31-1 из этой документации.
Дополнительную информацию о параметрах подключения к PostgreSQL можно найти в документах SQLAlchemy и PostgreSQL.
Библиотека pyhive — рекомендуемый способ подключения к Presto через SQLAlchemy:
pip install pyhive
Ожидаемая строка подключения имеет следующий формат:
presto://{hostname}:{port}/{database}
Вы также можете передать имя пользователя и пароль:
presto://{username}:{password}@{hostname}:{port}/{database}
Вот пример строки подключения со значениями:
presto://datascientist:securepassword@presto.example.com:8080/hive
По умолчанию RT.DataVision предполагает, что при запросе к источнику данных используется самая последняя версия Presto. Если вы используете более старую версию Presto, вы можете настроить её в окне Подключение к базе данных (Connect a database) в дополнительном параметре по пути: вкладка Расширенные (Advanced) > Другое (Other) > поле Версия (Version):
{
"version": "0.123"
}
Рекомендуемая библиотека коннекторов для RisingWave — sqlalchemy-risingwave.
Ожидаемая строка подключения имеет следующий формат:
risingwave://root@{hostname}:{port}/{database}?sslmode=disable
Пакет для установки драйвера БД:
pip install rockset-sqlalchemy
Строка подключения для Rockset:
rockset://{api key}:@{api server}
Получите ключ API из консоли Rockset. Найдите свой сервер API в справочнике API. Опустите https:// часть URL-адреса.
Чтобы настроить строку подключения на конкретный виртуальный инстанс, используйте следующий формат URI:
rockset://{api key}:@{api server}/{VI ID}
Для получения более полных инструкций рекомендуется обратиться к документации Rockset.
Рекомендуемая библиотека коннекторов — sqlalchemy-hana:
pip install hdbcli sqlalchemy-hana
pip install apache-superset[hana]
Строка подключения имеет следующий формат:
hana://{username}:{password}@{host}:{port}
Рекомендуемая библиотека коннекторов для Snowflake — snowflake-sqlalchemy:
pip install snowflake-sqlalchemy
Строка подключения для Snowflake выглядит следующим образом:
snowflake://{user}:{password}@{account}.{region}/{database}?role={role}&warehouse={warehouse}
Схема не требуется в строке подключения, так как она определяется для таблицы/запроса. Роль и хранилище можно не указывать, если для пользователя определены значения по умолчанию, т.е.:
snowflake://{user}:{password}@{account}.{region}/{database}
Убедитесь, что у пользователя есть права доступа и использования всех необходимых баз данных/схем/таблиц/представлений/хранилищ, поскольку движок Snowflake SQLAlchemy по умолчанию не проверяет права пользователя/роли во время создания движка. Однако при нажатии кнопки Тестовое соединение (Test connection) в окне Подключение к базе данных (Connect a database) учётные данные пользователя/роли проверяются путём передачи validate_default_parameters:True методу connect() во время создания движка. Если пользователю/роли не разрешён доступ к базе данных, в логах RT.DataVision фиксируется ошибка.
Если вы хотите подключить Snowflake с аутентификацией по паре ключей, убедитесь, что у вас есть пара ключей и открытый ключ зарегистрирован в Snowflake. Чтобы подключить Snowflake с аутентификацией по паре ключей, вам необходимо добавить следующие параметры в поле Secure Extra.
Обратите внимание, что вам необходимо объединить многострочное содержимое закрытого ключа в одну строку и вставить \n между каждой строкой.
{
"auth_method": "keypair",
"auth_params": {
"privatekey_body": "-----BEGIN ENCRYPTED PRIVATE KEY-----\n...\n...\n-----END ENCRYPTED PRIVATE KEY-----",
"privatekey_pass":"Your Private Key Password"
}
}
Если ваш закрытый ключ хранится на сервере, вы можете заменить в параметре privatekey_body на privatekey_path.
{
"auth_method": "keypair",
"auth_params": {
"privatekey_path":"Your Private Key Path",
"privatekey_pass":"Your Private Key Password"
}
}
Библиотека sqlalchemy-starrocks — рекомендуемый способ подключения к StarRocks через SQLAlchemy:
pip install starrocks
Вот как выглядит строка подключения:
starrocks://<User>:<Password>@<Host>:<Port>/<Catalog>.<Database>
TimescaleDB — реляционная база данных с открытым исходным кодом для анализа временных рядов и анализа, позволяющая создавать мощные приложения с интенсивным использованием данных.
TimescaleDB — расширение PostgreSQL, и для подключения к базе данных можно использовать стандартную библиотеку коннекторов PostgreSQL psycopg2:
pip install psycopg2
psycopg2 поставляется вместе с RT.DataVision.
Строка подключения выглядит так:
postgresql://{username}:{password}@{host}:{port}/{database name}
Хост:
Порт — по умолчанию 5432 или порт сервиса.
Вы можете запросить SSL, добавив ?sslmode=require в конце (например, если вы используете Timescale Cloud):
postgresql://{username}:{password}@{host}:{port}/{database name}?sslmode=require
Чтобы узнать больше о TimescaleDB, изучите документацию.
Рекомендуемая библиотека коннекторов — teradatasqlalchemy:
pip install teradatasqlalchemy
Строка подключения для Teradata выглядит так:
teradatasql://{user}:{password}@{host}
Существует также более старый коннектор sqlalchemy-teradata, который требует установки драйверов ODBC. Драйверы Teradata ODBC доступны здесь.
Вот необходимые переменные среды:
export ODBCINI=/.../teradata/client/ODBC_64/odbc.ini
export ODBCINST=/.../teradata/client/ODBC_64/odbcinst.ini
Рекомендуется использовать первую библиотеку из-за отсутствия требований к драйверам ODBC и потому, что она регулярно обновляется.
Поддерживается версия Trino 352 и выше:
pip install trino
Формат строки подключения следующий:
trino://{username}:{password}@{hostname}:{port}/{catalog}
Если вы используете Trino с docker на локальной машине, используйте следующий URL подключения:
trino://trino@host.docker.internal:8080
1. Базовая аутентификация.
Вы можете указать username/password следующими способами:
trino://{username}:{password}@{hostname}:{port}/{catalog}
{
"auth_method": "basic",
"auth_params": {
"username": "<username>",
"password": "<password>"
}
}
Если указаны оба параметра, поле Secure Extra всегда имеет более высокий приоритет.
2. Аутентификация Kerberos.
Настройте, как указано ниже, в окне Подключение к базе данных (Connect a database) по пути: вкладка Расширенные (Advanced) > Безопасность (Security) > поле Secure Extra:
{
"auth_method": "kerberos",
"auth_params": {
"service_name": "superset",
"config": "/path/to/krb5.config",
...
}
}
Все поля в auth_params передаются непосредственно классу KerberosAuthentication.
Примечание. Аутентификация Kerberos требует локальной установки trino-python-client с дополнительными функциями all или kerberos, т.е. установки trino[all] или trino[kerberos] соответственно.
3. Аутентификация по сертификату.
Настройте, как указано в примере ниже, в окне Подключение к базе данных (Connect a database) по пути: вкладка Расширенные (Advanced) > Безопасность (Security) > поле Secure Extra:
{
"auth_method": "certificate",
"auth_params": {
"cert": "/path/to/cert.pem",
"key": "/path/to/key.pem"
}
}
Все поля в auth_params передаются непосредственно в класс CertificateAuthentication.
4. JWT-аутентификация.
Настройте auth_method и укажите токен в окне Подключение к базе данных (Connect a database) по пути: вкладка Расширенные (Advanced) > Безопасность (Security) > поле Secure Extra:
{
"auth_method": "jwt",
"auth_params": {
"token": "<your-jwt-token>"
}
}
Рекомендуемая библиотека коннекторов — sqlalchemy-vertica-python.:
pip install sqlalchemy-vertica-python
Строка подключения имеет следующий формат:
vertica+vertica_python://{username}:{password}@{host}/{database}
Хост Vertica:
Порт — по умолчанию 5433.
Балансировщик нагрузки — резервный хост.
YugabyteDB — это распределённая база данных SQL, надстроенная над PostgreSQL.
Библиотека коннектора Postgres psycopg2 поставляется вместе с RT.DataVision:
pip install psycopg2
Строка подключения выглядит так:
postgresql://{username}:{password}@{host}:{port}/{database}
Безопасность в RT.DataVision обеспечивается Flask AppBuilder (FAB), фреймворком разработки приложений, созданным поверх Flask. FAB обеспечивает аутентификацию, управление пользователями, разрешениями и ролями. Для получения детальной информации ознакомьтесь с документацией по безопасности FAB.
Для работы с объектами и функциями RT.DataVision нужны разрешения (permission).
Для разрешений нужен контейнер, в котором будет определяться какими объектами и функциями в совокупности можно воспользоваться. Такими контейнерами являются роли (role).
Роли присваиваются пользователям (users).
RT.DataVision поставляется с набором ролей по умолчанию. Данные роли по умолчанию могут обновляться по мере развития RT.DataVision, т.е. в новых версиях.
Не рекомендуется изменять разрешения, определённые для каждой роли (например, добавлять новые разрешения или удалять существующие). Разрешения, определённые для каждой роли, повторно синхронизируются с исходными значениями при выполнении команды superset init (команда выполняется при обновлении версии RT.DataVision).
Набор ролей по умолчанию:
Например, установив PUBLIC_ROLE_LIKE = "Gamma" в файле superset_config.py, вы предоставляете роли Public тот же набор разрешений, что и для роли Gamma. Это полезно, если вы хотите разрешить анонимным пользователям просматривать дашборды. Явное предоставление для определённых датасетов по-прежнему требуется, а это означает, что вам необходимо отредактировать роль Public и добавить общедоступные источники данных в роль вручную.
Все права представляют из себя пары вида <действие> on <сущность> и разделяются по типу действия следующие категории:
Доступ к разделам и элементам меню RT.DataVision предоставляется в виде menu_access on <сущность>:
Сущность | Описание | ||
---|---|---|---|
Access requests | Запросы на регистрацию | ||
Home | Домашняя страница | ||
Меню Настройки | |||
Security | Раздел Безопасность | ||
List Users | Пункт меню Список пользователей | ||
List Roles | Пункт меню Список ролей | ||
Row Level Security | Пункт меню Безопасность на уровне строк | ||
Action Log | Пункт меню Журнал действий | ||
User Registration | Пункт меню Регистрация пользователей | ||
Manage | Раздел Управление | ||
CSS Templates | Пункт меню CSS шаблоны | ||
Alerts & Report | Пункт меню Оповещения и отчеты | ||
Annotation Layers | Пункт меню Слои аннотаций | ||
Вкладки верхнего меню | |||
Dashboards | Вкладка Дашборды | ||
Import Dashboards | Кнопка Импорт дашборда | ||
Charts | Вкладка Графики | ||
SQL Lab | Вкладка Лаборатория SQL | ||
SQL Editor | Редактор SQL | ||
Saved Queries | Раздел Сохраненные запросы | ||
Query Search | Раздел История запросов | ||
Data | Вкладка Данные | ||
Databases | Пункт меню Базы данных | ||
Datasets | Пункт меню Датасеты | ||
Upload a CSV | Пункт меню Загрузка CSV в базу данных | ||
Upload a Columnar file | Пункт меню Загрузка колоночного файла в базу данных | ||
Druid Datasources | |||
Druid Clusters | |||
Scan New Datasources | |||
Refresh Druid Metadata | |||
Dashboard Email Schedules | |||
Chart Emails | |||
Alerts | |||
Plugins |
Доступ к действиям в RT.DataVision предоставляется в виде <действие> on superset:
Действие | Описание доступа |
---|---|
can_schemas | |
can_sqllab_table_viz | |
can_results | |
can_fave_dashboards | |
can_publish | |
can_explore_json | |
can_explore | |
can_tables | Отображение списка таблиц в редакторе SQL |
can_datasources | |
can_approve | |
can_schemas_access_for_file_upload | |
can_filter | |
can_validate_sql_json | |
can_stop_query | |
can_testconn | |
can_extra_table_metadata | |
can_import_dashboards | |
can_estimate_query_cost | |
can_profile | Доступ в Профиль в разделе Пользователь меню Настройки |
can_annotation_json | |
can_log | |
can_save_dash | Сохранение дашборда |
can_sqllab | Доступ в редактор SQL |
can_created_slices | |
can_user_slices | |
can_created_dashboards | |
can_sync_druid_source | |
can_copy_dash | |
can_warm_up_cache | |
can_csrf_token | |
can_sqllab_history | |
can_csv | |
can_select_star | |
can_sql_json | |
can_add_slices | |
can_sqllab_viz | |
can_queries | |
can_fave_dashboards_by_username | |
can_search_queries | |
can_slice | |
can_fave_slices | |
can_request_access | |
can_available_domains | |
can_fetch_datasource_metadata | |
can_dashboard | |
can_slice_json | |
can_favstar | |
can_override_role_permissions | |
can_recent_activity | Отображение недавней активности на главной странице |
can_share_dashboard | |
can_share_chart | |
can_dashboard_permalink | |
can_create_folder |
Доступы к данным, находящимся в таблицах различных разделов RT.DataVision. Доступ предоставляется в виде <действие> on <сущность> :
Сущность | Описание сущности | Основные действия | Прочие действия | |||||
---|---|---|---|---|---|---|---|---|
can_list (просмотр списка) |
can_show (просмотр элемента) |
can_edit (редактирование элемента) |
can_add (добавление элемента) |
can_delete (удаление элемента) |
muldelete (выбор и удаление нескольких элементов) |
|||
UserDBModelView | Список пользователей | + | + | + | + | + |
|
|
UserLDAPModelView | Список пользователей LDAP | + | + | + | + | + |
|
|
RegisterUserModelView | Список запросов на регистрацию | + | + | + | ||||
RoleModelView | Список ролей | + | + | + | + | + | copyrole (копировать роль) | |
SwaggerView | + | |||||||
AsyncEventsRestApi | + | |||||||
FilterSets | + | + | + | + | ||||
DynamicPlugin | + | + | + | + | + |
|
||
RowLevelSecurityFiltersModelView | Фильтр на уровне строк | + | + | + | + | + | + | can_download |
DashboardEmailScheduleView | Рассылка дашбордов | + | + | + | + | + | + | |
SliceEmailScheduleView | Рассылка чартов | + | + | + | + | + | + | |
AlertModelView | Оповещения | + | + | + | + | + | ||
AlertLogModelView | Журнал оповещений | + | + | |||||
AlertObservationModelView | + | + | ||||||
AccessRequestsModelView | + | + | + | + | + | + | ||
DruidDatasourceModelView | + | + | + | + | + | + | yaml_export | |
DruidClusterModelView | + | + | + | + | + | + | yaml_export | |
DruidMetricInlineView | + | + | + | + | ||||
DruidColumnInlineView | + | + | + | + |
Доступы к элементам RT.DataVision. Доступ предоставляется в виде <действие> on <сущность> :
Сущность | Описание сущности | Основные действия | Прочие действия | ||
---|---|---|---|---|---|
can_get (загрузить объект) |
can_post (создать новый объект) |
can_delete (удалить объект) |
|||
Datasource | Датасеты, в том числе виртуальные | + |
|
||
OpenApi | + | ||||
MenuApi | + | ||||
TabStateView | Вкладка в SQL редакторе | + | + | + |
|
TagView | + | + | + |
|
|
TableSchemaView | + | + | can_expanded |
Доступы к основным объектам RT.DataVision. Доступ предоставляется в виде <действие> on <сущность> :
Сущность | Описание сущности | Основные действия | Прочие действия | ||
---|---|---|---|---|---|
can_read (доступ на чтение) |
can_write (доступ на запись) |
can_export (доступ на экспорт, не работает без can_write) |
|||
SavedQuery | Сохраненный запрос | + | + | + | |
Query | Запрос | + | |||
CssTemplate | CSS шаблон | + | + | ||
ReportSchedule | Оповещения и отчеты | + | + | ||
Chart | График | + | + | + | |
Annotation | Слои аннотаций | + | + | ||
Dataset | Датасет | + | + | + | |
Log | Журнал действий | + | + | ||
Dashboard | Дашборд | + | + | + |
|
EmbeddedDashboard | + | ||||
Database | База данных | + | + | + | |
SecurityRestApi | + | can_grant_guest_token | |||
DashboardFilterStateRestApi | + | + | |||
DashboardPermalinkRestApi | + | + | |||
ExploreFormDataRestApi | + | + | |||
ExplorePermalinkRestApi | + | + | |||
Folder | + | + |
|
||
DynamicPlugin | + | ||||
ImportExportRestApi | + | can_import_ | |||
AdvancedDataType | + |
Доступы к формам RT.DataVision. Доступ предоставляется в виде <действие> on <сущность> :
Сущность | Описание сущности | Действия | |
---|---|---|---|
can_this_form_get (просмотр формы) |
can_this_form_post (отправка формы) |
||
ResetPasswordView | Форма смены пароля любого пользователя (в разделе Список пользователей) | + | + |
ResetMyPasswordView | Форма смены своего пароля (в разделе Пользователь → Инфо) | + | + |
UserInfoEditView | Форма смены своих данных (в разделе Пользователь → Инфо). Для изменения доступно только имя и фамилия | + | + |
CsvToDatabaseView | Форма загрузки CSV | + | + |
ExcelToDatabaseView | Форма загрузки файлов Excel | + | + |
ColumnarToDatabaseView | Форма загрузки файлов со столбцами | + | + |
Прочите действия в RT.DataVision. Доступ предоставляется в виде <действие> on <сущность> :
Действие | Сущность | Описание |
can_invalidate | CacheRestApi | |
can_time_range | Api | |
can_query | Api | |
can_query_form_data | Api | |
can_external_metadata | Datasource | |
can_save | Datasource | |
can_external_metadata_by_name | Datasource | |
can_store | KV | |
can_get_value | KV | |
can_shortner | R | |
can_my_queries | SqlLab | |
can_expanded | TableSchemaView | |
can_scan_new_datasources | Druid | |
can_refresh_datasources | Druid | |
can_import_ | ImportExportRestApi |
Для получения доступа используется один из трёх видов прав:
При создании подключения к БД автоматически генерируются все права второго (доступ к схеме) и третьего (доступ к источнику) типа.
Для роли администраторов или схожей по правам можно предоставить доступ ко всем объектам:
В разделе описано, как предоставить пользователям доступ только к определённым датасетам. Сначала убедитесь, что пользователям с ограниченным доступом назначена только роль Gamma. Во-вторых, создайте новую роль (Настройки (Settings) > Список ролей (List Roles)) и нажмите значок +.
Открывшееся окно позволит вам дать этой новой роли имя и выбрать таблицы в раскрывающемся списке Права (Permissions). Чтобы выбрать источники данных, которые вы хотите связать с этой ролью, щёлкните раскрывающийся список и используйте ввод для поиска имён таблиц.
Затем вы можете подтвердить с помощью пользователей, которым назначена роль Gamma, что они видят объекты (дашборды и графики), связанные с таблицами, которые вы только что расширили.
Разрешения, предоставляемые FAB, очень детализированы и обеспечивают высокий уровень кастомизации. FAB автоматически создаёт множество разрешений для каждой создаваемой модели (can_add, can_delete, can_show, can_edit, …), а также для каждого представления. Кроме того, RT.DataVision может предоставлять более детальные разрешения, такие как all_datasource_access.
Внимание. Не рекомендуется изменять базовые роли, поскольку существует набор допущений, на которых построен RT.DataVision. Однако вы можете создавать свои собственные роли и объединять их с существующими.
Рекомендуется предоставить пользователю роль Gamma, а также любые другие роли, которые добавят доступ к определённым источникам данных. Рекомендуется создавать отдельные роли для каждого профиля доступа. Например, пользователи группы Finance могут иметь доступ к набору баз данных и источников данных; эти разрешения могут быть объединены в одной роли. Затем пользователям с этим профилем необходимо назначить роль Gamma в качестве основы для моделей и представлений, к которым они могут получить доступ, и роль Finance, которая представляет собой набор разрешений для объектов данных.
С пользователем может быть связано несколько ролей. Например, руководителю группы Finance могут быть предоставлены роли Gamma, Finance и Executive. Роль Executive может предоставлять доступ к набору источников данных и дашбордов, доступных только для руководителей. В представлении Dashboards пользователь может видеть только те, к которым у него есть доступ, в зависимости от назначенных ролей и разрешений.
Используя фильтры Безопасность на уровне строк (Row Level Security) (в меню Настройки (Settings)), вы можете создавать фильтры, которые назначаются конкретной таблице, а также набору ролей. Если вы хотите, чтобы члены группы Finance имели доступ только к строкам, в которых department = "finance", выполните:
Затем поле предложения, которое может содержать произвольный текст, добавляется к предложению WHERE сгенерированного оператора SQL. Таким образом, вы даже можете сделать что-то вроде создания фильтра за последние 30 дней и применить его к определённой роли с таким предложением, как date_field > DATE_SUB(NOW(), INTERVAL 30 DAY). Он также может поддерживать несколько условий: client_id = 6 и advertiser="foo" и т.д.
Все соответствующие фильтры безопасности на уровне строк будут объединены вместе (внутри различные предложения SQL объединяются с помощью операторов AND). Это означает, что можно создать ситуацию, когда две роли конфликтуют таким образом, что подмножество таблиц может быть пустым.
Например, фильтры client_id=4 и client_id=5, применённые к роли, приведут к тому, что пользователи этой роли будут иметь client_id=4 AND client_id=5, добавленные к их запросу, что никогда не может быть true.
Визуализация Country Map позволяет вам строить облегчённые картограммы ваших стран по регионам, провинциям, штатам или другим типам разделений. Функция не зависит от каких-либо сторонних картографических сервисов, но потребует от вас предоставить коды ISO-3166-2 разделений верхнего уровня вашей страны. По сравнению с полными названиями провинций или штатов код ISO менее неоднозначен и уникален для всех регионов мира.
Визуализация Country Map уже поставляется с картами следующих стран:
Интерфейс командной строки (CLI) RT.DataVision позволяет импортировать и экспортировать источники данных из YAML и в него. Источники данных включают как базы данных, так и кластеры druid. Предполагается, что данные будут организованы в следующей иерархии:
├──базы_данных
| ├──база_данных_1
| | ├──таблица_1
| | | ├──столбцы
| | | | ├──столбец_1
| | | | ├──столбец_2
| | | | └──... (больше столбцов)
| | | └──метрики
| | | ├──метрика_1
| | | ├──метрика_2
| | | └──... (больше метрик)
| | └── ... (больше таблиц)
| └── ... (больше баз данных)
└──druid_кластеры
├──кластер_1
| ├──источник_данных_1
| | ├──столбцы
| | | ├──столбец_1
| | | ├──столбец_2
| | | └──... (больше столбцов)
| | └──метрики
| | ├──метрика_1
| | ├──метрика_2
| | └──... (больше метрик)
| └── ... (больше источников данных)
└── ... (больше кластеров)
Вы можете вывести свои текущие источники данных на stdout, запустив:
superset export_datasources
Чтобы сохранить источники данных в файл, выполните:
superset export_datasources -f <название_файла>
По умолчанию значения по умолчанию (null) будут опущены. Используйте флаг -d, чтобы включить их. Если вы хотите, чтобы обратные ссылки были включены (например, столбец для включения идентификатора таблицы, к которой он принадлежит), используйте флаг -b.
Кроме того, вы можете экспортировать источники данных с помощью пользовательского интерфейса:
Чтобы получить исчерпывающий список всех полей, которые вы можете импортировать, используя импорт YAML, запустите:
superset export_datasource_schema
Чтобы импортировать источники данных из файлов YAML, запустите:
superset import_datasources -p <путь_или_название_файла>
Если вы укажете путь, все файлы, заканчивающиеся на yaml или yml, будут проанализированы. Вы можете применить дополнительные флаги (например, для рекурсивного поиска по указанному пути):
superset import_datasources -p <путь> -r
Флаг синхронизации -s принимает параметры для синхронизации предоставленных элементов с вашим файлом. Будьте осторожны, это может удалить содержимое вашей метабазы данных. Пример:
set import_datasources -p <путь / название_файла> -s columns,metrics
После запуска синхронизируются все метрики и столбцы для всех источников данных, найденных в <путь / название_файла> в метабазе данных RT.DataVision. Это означает, что столбцы и метрики, не указанные в YAML, будут удалены. Если вы добавите таблицы в столбцы, метрики также будут синхронизированы.
Если вы не укажете флаг синхронизации (-s), импорт будет только добавлять и обновлять (переопределять) поля. Например, вы можете добавить verbose_name в столбец ds в таблице random_time_series из примеров наборов данных, сохранив следующий YAML в файл, а затем выполнив команду import_datasources.
databases:
- database_name: main
tables:
- table_name: random_time_series
columns:
- column_name: ds
verbose_name: datetime
В данном разделе перечислены коды проблем, которые могут отображаться в RT.DataVision, и предоставлен дополнительный контекст.
The datasource is too large to query.
Вероятно, ваш источник данных стал слишком большим для выполнения текущего запроса, и истекло время ожидания. Вы можете решить эту проблему, уменьшив размер источника данных или изменив запрос, чтобы он обрабатывал только подмножество ваших данных.
The database is under an unusual load.
Возможно, время ожидания вашего запроса истекло из-за необычно высокой нагрузки на движок базы данных. Вы можете упростить запрос или дождаться, когда нагрузка на базу данных уменьшится, и повторить попытку.
The database returned an unexpected error.
Ваш запрос не выполнен из-за ошибки в базе данных. Это может быть связано с синтаксической ошибкой, ошибкой в вашем запросе или каким-либо другим внутренним сбоем в базе данных. Обычно такая ситуация не является проблемой в RT.DataVision, а проблема с основной базой данных, которая обслуживает ваш запрос.
There is a syntax error in the SQL query. Perhaps there was a misspelling or a typo.
Ваш запрос не выполнен из-за синтаксической ошибки в основном запросе. Убедитесь, что все столбцы или таблицы, на которые есть ссылки в запросе, существуют и написаны корректно.
The column was deleted or renamed in the database.
Ваш запрос не выполнен, поскольку он ссылается на столбец, которого больше нет в основном источнике данных. Вам следует изменить запрос, чтобы он ссылался на замещающий столбец, или удалить этот столбец из запроса.
The table was deleted or renamed in the database.
Ваш запрос не выполнен, поскольку он ссылается на таблицу, которой больше нет в основной базе данных. Вы должны изменить свой запрос, чтобы он ссылался на корректную таблицу.
One or more parameters specified in the query are missing.
Ваш запрос не был отправлен в базу данных, так как в нём отсутствует один или несколько параметров. Вы должны определить все параметры, на которые есть ссылки в запросе, в действительном документе JSON. Проверьте корректность написания параметров и валидность синтаксиса документа.
The hostname provided can't be resolved.
Имя хоста, указанное при добавлении новой базы данных, является невалидным и не может быть разрешено. Пожалуйста, проверьте, чтобы в имени хоста не было опечаток.
The port is closed.
Порт, указанный при добавлении новой базы данных, не открыт. Убедитесь, что номер порта указан корректно, а база данных работает и прослушивает этот порт.
The host might be down, and cannot be reached on the provided port.
Хост, указанный при добавлении новой базы данных, похоже, не работает. Кроме того, он не может быть достигнут на указанном порту. Убедитесь, что нет правил файрвола, запрещающих доступ к хосту.
Superset encountered an error while running a command.
Произошло что-то непредвиденное, и RT.DataVision обнаружил ошибку при выполнении команды. Пожалуйста, обратитесь к администратору.
Superset encountered an unexpected error.
Что-то неожиданное произошло в бэкенде RT.DataVision. Пожалуйста, обратитесь к администратору.
The username provided when connecting to a database is not valid.
Пользователь указал имя пользователя, которого нет в базе данных. Убедитесь, что имя пользователя введено корректно и существует в базе данных.
The password provided when connecting to a database is not valid.
Пользователь ввёл некорректный пароль. Пожалуйста, проверьте корректность ввода пароля.
Either the username or the password used are incorrect.
Либо указанное имя пользователя не существует, либо пароль был введён некорректно. Пожалуйста, проверьте корректность ввода имени пользователя и пароля.
Either the database is spelled incorrectly or does not exist.
Либо база данных была написана некорректно, либо она не существует. Проверьте корректность написания.
The schema was deleted or renamed in the database.
Схема была либо удалена, либо переименована. Убедитесь, что схема введена корректно и существует.
The user doesn't have the proper permissions to connect to the database.
Нам не удалось подключиться к вашей базе данных. Подтвердите, что у вашего аккаунта сервиса есть роли Viewer и Job User в проекте.
One or more parameters needed to configure a database are missing.
Присутствовали не все параметры, необходимые для тестирования, создания или редактирования базы данных. Пожалуйста, проверьте, какие параметры необходимы и присутствуют ли они.
The submitted payload has the incorrect format.
Убедитесь, что полезная нагрузка запроса имеет корректный формат (например, JSON).
The submitted payload has the incorrect schema.
Убедитесь, что полезная нагрузка запроса имеет ожидаемую схему.
Results backend needed for asynchronous queries is not configured.
В вашем инстансе RT.DataVision не настроен бэкенд результатов, необходимый для асинхронных запросов. Пожалуйста, свяжитесь с администратором для получения дополнительной помощи.
Database does not allow data manipulation.
Для этой базы данных разрешены только операторы SELECT. Обратитесь к администратору, если вам нужно запустить DML (язык обработки данных) в этой базе данных.
CTAS (create table as select) doesn't have a SELECT statement at the end.
Последним оператором в запросе, выполняемом как CTAS, должен быть оператор SELECT. Пожалуйста, убедитесь, что последним оператором в запросе является SELECT.
CVAS (create view as select) query has more than one statement.
При запуске CVAS запрос должен содержать один оператор. Пожалуйста, убедитесь, что запрос содержит один оператор и не содержит лишних точек с запятой, кроме последней.
CVAS (create view as select) query is not a SELECT statement.
При запуске CVAS запрос должен быть оператором SELECT. Пожалуйста, убедитесь, что запрос содержит один оператор, и это оператор SELECT.
Query is too complex and takes too long to run.
Отправленный запрос может быть слишком сложным для выполнения в течение времени, установленного вашим администратором RT.DataVision. Проверьте свой запрос и убедитесь, что его можно оптимизировать. Либо обратитесь к администратору, чтобы увеличить время ожидания.
The database is currently running too many queries.
База данных может быть перегружена, выполняется слишком много запросов. Повторите попытку позже или обратитесь за помощью к администратору.
One or more parameters specified in the query are malformatted.
Запрос содержит один или несколько параметров шаблона некорректного формата. Проверьте свой запрос и убедитесь, что все параметры шаблона заключены в двойные фигурные скобки, например, "{{ ds }}". Затем попробуйте снова выполнить запрос.
The object does not exist in this database.
Схема, столбец или таблица не существуют в базе данных.
The query potentially has a syntax error.
В запросе может быть синтаксическая ошибка. Проверьте и запустите снова.
The results backend no longer has the data from the query.
Результаты запроса могли быть удалены из бэкенда результатов спустя некоторое время. Повторите запрос.
The query associated with the results was deleted.
Запрос, связанный с сохранёнными результатами, больше не существует. Повторите запрос.
The results stored in the backend were stored in a different format, and no longer can be deserialized.
Результаты запроса были сохранены в формате, который больше не поддерживается. Повторите запрос.
The database port provided is invalid.
Убедитесь, что указанный порт базы данных является целым числом от 0 до 65535 (включительно).
Failed to start remote query on a worker.
Запрос не был запущен асинхронным воркером. Обратитесь к администратору за дополнительной помощью.
The database was deleted.
Операция завершилась неудачно, так как база данных, на которую указывает ссылка, больше не существует. Обратитесь к администратору за дополнительной помощью.
В пользовательском интерфейсе Explore или Visualization нельзя. Источник данных RT.DataVision SQLAlchemy может быть только одной таблицей или представлением.
При работе с таблицами решением могла бы быть материализация таблицы, содержащей все поля, необходимые для вашего анализа, скорее всего, посредством некоторого запланированного пакетного процесса.
Представление — это простой логический уровень, который абстрагирует произвольные SQL-запросы в виде виртуальной таблицы. Это может позволить вам JOIN и UNION несколько таблиц, а также применять некоторые трансформации с использованием произвольных выражений SQL. Ограничением является производительность вашей базы данных, поскольку RT.DataVision эффективно запускает запрос поверх вашего запроса (представления). Хорошей практикой может быть ограничение JOIN вашей основной большой таблицы только к одной или нескольким небольшим таблицам и избегание использования GROUP BY, где это возможно, поскольку RT.DataVision будет выполнять свою собственную GROUP BY, а выполнение работы дважды может снизить производительность.
Используете ли вы таблицу или представление, важным фактором является то, достаточно ли быстра ваша база данных, чтобы обслуживать её в интерактивном режиме, чтобы обеспечить хорошее взаимодействие с пользователем в RT.DataVision.
Однако, если вы используете SQL Lab, такого ограничения нет, вы можете написать sql-запрос для JOIN нескольких таблиц, если ваша учётная запись базы данных имеет доступ к таблицам.
Он может быть гигантским! RT.DataVision действует как тонкий слой над вашими базами данных или движками данных.
Как упоминалось выше, основным критерием является то, может ли ваша база данных выполнять запросы и возвращать результаты в сроки, приемлемые для ваших пользователей. Многие распределённые базы данных могут выполнять запросы, которые сканируют терабайты в интерактивном режиме.
Есть много причин, которые могут привести к длительному таймауту запроса.
Для выполнения длинного запроса из Лаборатории SQL (SQL Lab) по умолчанию RT.DataVision позволяет ему выполняться до 6 часов, прежде чем он будет завершён с помощью celery. Если вы хотите увеличить время выполнения запроса, вы можете указать таймаут в конфигурации. Например:
SQLLAB_ASYNC_TIME_LIMIT_SEC = 60 * 60 * 6
RT.DataVision работает на веб-сервере gunicorn, что может привести к превышению времени ожидания веб-запросов. Если вы хотите увеличить значение по умолчанию (50), вы можете указать таймаут при запуске веб-сервера с флагом -t, который выражается в секундах.
superset runserver -t 300
Если вы видите таймауты (504 Gateway Time-out) при загрузке дашбордов или исследовании графиков, вы, вероятно, находитесь за шлюзом или прокси-сервером (например, Nginx). Если он не получил своевременный ответ от сервера RT.DataVision (который обрабатывает длинные запросы), эти веб-серверы будут напрямую отправлять клиентам код состояния 504. RT.DataVision имеет лимит таймаута на стороне клиента для решения этой проблемы. Если запрос не вернулся в течение таймаута на стороне клиента (по умолчанию 60 секунд), RT.DataVision отобразит предупреждающее сообщение, чтобы избежать сообщения о таймауте шлюза. Если у вас лимит таймаута шлюза больше, вы можете изменить настройки таймаута в superset_config.py:
SUPERSET_WEBSERVER_TIMEOUT = 60
Вам необходимо зарегистрировать бесплатную учётную запись на Mapbox.com, получить ключ API и добавить его в superset_config.py по ключу MAPBOX_API_KEY:
MAPBOX_API_KEY = "длиннаястрокабуквиц1фр"
Используйте виджет Filter Box, создайте график и добавьте его на дашборд.
Виджет Filter Box позволяет определить запрос для заполнения раскрывающихся списков, которые можно использовать для фильтрации. Чтобы создать список различных значений, мы запускаем запрос и сортируем результат по предоставленной вами метрике, сортируя по убыванию.
В виджете также есть флажок Date Filter, который включает возможности фильтрации по времени на дашборде. После установки флажка и обновления вы увидите раскрывающийся список from и to.
По умолчанию фильтрация будет применяться ко всем срезам, построенным поверх источника данных, который имеет то же имя столбца, на котором основан фильтр. Также необходимо, чтобы этот столбец был отмечен как Is Filterable на вкладке Columns редактора Edit Dataset.
Чтобы определённые виджеты не отфильтровывались на дашборде, необходимо отредактировать дашборд и отредактировать на форме поле JSON Metadata, а точнее ключ 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]
}
В приведённом выше blob json срезы 324, 65 и 92 не будут затронуты какой-либо фильтрацией на уровне дашборда.
Теперь обратите внимание на ключ filter_immune_slice_fields. Он позволяет внести более конкретные связи и определить для конкретного slice_id, какие поля фильтра следует игнорировать.
Обратите внимание на использование ключевого слова __time_range, которое зарезервировано для работы с упомянутой выше фильтрацией временных границ.
Но что происходит с фильтрацией при работе со срезами из разных таблиц или баз данных? Если имя столбца является общим, фильтр будет применён.
По умолчанию функция обновления по времени дашборда позволяет автоматически повторно запрашивать каждый срез дашборда в соответствии с установленным расписанием. Однако иногда вам не нужно обновлять все срезы, особенно если некоторые данные перемещаются медленно или выполняются тяжёлые запросы. Чтобы исключить определённые срезы из процесса синхронизированного обновления, добавьте ключ timed_refresh_immune_slices в поле JSON Metadata дашборда:
{
"filter_immune_slices": [],
"expanded_slices": {},
"filter_immune_slice_fields": {},
"timed_refresh_immune_slices": [324]
}
В приведённом выше примере, если для дашборда задано обновление по времени, каждый срез, кроме 324, будет автоматически повторно запрашиваться по расписанию.
Обновление среза также будет происходить в течение указанного периода. Вы можете отключить это смещение, установив для stagger_refresh значение false, и изменить период смещения, установив для stagger_time значение в миллисекундах в поле JSON Metadata:
{
"stagger_refresh": false,
"stagger_time": 2500
}
В примере весь дашборд будет обновляться сразу, если периодическое обновление включено. Время смещения 2,5 секунды игнорируется.
По умолчанию RT.DataVision создаёт и использует базу данных SQLite в ~/.superset/superset.db. Известно, что SQLite плохо работает при использовании в NFS из-за неработающей имплементации блокировки файлов в NFS.
Вы можете переопределить этот путь, используя переменную среды SUPERSET_HOME.
Другой обходной путь — изменить место, где RT.DataVision хранит базу данных sqlite, добавив в superset_config.py следующее:
SQLALCHEMY_DATABASE_URI = 'sqlite:////new/location/superset.db'
Подробнее о конфигурировании RT.DataVision с помощью конфигурационного файла можно прочитать в разделе Конфигурирование RT.DataVision.
Схемы таблиц развиваются, и RT.DataVision должен учитывать это. Довольно часто в жизненном цикле дашборда требуется добавить новое измерение или метрику. Чтобы RT.DataVision мог обнаружить ваши новые столбцы, всё, что вам нужно сделать, это перейти в Data > Datasets, щёлкнуть значок редактирования рядом с набором данных, схема которого изменилась, и нажать Sync columns from source на вкладке Columns. Новые столбцы будут объединены. После этого вы можете повторно отредактировать таблицу, чтобы настроить вкладку Columns, установить соответствующие флажки и снова сохранить.
Бэкенд базы данных — это база данных OLTP, используемая RT.DataVision для хранения своей внутренней информации, такой как ваш список пользователей, срезов и определений дашбордов.
RT.DataVision тестируется с использованием Mysql, Postgresql и Sqlite для его бекэндом. Рекомендуется установить RT.DataVision на один из этих серверов баз данных для производственной среды.
Использование колочных хранилищ, баз данных без OLTP, таких как Vertica, Redshift или Presto, в качестве бэкенда базы данных просто не будет работать, поскольку эти базы данных не предназначены для такого типа рабочей нагрузки. Установка с Oracle, Microsoft SQL Server или других базах данных OLTP может работать, но не тестировалась.
Обратите внимание, что практически любые базы данных с интеграцией SqlAlchemy должны отлично работать в качестве источника данных для RT.DataVision, но не в качестве бэкенда OLTP.
Вы можете взглянуть на этот пример конфигурации Flask-AppBuilder.
Просто примените фильтр и сохраните дашборд, пока фильтр активен.
Это возможно для каждого дашборда путём предоставления маппинга меток с цветами в атрибуте JSON Metadata с использованием ключа label_colors.
{
"label_colors": {
"Girls": "#FF69B4",
"Boys": "#ADD8E6"
}
}
В п. 11 Настройки подключения БД представлен лучший обзор поддерживаемых баз данных. Движки баз данных, не указанные в той статье, также могут работать.
Чтобы движок базы данных поддерживался в RT.DataVision через коннектор SQLAlchemy, необходимо наличие совместимого с Python диалекта SQLAlchemy, а также определённого драйвера DBAPI. База данных с ограниченной поддержкой SQL также может работать. Например, можно подключиться к Druid через коннектор SQLAlchemy, хотя Druid не поддерживает join и подзапросы. Ещё один ключевой элемент поддержки базы данных — интерфейс RT.DataVision Database Engine Specification. Этот интерфейс позволяет определять конфигурации и логику для конкретной базы данных, выходящие за рамки SQLAlchemy и DBAPI. Он включает в себя такие функции, как:
Помимо коннектора SQLAlchemy, также возможно, хотя и гораздо сложнее, расширить RT.DataVision и написать свой собственный коннектор. Единственным примером этого на данный момент является коннектор Druid, который заменяется растущей поддержкой SQL в Druid и недавней доступностью драйвера DBAPI и SQLAlchemy. Если база данных, которую вы планируете интегрировать, имеет какую-либо поддержку SQL, вероятно, предпочтительнее пойти по пути SQLAlchemy. Обратите внимание, что для того, чтобы собственный коннектор был возможен, база данных должна иметь поддержку выполнения запросов типа OLAP и должна иметь возможность выполнять действия, типичные для базового SQL:
В представлении Edit Dataset можно указать смещение по времени. Это поле позволяет настроить количество часов, которое будет добавлено или вычтено из столбца времени. Это можно использовать, например, для преобразования времени UTC в местное время.