暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

当MySQL、PostgreSQL和Oracle吵架时,Doris JDBC Catalog充当了'和事佬'

一臻数据 2025-03-10
271

点击上方 蓝字 关注一臻数据👆 

免费领取 DeepSeek➕数据AI知识库 🔗 一起共建共进

午间,小王正对着电脑屏幕发愁。 

他是公司数据平台的负责人,最近接到一个任务:需要实时分析来自MySQL、PostgreSQL和Oracle三个不同数据库的数据。 

"我得写三套ETL程序,把数据同步到Doris里,这工作量..." 小王揉了揉发酸的眼睛。

 "何必这么麻烦?用JDBC Catalog啊!"同事小李的声音从背后传来。 

小王一脸困惑:"JDBC Catalog是什么神仙功能?" 

小李笑了:"它就像数据世界的万能钥匙,一把钥匙开启多个数据库的大门。"

打破数据孤岛的神器

Doris JDBC Catalog的核心魅力在于它能通过标准JDBC接口连接多种数据库,包括MySQL、PostgreSQL、Oracle、SQL Server、IBM Db2、ClickHouse、SAP HANA和OceanBase等。

让我们来看一个实际案例:

CREATE CATALOG mysql_source PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="secret",
    "jdbc_url" = "jdbc:mysql://example.net:3306",
    "driver_url" = "mysql-connector-j-8.3.0.jar",
    "driver_class" = "com.mysql.cj.jdbc.Driver"
)

就这么简单!

创建完成后,你可以像查询Doris本地表一样查询MySQL中的表:

-- 查看所有数据库
SHOW DATABASES FROM mysql_source;

-- 查看test数据库中的表
SHOW TABLES FROM mysql_source.test;

-- 直接查询MySQL中的表
SELECT * FROM mysql_source.test.users;

对于数据分析师来说,这意味着不需要再编写复杂的ETL流程,不需要担心数据一致性问题,也不需要增加额外的存储成本。

数据依然存储在原始数据库中,但你可以像使用本地表一样查询它们。

JDBC Catalog的魔法配方

要发挥JDBC Catalog的最大威力,需要了解它的关键配置选项。

驱动包配置

首先是驱动包路径,可以通过三种方式指定:

1.直接提供文件名
,如mysql-connector-j-8.3.0.jar
,系统会在jdbc_drivers/
目录下寻找。

2.本地绝对路径
,如file:///path/to/mysql-connector-j-8.3.0.jar

3.HTTP地址
,系统会自动下载Driver文件。

小技巧

为了更好地管理驱动包,可以通过jdbc_driver_secure_path
 FE 配置项允许的驱动包路径,增强安全性。

连接池调优

连接池对性能影响巨大。例如,每次查询都要建立新连接,就像每次进入办公室都要重新申请门禁卡一样麻烦!

关键参数包括:

connection_pool_min_size
:最小连接数,默认为1
connection_pool_max_size
:最大连接数,默认为30
connection_pool_max_wait_time
:等待连接的最大毫秒数,默认5000
connection_pool_max_life_time
:连接最大生命周期,默认1800000毫秒
-- 根据负载调整连接池大小
ALTER CATALOG mysql_source SET PROPERTIES (
    'connection_pool_max_size' = '50',
    'connection_pool_max_wait_time' = '10000'
);

进阶玩法:语句透传

小王好奇地问:"如果我想在MySQL中执行一些DDL或DML操作怎么办?"

小李神秘一笑:"Doris提供了语句透传功能,可以直接执行数据源的原生SQL语句。"

DDL和DML透传

目前仅支持 DDL 和 DML 语句,并且需要直接使用数据源对应的语法。

-- 插入数据
CALL EXECUTE_STMT("mysql_source""INSERT INTO users VALUES(1, 'Zhang San'), (2, 'Li Si')");

-- 删除数据
CALL EXECUTE_STMT("mysql_source""DELETE FROM users WHERE id = 2");

-- 创建表
CALL EXECUTE_STMT("mysql_source""CREATE TABLE new_users (id INT, name VARCHAR(50))");

查询透传
-- 使用query表函数执行原生查询
SELECT * FROM query(
  "catalog" = "mysql_source"
  "query" = "SELECT id, name FROM users WHERE id > 10"
);

透传功能让你能够充分利用源数据库的特性和语法,同时保持在Doris中的统一管理。

踩坑指南:常见问题及解决方案

数据库连接的世界并不总是阳光明媚,有时会碰到一些坑。

连接超时问题

最常见的错误之一是:Connection is not available, request timed out after 5000ms

产生原因可能是:

  • 原因 1:网络问题(例如,服务器不可达)
  • 原因 2:身份认证问题,例如无效的用户名或密码
  • 原因 3:网络延迟过高,导致创建连接超过 5 秒超时时间
  • 原因 4:并发查询过多,超过了连接池配置的最大连接数

解决方案:

1️⃣ 如果只有 Connection is not available, request timed out after 5000ms
 这一类错误,请检查 原因 3 和 原因 4:

首先,检查是否存在网络延迟过高或资源耗尽的情况。

并调大连接池的最大连接数和连接超时时间:

-- 增加最大连接数
ALTER CATALOG mysql_source SET PROPERTIES ('connection_pool_max_size' = '100');

-- 增加等待时间
ALTER CATALOG mysql_source SET PROPERTIES ('connection_pool_max_wait_time' = '10000');

2️⃣ 如果除了 Connection is not available, request timed out after 5000ms
 之外还有其他错误信息,请检查这些附加错误:

网络问题(例如,服务器不可达)可能导致连接失败。请检查网络连接是否正常。

身份认证问题(例如,用户名或密码无效)也可能导致连接失败。请检查配置中使用的数据库凭据,确保用户名和密码正确无误。

根据具体错误信息,调查与网络、数据库或身份认证相关的问题,找出根本原因。

结语

Doris JDBC Catalog为数据分析带来了颠覆性的变化,它让我们能够以一种优雅而高效
的方式连接多种数据源,实现真正的查询即所得
。没有复杂的ETL,没有数据同步的烦恼,只有流畅的分析体验。

就像小王后来对小李说的:"JDBC Catalog让我看到了数据世界的新可能。以前我花80%的时间处理数据同步,现在这些时间都可以用来做真正的分析了。
"

下次当你面临多数据源分析挑战时,不妨试试这把数据世界的万能钥匙
,也许它会像改变小王一样,改变你的数据分析方式。

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


一臻数据致力于大数据AI时代的前沿内容分享,会持续分享更多有趣有用有态度的知识。同时也欢迎大家投稿,共建共进,帮助圈友们冲破认知壁垒,实现自我提升!

另外,整理了份 一臻数据知识库 ,其中包含 Apache Doris Data+AI 的学习资料、学习课程、白皮书、研究报告、行业标准  实践指南 等内容,会持续更新,欢迎关注公众号,免费领取

🔗 欢迎扫描下方二维码 ⬇️ 备注 666 免费领取资料  加入Doris官方群和全球最活跃的PowerData数据社区❗️



往期推荐

走进开源,拥抱开源

大数据平台开发规范示例

大数据仓库开发规范示例

Flink CDC 1.0至3.0回忆录

3分钟!教会你用Doris+DeepSeek搭建RAG知识库(喂饭级教程)

全网Doris+DeepSeek使用手册(客服/图表/PPT/贺岁诗)!学会了Doris熟练度提高90%【建议收藏】

深夜无需加班,Apache Doris让数据自己会跑

我用X2Doris干翻了3000张表,老板还以为我组了个团队

超强满血不收费的AI绘图教程来了(在线Stable Diffusion一键即用)

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

文章转载自一臻数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论