Визуализация данных ClickHouse с помощью Apache Superset, часть 1: установка
Apache Superset - это мощный BI инструмент, предназначенный для исследования данных. Пользователи ClickHouse все чаще и чаще используют этот инструмент для оптимизации работы с Big Data. Данной теме мы посвятили 2 статьи. В первой мы расскажем Вам о том, как установить Superset и подключиться к ClickHouse. Во второй статье мы поговорим о способах визуализации данных, в том числе открытых данных ClickHouse
Статья, которую Вы читаете в данный момент – это результат совместной работы сообщества, работающего над оптимизацией подключения Superset к ClickHouse. Altinity рекомендует использовать драйвер clickhouse-sqlalchemy, в пользу которого выступает Константин Лебедев. Такая поддержка обусловлена поддержкой TLS-шифрования в процессе подключения. Мы регулярно проверяем работу драйвера, а также тестируем его совместимость с Superset. Мы также тесно сотрудничаем с разработчиками Superset на Preset.io и совместными усилиями стараемся улучшить поддержку.
Мы рассмотрим 3 способа установки Superset, а затем покажем, как подключиться из Superset к БД ClickHouse. Примеры кода предназначены для Ubuntu 18.04, Superset 1.1.0 и clickhouse-sqlalchemy 0.1.6. данные получены из Altinity.Cloud.
Метод установки № 1: Виртуальное окружение Python
Первый способ предусматривает установку Superset непосредственно на Ваш хост. Мы начнем с создания виртуального окружения Python. Представляем Вашему вниманию достаточно простые команды, включая обновление pip до последней версии.
python3 -mvenvclickhouse-sqlalchemy. clickhouse-sqlalchemy/bin/activatepip install --upgrade pip
Установка и запуск Superset
Если Вы хотите установить Superset, следуйте алгоритму, указанной в официальной инструкции Ниже приведены команды, которые я лично использую для подключения Superset к ClickHouse. Возможно, Вам придется немного их скорректировать в соответствии с Вашим окужением.
export FLASK_APP=superset
pip install apache-superset
superset db upgrade
superset fab create-adminsupersetload_examples
supersetinit
Скорее всего, эти команды буду успешно выполнены, и Вы сможете установить драйвер ClickHouse.
Установка драйвера clickhouse-sqlalchemy
В настоящее время на рынке информационных технологий представлено 2 драйвера ClickHouse SQLAlchemy: clickhouse-sqlalchemy и sqlalchemy-clickhouse. Как уже было отмечено ранее, драйвер clickhouse-sqlalchemy является более надежным. Поэтому давайте установим именно его. Это потянет за собой установку модуля Python , который общается с ClickHouse, используя протокол TPC.
pipinstallclickhouse-sqlalchemy
После завершения процесса проверьте версии: для полноценного выполнения TLS, включая расширение Server Name Indications (SNI), версия драйвера clickhouse-driver должна быть 0.2.0 и новее. Именно эти версии запускают SNI, необходимый при подключении к кластерам ClickHouse в таких сервисах, как Altinity.Cloud. Версия драйвера clickhouse-sqlalchemy должна быть 0.1.6 или новее. В них исправлены наиболее распространенные ошибки, благодаря чему совместимость с Superset улучшилась.
pip freeze |grep clickhouse
clickhouse-driver==0.2.0
clickhouse-sqlalchemy==0.1.6
Запуск Superset и вход в систему
Пришло время запустить Superset. Чтобы сделать это, выполните следующую команду:
superset run -p 8088 --with-threads --reload --debugger
В браузере наберите http://localhost:8088 и Вы увидите окно входа в систему. Введите логин и пароль администратора, которые Вы задали при установке Superset, например admin/secret.
Метод установки № 2: Запустите Superset с помощью Docker Compose
Возможно, Вы не хотите возиться с версиями Python, виртуальными окружениями и pip. К счастью, есть другой способ запуска Superset – с помощью Docker Compose.
Начните с установки Docker, а затем приступите к установке инструмента Docker-Compose. Алгоритм установки зависит от платформы, которую Вы используете, в любом случае следуйте инструкции, указанной в официальной документации. После установки Вы должны увидеть что-то вроде этого:
$docker--version
Dockerversion19.03.4,build9013bf583a
$ docker-compose --version
docker-compose version 1.29.1, build c34c88b2
Теперь мы можем быстро запустить Superset с помощью Docker-Compose. Команды, которые использую я, представлены ниже:
git clone https://github.com/apache/superset
cd superset
touch ./docker/requirements-local.txt
echo "clickhouse-driver>=0.2.0" >> ./docker/requirements-local.txt
echo "clickhouse-sqlalchemy>=0.1.6" >> ./docker/requirements-local.txt
docker-compose -f docker-compose-non-dev.yml up
После выполнения этих команд Вы увидите достаточно много сообщений.
NB: Если при загрузке образов Docker возникли ошибки, запустите Docker Login. Мне удалось загрузить контейнер Redis только после того, как я воспользовался этой подсказкой.
После запуска Superset в Docker Вы сможете войти в систему набрав в своем браузе http://localhost:8088/. Логин/пароль по умолчанию - admin/admin.
Метод установки № 2: Используйте Preset Cloud
Если Вы не хотите возиться с локальной установкой Superset, воспользуйтесь вполне достойной альтернативой под названием Preset Cloud от Preset.io. Данный метод установки Superset учтет все зависимости, включая загрузку нужной версии драйвера clickhouse-sqlalchemy.
Ниже Вы сможете увидеть рабочее пространство ClickHouse, которое я использовал для тестирования соединений Preset с Altinity.Cloud.
Кстати,Preset Cloud отлично взаимодействует с Altinity.Cloud.
Подключение к ClickHouse
Независимо от выбранного Вами метода установки Superset следующим шагом стает подключение к БД ClickHouse.
После входа в систему Вы увидите экран с Вашими текущими дашюордами. В правом верхнем углу выберите вкладку Data (Данные) и нажмите Databases (Базы данных). Появится страница с Вашими текущими подключениями к базам данных. Для того, чтобы добавть новую БД, нажмите на кнопку «+ Database».
NB: Если Вы не видите кнопку «+ Database», это означает, что у Вас нет прав на настройку соединений с базой данных. Возможно, Superset был установлен кем-то другим. Для получения прав на вход в систему свяжитесь с владельцем учетной записи.
Заполните поля следующим образом:
DATABASE NAME: clickhouse-public SQLALCHEMY URL: clickhouse+native://demo:demo@github.demo.trial.altinity.cloud/default?secure=true
URL-адрес указывает на ClickHouse в Altinity.Cloud, доступный только для чтения. Ваш экран должен выглядеть следующим образом:
Нажмите на кнопку TEST CONNECTION. Должно появиться сообщение «Соединение установлено!». Для того, чтобы сохранить соединение, нажмите ADD. Вы подключились к ClickHouse и можете приступить к созданию дашбордов.
Возможность подключения Superset URL-адреса ClickHouse
Возможно, Вам интересно узнать, что именно происходит в процессе подключения Superset к ClickHouse. Тогда этот раздел написан именно для Вас. Давайте рассмотрим возможности подключения и разберемся с форматом URL.
Superset написан на языке Python, он использует SQLAlchemy и API для подключения к ClickHouse а также к другим базам данных.
Соединения SQLAlchemy используют специализированный формат URL, который поддерживает несколько драйверов. Для подключения к ClickHouse используйте URL-адрес, похожий на тот, который мы указывали выше:
clickhouse+native://demo:demo@github.demo.trial.altinity.cloud/default?secure=true
Для того, чтобы найти драйвер, который принимает URL SQLAlchemy, система просканирует все доступные драйверы. Подходящий драйвер будет использоваться для отправки запросов к базе данных.
Подробнее об URL ClickHouse
Для ClickHouse существует два основных протокола передачи данных: TCP и HTTP. Драйвер clickhouse-sqlalchemy поддерживает оба протокола, но мы рекомендуем использовать TPP. URL-адреса данного протокола выглядят следующим образом:
clickhouse+native://<user>:<password>@<host>:<port>/<database>[?options…]
Приведенный выше пример URL-адреса соединяется по протоколу TCP с пользователем demo и паролем demo. По умолчанию используется порт 9440, который должен быть открыт для успешного установления соединения.
Если Вы используете сервер ClickHouse, Вы вполне можете обойтись URL-адресом родного протокола, как показано ниже. Он использует пользователя по умолчанию без пароля и не шифрует соединение. Будет задействован порт 9000, который является стандартным для незашифрованных соединений.
clickhouse+native://localhost/default
Родной драйвер протокола допускает выполнение множества опций. Ниже мы приводим пример соединения с таймаутом в 10 секунд, который «заставит» нас использовать шифрование TLS 1.2.
clickhouse+native://demo:demo@github.demo.trial.altinity.cloud/default?secure=true&connect_timeout=10&ssl_version=PROTOCOL_TLSv1_2
Заключение и анонс следующей статьи
Итак, мы рассмотрели 3 способа установки Superset для работы с ClickHouse и показали, как создать первое подключение к базе данных. Во всех случаях мы рекомендуем использовать драйвер clickhouse-sqlalchemy в силу его надежности и безопасности.









