Перейти к основному содержимому

Свободный режим SQL-редактора (редактор со встроенным языком структурированных запросов)

Свободный режим SQL-редактора — это расширенная среда для написания запросов, предназначенная для опытных аналитиков и разработчиков, глубоко знающих SQL и специфику СУБД ClickHouse. Режим снимает ограничения в стандартном редакторе SQL, предоставляя полный контроль над структурой и логикой SQL-запроса.

Ключевые особенности и отличия от стандартного режима

  • Полный контроль над запросом

    • Отсутствие автоматической обёртки: Система не добавляет конструкции SELECT ... FROM. Вы пишете запрос целиком, начиная с WITH (CTE) или SELECT.
    • Произвольная структура: Доступно использование любых SQL-конструкций: WITH (CTE), вложенные подзапросы в любой части запроса, сложные JOIN.
    • Прямая работа с функциями ClickHouse: Полный доступ ко всем встроенным и агрегационным функциям ClickHouse без каких-либо ограничений.
    • Возможность использования любых оконных функций: доступны все функции предусмотренные ClickHouse. Их использование не ограничено отсутствием возможности применения DISTINCT в секции SELECT.
    • Возможность использования функционала массивов: поддерживается весь функционал массивов ARRAY и функций для работы с ними.
    • Ограничение вывода результатов запроса: свободное использование LIMIT и OFFSET.
  • Предназначение для сложных задач

    • Режим идеально подходит для реализации комплексной бизнес-логики, многоэтапных расчётов, прототипирования запросов для дашбордов (отчётов) и глубокой аналитики данных, требующей максимальной гибкости.
  • Требования к пользователю

    • Обязательное знание SQL (язык структурированных запросов): Пользователь должен самостоятельно обеспечивать корректность синтаксиса и логики запроса.
    • Понимание модели данных: Необходимо точно знать структуру таблиц, имена полей и типы данных, так как автоматическая подстановка полей из "Карты модели" может быть ограничена в зависимости от сложности написанного запроса.
    • Ответственность за производительность: Пользователь самостоятельно оптимизирует запрос, учитывая особенности ClickHouse. Некорректные или тяжелые запросы могут влиять на производительность системы.
  • Ограничения режима

    • Только SELECT запросы: запрещены запросы INSERT, DELETE, DROP и иные в целях безопасности хранилища данных. Помимо этого, обращаться в запросе можно только к базе данных, связанной с текущим проектом.

Общий вид расширенного SQL редактора

Переключиться в Свободный режим SQL можно при создании или редактировании показателей через стандартный SQL-редактор. Система запросит подтверждение, так как после активации этого режима возврат к стандартному интерфейсу для данного показателя будет невозможен без переписывания логики.

В свободном режиме, как и в стандартном, осуществляется проверка синтаксиса запроса. В случае выявлении ошибки появляется информация о самой ошибке, а также в интерфейсе подсвечивается место, где допущена ошибка.

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

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

Карта модели

Для упрощения работы в расширенный редактор встроена карта модели данных, аналогичная стандартному редактору:

  • Отображает все доступные поля таблиц;
  • Оснащена поиском;
  • Позволяет вставить нужное поле в текст запроса одним кликом.

image.png

Взаимодействие с фильтрами дашборда

Если у фильтра в настройках включено влияние на визуальный компонент, созданный с помощью расширенного редактора SQL, то условие фильтрации будет добавлено в SQL запрос в секцию WHERE основной части запроса автоматически. На это стоит обращать внимание, например, если в своем запросе пользователь не использует таблицу, по которой осуществляется фильтрация, это приведет к ошибке.

Пример, показывающий ошибочный запрос в результате фильтрации по таблице sales, которая не используется в самом запросе:

WITH
test_cte AS (
(
SELECT
456 AS y
)
)
SELECT
x.x as x,
y.y as y
FROM
(
SELECT
arrayJoin ([123, 789]) AS x
) AS x
CROSS JOIN test_cte AS y
WHERE
sales.event_date BETWEEN '2025-01-07' AND '2025-01-08'

В таком случае стоит отключать влияние фильтра на данный визуальный компонент.

Пример использования

В стандартном режиме Вы вводите только выражение для поля, например:

sumIf(amount, event_type = 'purchase')

В Свободном режиме Вы создаёте полноценный запрос, например:

WITH user_sessions AS (
SELECT
user_id,
session_id,
sumIf(amount, event_type = 'purchase') as revenue,
max(created_at) as last_event
FROM events
WHERE created_at >= today() - 7
GROUP BY user_id, session_id
)
SELECT
us.user_id as user_id,
count() as sessions_count,
sum(us.revenue) as total_revenue,
any(users.segment) as user_segment
FROM user_sessions us
LEFT JOIN dim_users users ON us.user_id = users.id
WHERE revenue > 0
GROUP BY us.user_id
ORDER BY total_revenue DESC

Особенности использования с разными типами визуальных компонентов

  • Круговые, линейный и столбчатые диаграммы. Важен порядок указания разрезов и показателей в основной секции запроса.

    SELECT
    category_id as category,
    product_id as product,
    SUM(revenue) as sum_revenue,
    count(*) as total_rows
    FROM
    sales
    GROUP BY
    category_id,
    product_id

    Данный пример создаст два разреза - по категории и по товару. Разрез идентифицируется системой по наличию поля в секции GROUP BY. Также, будут созданы два показателя - сумма продаж, и кол-во заказов(кол-во строк в таблице).
    Если изменить порядок разрезов, это может привести к нарушению логики Drill-Down, когда пользователь будет сначала выбирать товар, а затем видеть категорию товара.

  • Таблицы. На данный момент существует два ограничения применения свободного режима SQL в данных видах визуальных компонентов: отсутствует возможность выбора разреза в шапке таблицы и группировки в виде раскрывающихся строк. Визуально в таблице разрезы и показатели выводятся в том же порядке, что и в основной части запроса SQL.

  • Диаграмма Ганта. На данный момент в виду специфики данного типа визуальных компонентов, свободный режим SQL-редактора не доступен.

Важное примечание

Используйте этот режим для реализации максимально сложной и специфической логики, когда возможностей стандартного редактора SQL недостаточно.