Коротко: Altinity SQL Browser — это автономная рабочая среда ClickHouse® SQL без бэкенд-сервиса. Она поставляется в виде одного файла HTML и файла конфигурации, использует OAuth с механизмом RBAC в ClickHouse вместо общей учетной записи службы, а также включает графы зависимостей и EXPLAIN, библиотеки запросов с контролем версий, многооператорные скрипты и прямой экспорт на диск.
Большинство консолей баз данных требуют серьезных усилий по внедрению. Вы поднимаете сервер, устанавливаете на него консоль, предоставляете ей учетную запись службы с собственным набором учетных данных базы данных, а затем тратите драгоценное время на ее патчинг, масштабирование и надежду на то, что никто не найдет способ утечки этих общих учетных данных. Помимо всего прочего, это инфраструктура, которой вам приходится управлять.
Altinity SQL Browser меняет все это. Но прежде чем перейти к его архитектуре и возможностям, отметим, что это просто великолепно выглядящая консоль:
Что отличает SQL Browser, так это его архитектура. В ее основе лежит принципиально иной подход: что если бы консоль вообще не была сервисом? Что если бы это был просто файл?
Один файл HTML, один файл конфигурации, отсутствие бэкенда
SQL Browser представляет собой автономную SQL-среду с поддержкой OAuth для любого кластера ClickHouse, которая поставляется в виде единого HTML-файла и файла конфигурации JSON. Вам не нужен сервер приложений, стоящий между вами и ClickHouse. Для развертывания просто загрузите два файла в каталог user_files и настройте HTTP-обработчик; теперь у вас есть сложный пользовательский интерфейс для выполнения запросов ClickHouse.
Это полностью меняет дело. Здесь нет патчей, масштабирования или ротации секретов, потому что нет сервиса, который нужно патчить, масштабировать или которому нужно передавать секрет. Обновление сводится к копированию нового файла поверх старого, перезапуск не требуется. И поскольку все компоненты (CodeMirror, Chart.js, движок компоновки графов, рендерер markdown, графика для пользовательского интерфейса и т. д.) объединяются в один пакет при сборке, во время выполнения не происходит никаких внешних загрузок. Вот как выглядит архитектура:
Все работает в веб-браузере. Процесс состоит из четырех шагов:
- Веб-браузер загружает sql.html с сервера ClickHouse. Эта страница, в свою очередь, загружает config.json, в котором содержатся сведения об иднтификаторах провайдеров и предварительно настроенных кластерах ClickHouse.
- SQL Browser отображает список сохраненных подключений. Когда пользователь выбирает одно из них, веб-браузер перенаправляет его к соответствующему провайдеру учетных записей.
- После прохождения аутентификации провайдер отправляет токен доступа обратно в веб-браузер.
- С этого момента при работе пользователя с SQL-браузером каждый запрос, отправляемый в кластер, содержит токен доступа. При этом целевой кластер может отличаться от того, который отдал файл sql.html. Кластер ClickHouse наверху диаграммы просто передает файлы в веб-браузер.
(Примечание: вы можете отдавать sql.html и config.json откуда угодно; они не обязательно должны храниться в ClickHouse. Но у вас уже есть сервер ClickHouse, так что…)
Именно модель аутентификации делает это решение по-настоящему интересным. Каждый пользователь входит в систему через провайдер учетных записей своей организации. Приложение получает конфигурацию провайдера из файла конфигурации и автоматически управляет токенами OAuth, отправляя bearer-токен с каждым запросом. ClickHouse проверяет токен и выполняет запрос от имени пользователя, учитывая его роли, привилегии и профили. Задействована вся мощь инструментов RBAC в ClickHouse; вся проделанная вами работа по управлению доступом используется повторно автоматически. (Если вы не используете OAuth, вы также можете подключиться к серверу с помощью имени пользователя и пароля.)
Структура приложения дает главное преимущество в безопасности: оно никогда не хранит учетные данные. В каком-либо конфигурационном файле нет общей учетной записи службы, которая могла бы быть скомпрометирована, потому что учетной записи службы вообще не существует. Если ваши разрешения в ClickHouse запрещают вам обращаться к таблице, база данных отклонит ваш запрос точно так же, как если бы вы ввели его в clickhouse-client. А строгая политика Content-Security-Policy жестко ограничивает список доменов, с которыми страница может взаимодействовать, поэтому у злоумышленника нет возможности атаковать систему из какого-то неизвестного уголка интернета.
Откройте вкладку сети (Network) во время работы, и вы увидите только два источника: ваш провайдер учетных записей (в данном случае Google) и выбранный вами кластер ClickHouse:
Такова архитектура SQL Browser, а теперь давайте рассмотрим некоторые из его функций.
Отображение схемы в виде графа зависимостей
Многие пользователи ClickHouse сталкивались с ситуацией, когда удаление казалось безопасным, а позже выяснялось, что материализованное представление тихо питало агрегат, от которого зависели дашборды половины компании. ClickHouse с радостью позволяет создавать такие паутины зависимостей из материализованных представлений, словарей и распределенных таблиц, наложенных друг на друга, но находить эти связи бывает непросто.
Ответом SQL Browser является граф потока данных, который генерируется простым перетаскиванием базы данных или таблицы в область результатов:
Он простраивает полную цепочку зависимостей: материализованные представления показаны берущими данные из источников и записывающими их в цели, обычные представления читают из своих источников, а узлы расцвечены в зависимости от типа движка, чтобы вы понимали, с чем имеете дело. Также имеется режим Expand, который открывает граф на отдельной вкладке с более подробными карточками для каждого узла: тип движка, количество строк и байт, полный список столбцов с бейджами ключей и полный вывод инструкции SHOW CREATE.
Чтение плана запроса
Команда EXPLAIN PIPELINE в ClickHouse показывает, какие именно физические процессоры читают, преобразуют, агрегируют и объединяют ваши данные. Это чрезвычайно полезная информация, скрытая внутри текстового дерева с отступами, которое становится практически нечитаемым уже после дюжины строк.
Генерирует следующие результаты:
SQL Browser превращает этот же вывод в интерактивный граф процессоров с блоками и стрелками, которые можно перемещать, масштабировать и разворачивать на весь экран. Внезапно неразличимые в тексте закономерности становятся наглядными:
Метки вроде ExpressionTransform x 4 указывают на наличие четырех параллельных потоков чтения. Легко заметить места, где параллельные линии схлопываются в меньшее число потоков; как правило, это первое место, куда стоит заглянуть, если запрос работает медленнее, чем должен.
Создание библиотеки полезных запросов
У каждой команды, использующей ClickHouse, накапливается набор полузабытых запросов для поиска узких мест производительности, устранения неполадок, поиска зависимостей и решения других задач. Обычно они оказываются разбросаны по истории чатов, каналам Slack или личным файлам заметок и регулярно изобретаются заново.
SQL Browser позволяет сохранять эти запросы с именем и описанием, записывая один или несколько операторов в единый JSON-файл, который можно сохранять, открывать или дополнять. И поскольку это просто файл, вы можете поместить его под контроль версий: зафиксировать в репозитории рядом со схемой, к которой он обращается, просматривать изменения в pull request и вводить в курс дела новых членов команды, просто давая им ссылку на файл вместо поиска по Slack. Вот как выглядит импортированная библиотека:
Здесь представлено семь запросов, каждый из которых снабжен коротким описанием. Клик по элементу библиотеки открывает запрос в главном окне и запускает его. Например, вот запрос Daily flights:
Библиотеку также можно экспортировать в виде документа Markdown (каждый запрос получает заголовок, описание и блок SQL в обратных апострофах) или обычного файла .sql, где каждый запрос превращается в комментарий, за которым следует его инструкция. Вы можете запустить этот экспорт .sql напрямую через clickhouse-client или открыть его в таком инструменте, как DBeaver или DataGrip, для пошагового выполнения. Это означает, что одна и та же библиотека, созданная один раз в браузере, может служить входными данными для запланированного задания, справочным материалом для проверяющего миграции и отправной точкой для коллеги, независимо от того, какой клиент они предпочитают.
Запуск всего SQL-скрипта, инструкция за инструкцией
В мире ClickHouse есть небольшое, но постоянное неудобство: HTTP-интерфейс выполняет только одну инструкцию за запрос, хотя clickhouse-client справляется с этим уже много лет с помощью флага --multiquery. SQL Browser тоже с этим справляется. Вставьте скрипт, разделенный точкой с запятой, нажмите «Запуск», и каждая инструкция выполнится по порядку как отдельный запрос, а таблица для каждой инструкции покажет, что произошло.
Вот пример. Мы начинаем с установки session_timezone; это не делает ничего полезного, но мы можем убедиться, что настройка сохраняется на протяжении всей сессии. Затем мы создаем временную таблицу, которую используем в последующих инструкциях. Результатом четвертого запроса является список из 15 локаций с наибольшими средними чаевыми, упорядоченный по количеству поездок:
Мы получаем таблицу, показывающую результаты всех шагов:
При нажатии на любую из строк отображаются результаты для этой конкретной инструкции. Вот результаты последней из них:
Также имеется режим запуска выделенного фрагмента (Run selection). Выделение части скрипта изменяет кнопку «Запуск» так, чтобы выполнялся только этот выбор, что удобно для пошагового прохождения материала блок за блоком:
Наконец, если инструкция завершается с ошибкой, SQL Browser прекратит выполнение в этой точке и отобразит ошибку. Здесь мы указали несуществующее имя таблицы на шаге 3:
Экспорт потоков прямо на диск
Чтобы оставаться отзывчивыми, большинство SQL-консолей ограничивают количество отображаемых строк. Но иногда вам не нужно просматривать данные, вы хотите загрузить их в виде файла и работать с ними за пределами ClickHouse. Требовать от вкладки браузера буферизации миллионов строк для создания файла для скачивания непрактично.
Функция экспорта в SQL Browser полностью обходит окно браузера. Она передает результаты запроса в виде потока напрямую в файл на диске с помощью API File System Access браузера. Это означает, что использование памяти остается неизменным, независимо от того, составляет ли результат тысячу строк или миллиард. Формат вывода — это то, что вы укажете в предложении FORMAT запроса, будь то Parquet, CSV, TSV, JSONEachRow, Avro или другие, с автоматическим применением правильного расширения файла.
Нажатие кнопки «Экспорт» запускает запрос и загружает результаты, какими бы большими они ни были, на ваш компьютер. В этом примере запрос был выполнен, и на данный момент чуть более чем за две минуты было загружено 4,16 ГБ данных TSV:
Развертывание: сначала разверните локально, а затем переходите на уровень всей команды, когда будете готовы
Если вы еще не готовы ничего развертывать на своем сервере ClickHouse, есть локальный вариант: одна команда curl устанавливает легковесный интерпретатор Python (без node, без pip, без этапа сборки), который читает ваш существующий файл ~/.clickhouse-client/config.xml и предлагает сохраненные соединения в средстве выбора входа после тихого опроса хостов на предмет того, какие из них действительно отвечают.
Запросы по-прежнему идут напрямую из вашего браузера в кластер; инструмент запуска передает только само приложение и список хостов. Когда вы перерастете это и вам понадобится общий постоянно доступный URL, к которому сможет обращаться вся ваша команда, это будет тот же файл, только обслуживаемый ClickHouse, а не вами.
Резюме
Философия SQL Browser проста: везде, где это возможно, позволяйте базе данных выполнять работу, на которую она уже способна, и избегайте внедрения новой инфраструктуры, новых учетных данных или новых точек отказа просто ради создания более удобного интерфейса поверх нее. Он полностью оправдывает обещания из нашего заголовка:
- Мощный — распутывайте цепочки зависимостей, находите узкие места производительности, запускайте несколько запросов в сеансе и извлекайте большие наборы данных.
- Легковесный — это всего два файла. Поместите их в user_files, настройте HTTP-обработчик, и все готово.
- Безопасный — поскольку инструмент интегрирован с вашей инфраструктурой OAuth, созданные вами политики безопасности применяются автоматически.
Вы можете использовать SQL Browser напрямую с демо-сервера Altinity. Вы также можете посетить домашнюю страницу SQL Browser для получения подробной информации об установке, прочитать статьи о функциях и проектных решениях браузера, а также ознакомиться с исходным кодом проекта. (Он, конечно же, с открытым исходным кодом.) Приятного использования!










