clickhouse:ClickHouse 默认的 SQL 方言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 表、位于 LIMIT 之前的 OFFSET、BETWEEN SYMMETRIC,以及数百个
函数,其中包括那些在两个系统中同名但语义不同的函数 (例如,Trino 的 length
统计 Unicode 码点,因此被转换为 lengthUTF8) 。与 Trino 函数名不冲突的 ClickHouse 函数
依然可用,因此两类函数可以在同一个查询中混用。
Trino 的 JSON 值会映射为 ClickHouse 的 JSON 类型:
JSON '...' 字面量和 json_parse 转换为对 JSON 的 cast,json_format 转换为 toJSONString,路径
函数 (json_extract、json_extract_scalar、json_value、json_query、json_exists、json_size) 则
转换为对应的 ClickHouse 函数。由于 ClickHouse 的 JSON 类型存储的是对象,非对象文档
(顶层数组和标量) 在被 materialize 为 JSON 值时会被拒绝;而路径函数可以接受
任意 JSON 文本。
部分 Trino 语义无法在转换后的查询文本中表达,转而应用于查询上下文:
OUTER JOIN 产生 NULL (join_use_nulls) 、set operations 使用数值 supertype 而非
Variant (use_variant_as_common_type) 、并且必须启用查询分析器 (enable_analyzer) 。查询中显式书写的
SETTINGS 子句仍会覆盖这些设置。
无法通过查询级转换修正的语义仍沿用 ClickHouse 的行为。其中最需要注意的是:
除法运算符 / 在 Trino 中执行整数除法,在 ClickHouse 中则执行浮点除法;并且
对于 Float 参数,ClickHouse 的 round 采用银行家舍入。
使用 EXPLAIN SYNTAX 可以查看查询的转换结果。