clickhouse: Диалект SQL, используемый в ClickHouse по умолчаниюprql: конвейерный реляционный язык запросов (PRQL)kusto: язык запросов Kusto (KQL)trino: Trino SQL
dialect.
Стандартный SQL
Стандартный SQL — язык запросов ClickHouse по умолчанию.Конвейерный реляционный язык запросов (PRQL)
Чтобы включить PRQL:Язык запросов Kusto (KQL)
Чтобы включить KQL:Query
Response
Trino SQL
Чтобы включить диалект Trino:Query
Response
ARRAY[...], TRY_CAST, UNNEST (транслируется в ARRAY JOIN),
конструкторы и типы ROW, таблицы VALUES, OFFSET перед LIMIT, BETWEEN SYMMETRIC, а также несколько сотен
функций, включая те, имена которых есть в обеих системах, но с разной семантикой (например, в Trino length
считает кодовые точки Unicode и транслируется в lengthUTF8). Функции ClickHouse, имена которых не конфликтуют с
именами Trino, остаются доступными, поэтому оба семейства функций можно смешивать в одном запросе.
Значения JSON из Trino отображаются на тип ClickHouse JSON:
литералы JSON '...' и json_parse превращаются в приведение к JSON, json_format — в toJSONString, а функции
работы с путями (json_extract, json_extract_scalar, json_value, json_query, json_exists, json_size)
транслируются в свои аналоги в ClickHouse. Поскольку тип JSON в ClickHouse хранит объекты, документы, не являющиеся
объектами (массивы и скалярные значения верхнего уровня), отклоняются при материализации в виде значений JSON;
функции работы с путями принимают любой JSON-текст.
Некоторые особенности семантики Trino невозможно выразить в тексте транслированного запроса — вместо этого они
применяются к контексту запроса: внешние соединения дают NULL (join_use_nulls), операции над множествами используют
числовой супертип, а не Variant (use_variant_as_common_type), и требуется query analyzer (enable_analyzer). Явно
указанная в запросе секция SETTINGS по-прежнему имеет приоритет над этими значениями.
Семантика, которую нельзя исправить трансляцией на уровне запроса, остаётся семантикой ClickHouse. В первую очередь
это касается оператора деления /: в Trino он выполняет целочисленное деление, а в ClickHouse — деление с плавающей
точкой; кроме того, round в ClickHouse для аргументов типа Float использует банковское округление.
Используйте EXPLAIN SYNTAX, чтобы увидеть, как транслируется запрос.