首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >当Doris学会了"说方言": 让你的SQL自由转换

当Doris学会了"说方言": 让你的SQL自由转换

作者头像
一臻数据
发布2024-12-25 15:26:31
发布2024-12-25 15:26:31
5880
举报
文章被收录于专栏:一臻数据一臻数据

数据迁移好比搬家,每个数据工程师都曾面临这样的烦恼:一大堆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 节点,通过以下命令启动服务:

代码语言:javascript
复制
# 配置服务端口
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转换服务地址:

代码语言:javascript
复制
set global sql_converter_service_url = "http://127.0.0.1:5001/api/v1/convert"

接着,只需一行命令切换SQL方言:

代码语言:javascript
复制
set sql_dialect=clickhouse;

就这么简单,张工发现原本需要手动改写的SQL语句,现在可以直接在Doris中执行了:

代码语言:javascript
复制
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方言转换功能的持续优化和完善。

这种开放和重视用户反馈的态度,让张工对未来充满信心。"下次再遇到数据迁移项目,我就知道该用什么'神器'了!"

下期,我们将一起探讨其它更有趣有用有价值的内容,敬请期待!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一臻数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Doris SQL 方言兼容: 让数据迁移如丝般顺滑
  • 从"方言困境"到"语言大师"
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档