SQL 转换器

最近更新时间:2026-06-05 15:58:30

我的收藏

功能介绍

TCHouse-D SQL 转换功能是降低用户迁移和使用成本的重要工具,核心功能是支持自动将其 Trino/Presto、Hive、Spark SQL、ClickHouse 编写的查询语句,转换为语法和语义上等效的 Apache Doris SQL 语句。
TCHouse-D 的 SQL 转换器支持在引擎层启动 SQL 转换器进程方便外部调用的自动使用,也可在 SQL 工作区通过页面功能的转换器弹窗执行方言转换并一键应用到 SQL 编辑器中。
说明:
当前3.0及以上内核的版本存算分离集群支持此功能。
当前“功能一:TCHouse-D 控制台一键开启”为白名单功能,若您有使用需求,请 提交工单 联系我们开通。
当前功能仅可作为辅助功能使用。因引擎方言的差异性在转换时无法做到转换全面兼容,部分场景需要人工评估转换有效性,如转换有异常请 提交工单联系我们支持。

功能一:TCHouse-D 控制台一键开启(存在方言兼容性可能引入查询阻断,请慎重开通)

TCHouse-D 在 2026 年 5 月的新版本中,将 SQL 转换器集成到了控制台,支持集群粒度一键开启,无需手动部署服务。

操作步骤

2. 在集群列表中选择目标集群,在集群操作列中选择开启SQL转换器开关,一键开启。

说明:
在控制台中开启后,系统自动在 FE 节点部署并启动 SQL Converter 服务,无需手动配置 sql_converter_service_url。

使用方式一:Session 级方言设置

在 SQL 工作区或 JDBC 连接中,直接设置会话方言后编写原始 SQL:
-- 1. 设置来源方言
SET sql_dialect = 'presto';
-- 2. 直接写 Presto 语法 SQL,Doris 自动转译执行
SELECT date_format(cast(order_time AS timestamp), '%Y-%m') AS month,
count(*) AS cnt
FROM orders
GROUP BY 1
ORDER BY 1;

-- 3. 用完切回默认
SET sql_dialect = 'doris';
参数
说明
sql_dialect
会话变量,仅对当前会话生效
支持值
presto / trino / clickhouse / hive / postgresql / spark / oracle
生效范围
当前 Session,连接断开后重置

使用方式二:SQL_CONVERT 函数(单条转换)

-- 语法:SQL_CONVERT('source_dialect', 'raw_sql')
SELECT SQL_CONVERT('clickhouse',
'SELECT toYYYYMM(create_time), count() FROM user_log GROUP BY toYYYYMM(create_time)'
);
返回结果就是转后的 Doris SQL 文本,可以再复制执行:
-- 返回转译结果:
SELECT date_format(create_time, '%Y%m'), count(*) FROM user_log GROUP BY date_format(create_time, '%Y%m')


功能二:SQL 工作区使用转换器(推荐)

TCHouse-D 的 SQL 工作区已原生集成 SQL 转换器功能。

操作步骤

1. 登录 TCHouse-D 控制台,选择目标集群进入 SQL 工作区。
2. 在 SQL 编辑器上方找到 SQL 转换器入口。

3. 选择来源方言(例如 Presto、ClickHouse 等等)。
4. 输入或粘贴需要转换的 SQL 语句。
5. 单击

6. 转换结果支持一键应用到编辑器中,可直接执行。
说明:
SQL 转换器面对 AS Tables 时,不支持子查询的大小写转换。

支持的 SQL 方言

DQL(查询)方言支持:
方言
兼容度
典型转换场景
Presto
99.6%
日期函数、数组函数、标识符改写
Trino
approx_distinct > APPROX_COUNT_DISTINCT
ClickHouse
98%
toString > CAST、arrayCompact > array_distinct
Hive SQL
LATERAL VIEW > CROSS JOIN、date_format 适配
PostgreSQL
类型系统、函数映射
Spark
Spark SQL 语法适配

DDL(建表语句)方言支持:

从 Doris SQL Converter 1.0.3 版本起,支持以下方言的 DDL 转换:
方言
DDL 转换支持说明
Hive
建表语句转换为 Doris DDL
Presto (PrestoDB)
建表语句转换为 Doris DDL
ClickHouse
建表语句转换为 Doris DDL,函数兼容性大幅提升
Oracle
建表语句转换为 Doris DDL
PostgreSQL
建表语句转换为 Doris DDL
说明:
转换流程:用户 SQL > FE 识别方言 > HTTP 调用 Converter 服务 > 方言转换 > Doris 标准 SQL > Nereids Parser 解析 > 生成执行计划 > BE 执行