❝午间,小王正对着电脑屏幕发愁。 他是公司数据平台的负责人,最近接到一个任务:需要实时分析来自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的最大威力,需要了解它的关键配置选项。
首先是驱动包路径,可以通过三种方式指定:
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 语句,并且需要直接使用数据源对应的语法。
-- 插入数据
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️⃣ 如果只有 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%的时间处理数据同步,现在这些时间都可以用来做真正的分析了。
"
下次当你面临多数据源分析挑战时,不妨试试这把数据世界的万能钥匙
,也许它会像改变小王一样,改变你的数据分析方式。
下期,我们将一起探讨其它更有趣有用有价值的内容,敬请期待!