
❝数据迁移好比搬家,每个数据工程师都曾面临这样的烦恼:一大堆SQL语句需要改写,就像要把所有家具都重新组装一遍。
不同系统的SQL语法就像不同的方言,虽然都在说SQL这门语言,却各有各的"口音"和习惯。"要是有个'翻译官'就好了!" - 这大概是每个经历过系统迁移的工程师的心声。
今天要给大家介绍的就是这样一个神奇的"翻译官" - Apache Doris的SQL方言转换功能。它不仅能听懂Presto、Trino、Hive、ClickHouse、Oracle 等十几种SQL方言,还能帮你自动完成转换!

Doris SQL 方言兼容: 让数据迁移如丝般顺滑
"面对系统迁移,SQL改写就像在玩俄罗斯方块,一不小心就掉坑里了。"
这句话道出了许多数据工程师的心声。随着数据规模的增长和业务的发展,企业往往需要将数据从一个系统迁移到另一个系统。这个过程中,最头疼的莫过于 SQL 语法的兼容性问题。
每个数据系统都有其独特的 SQL 方言,就像每个地方都有自己的方言一样。虽然都是在说 SQL,却各有各的"口音"。当你需要将数据从 Presto/Trino、ClickHouse 或者 Hive 迁移到 Doris 时,成百上千的 SQL 语句都需要重写,这无疑是一项巨大的工程。

Apache Doris 深知这一痛点。在 2.1 版本中,Doris 推出了 SQL 方言兼容功能,支持包括 Presto、Trino、Hive、ClickHouse、Oracle 等在内的十几种主流 SQL 方言。用户只需设置一个简单的会话变量,就能让 Doris 直接理解和执行其他系统的 SQL 语法。
兼容性测试显示,在某些用户的实际业务场景中,Doris 对 Presto SQL 的兼容度高达 99.6%,对 ClickHouse 方言的兼容度达到 98%。这意味着绝大多数 SQL 语句无需修改就能直接在 Doris 中运行。
对数据工程师而言,这宛如手持一个万能翻译器,不管是哪种 SQL "方言",都能自动转换成 Doris 能理解的语言。系统迁移不再需要手动改写大量 SQL,大大降低了迁移成本和风险。
从"方言困境"到"语言大师"

张工是一位经验丰富的数据工程师,最近他接到了一个棘手的任务 - 将公司的数据分析平台从ClickHouse迁移到Apache Doris。面对成百上千的SQL语句,他不禁揉了揉太阳穴。
"要是能有个工具,直接把ClickHouse的SQL转成Doris的就好了。" 张工喃喃自语。就在这时,他发现了Doris的SQL方言兼容功能。
让我们跟随张工的脚步,看看他是如何化解这个难题的:
首先,下载最新版本的 SQL 方言转换工具:https://www.selectdb.com/download/tools
在任意 FE 节点,通过以下命令启动服务:
# 配置服务端口
vim apiserver/conf/config.conf
# 启动 SQL Converter for Apache Doris 转换服务
sh apiserver/bin/start.sh
# 如需前端界面, 可在 webserver 中配置相应的端口并启动, 不需要前端则可以忽略以下操作
vim webserver/conf/config.conf
# 启动前端界面
sh webserver/bin/start.sh
启动 Doris 集群(2.1 或更高版本)并在服务启动后,在Doris中设置SQL转换服务地址:
set global sql_converter_service_url = "http://127.0.0.1:5001/api/v1/convert"
接着,只需一行命令切换SQL方言:
set sql_dialect=clickhouse;
就这么简单,张工发现原本需要手动改写的SQL语句,现在可以直接在Doris中执行了:
mysql> select toString(start_time) as col1,
arrayCompact(arr_int) as col2,
arrayFilter(x -> x like '%World%',arr_str)as col3,
toDate(value) as col4,
toYear(start_time)as col5,
addMonths(start_time, 1)as col6,
extractAll(value, '-.')as col7,
JSONExtractString('{"id": "33"}' , 'id')as col8,
arrayElement(arr_int, 1) as col9,
date_trunc('day',start_time) as col10
FROM test_sqlconvert
where date_trunc('day',start_time)= '2024-05-20 00:00:00'
order by id;
+---------------------+-----------+-----------+------------+------+---------------------+-------------+------+------+---------------------+
| col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 | col9 | col10 |
+---------------------+-----------+-----------+------------+------+---------------------+-------------+------+------+---------------------+
| 2024-05-20 13:14:52 | [1, 2, 3] | ["World"] | 2024-01-14 | 2024 | 2024-06-20 13:14:52 | ['-0','-1'] | "33" | 1 | 2024-05-20 00:00:00 |
+---------------------+-----------+-----------+------------+------+---------------------+-------------+------+------+---------------------+
1 row in set (0.02 sec)
"这简直太神奇了!" 张工惊喜地发现,这个看似复杂的ClickHouse SQL语句被完美地执行了。
不仅如此,他还发现Doris还提供了可视化界面,支持文本输入和文件上传两种模式。对于单个 SQL,用户可以直接在 Web 界面中进行文本输入。如若存量 SQL 规模庞大,可以通过上传文件进行多个 SQL 的一键批量转换:

通过可视化界面,张工可以批量上传SQL文件,一键完成转换。"这不就相当于有了一个全能翻译官,不管是ClickHouse还是其它的SQL,都能无缝切换。"张工感叹道。
更让他惊喜的是,这个"翻译官"的准确率相当高。在实际测试中,对Presto SQL的兼容度达到99.6%,对ClickHouse的兼容度也有98%。这意味着绝大多数SQL都能直接使用,极大地提升了迁移效率。
数据迁移项目的压力骤减,张工终于能睡个好觉了。不过他还有个小担心:"如果遇到不支持的语法怎么办?"
这时他发现,Doris的开发团队非常重视用户反馈。通过社群、Ask论坛、GitHub Issues或邮件组,用户可以随时反馈问题,推动SQL方言转换功能的持续优化和完善。
这种开放和重视用户反馈的态度,让张工对未来充满信心。"下次再遇到数据迁移项目,我就知道该用什么'神器'了!"
下期,我们将一起探讨其它更有趣有用有价值的内容,敬请期待!

一臻数据致力于大数据AI时代的前沿内容分享,会持续分享更多有趣有用有态度的知识。同时也欢迎大家投稿,共建共进,帮助圈友们冲破认知壁垒,实现自我提升!
另外,整理了份《一臻数据知识库》,其中包含 Apache Doris 和 Data+AI 的学习资料、学习课程、白皮书、研究报告、行业标准 和 实践指南 等内容,会持续更新,欢迎关注公众号,免费领取。
资料获取 🔗 欢迎扫描下方二维码图片 备注【Doris】免费领取❗️

往期推荐

点击下方蓝字关注一臻数据




