JDBC 外表
JDBC External Table Of Doris 提供了Doris通過數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)接口(JDBC)來訪問外部表,外部表省去了繁瑣的數(shù)據(jù)導(dǎo)入工作,也省去了之前ODBC繁雜的驅(qū)動(dòng)安裝部署及版本匹配問題,兼容性更好,操作更簡(jiǎn)單,讓Doris可以具有了訪問各式數(shù)據(jù)庫的能力,并借助Doris本身的OLAP的能力來解決外部表的數(shù)據(jù)分析問題:
支持各種數(shù)據(jù)源接入Doris
支持Doris與各種數(shù)據(jù)源中的表聯(lián)合查詢,進(jìn)行更加復(fù)雜的分析操作
創(chuàng)建 JDBC Resource
Doris 目前支持的JDBC數(shù)據(jù)源有:MySQL,Oracle,PostgreSQL,SQLServer,Clickhouse
這里我們以MySQL為例來演示
CREATE EXTERNAL RESOURCE jdbc_resource
properties (
"type"="jdbc",
"user"="root",
"password"="zhangfeng",
"jdbc_url"="jdbc:mysql://192.168.31.54:3306/demo",
"driver_url"="file:///Users/zhangfeng/.m2/repository/mysql/mysql-connector-java/8.0.29/mysql-connector-java-8.0.29.jar",
"driver_class"="com.mysql.cj.jdbc.Driver"
);
這里 driver_url 可以使用本地路徑和http路徑兩種方式,
注意:
如果是本地路徑要求所有 FE 和 BE 節(jié)點(diǎn)都要有這個(gè)驅(qū)動(dòng) Jar 包
http 方式是 FE 和 BE 是通過 http 方式下載驅(qū)動(dòng)到本地
http方式示例如下:
CREATE EXTERNAL RESOURCE jdbc_resource
properties (
"type"="jdbc",
"user"="root",
"password"="zhangfeng",
"jdbc_url"="jdbc:mysql://192.168.31.54:3306/demo",
"driver_url"="http://192.168.31.54/8.0.29/mysql-connector-java-8.0.29.jar",
"driver_class"="com.mysql.cj.jdbc.Driver"
);
創(chuàng)建MySQL JDBC 外表
CREATE TABLE `order_analysis` (
`date` varchar(20),
`user_src` varchar(20) ,
`order_src` varchar(11) ,
`order_location` varchar(2),
`new_order` int DEFAULT NULL,
`payed_order` int DEFAULT NULL,
`pending_order` int DEFAULT NULL,
`cancel_order` int DEFAULT NULL,
`reject_order` int DEFAULT NULL,
`good_order` int DEFAULT NULL,
`report_order` int DEFAULT NULL
) ENGINE=JDBC
PROPERTIES (
"resource" = "jdbc_resource",
"table" = "order_analysis",
"table_type"="mysql"
);
查詢外表

這里我們使用MySQL來演示,其他的JDBC外表使用方式一樣,具體請(qǐng)參靠官方文檔:https://doris.apache.org/zh-CN/docs/dev/ecosystem/external-table/jdbc-of-doris
Mutil Catalog 訪問 MySQL
多源數(shù)據(jù)目錄(Multi-Catalog)是 Doris 1.2.0 版本中推出的功能,旨在能夠更方便對(duì)接外部數(shù)據(jù)目錄,以增強(qiáng)Doris的數(shù)據(jù)湖分析和聯(lián)邦數(shù)據(jù)查詢能力。
在之前的 Doris 版本中,用戶數(shù)據(jù)只有兩個(gè)層級(jí):Database 和 Table。當(dāng)我們需要連接一個(gè)外部數(shù)據(jù)目錄時(shí),我們只能在Database 或 Table 層級(jí)進(jìn)行對(duì)接。比如通過 create external table 的方式創(chuàng)建一個(gè)外部數(shù)據(jù)目錄中的表的映射,或通過 create external database 的方式映射一個(gè)外部數(shù)據(jù)目錄中的 Database。如果外部數(shù)據(jù)目錄中的 Database 或 Table 非常多,則需要用戶手動(dòng)進(jìn)行一一映射,使用體驗(yàn)不佳。
而新的 Multi-Catalog 功能在原有的元數(shù)據(jù)層級(jí)上,新增一層Catalog,構(gòu)成 Catalog -> Database -> Table 的三層元數(shù)據(jù)層級(jí)。其中,Catalog 可以直接對(duì)應(yīng)到外部數(shù)據(jù)目錄。目前支持的外部數(shù)據(jù)目錄包括:
Hive MetaStore:對(duì)接一個(gè) Hive MetaStore,從而可以直接訪問其中的 Hive、Iceberg、Hudi 等數(shù)據(jù)。
Elasticsearch:對(duì)接一個(gè) ES 集群,并直接訪問其中的表和分片。
JDBC: 對(duì)接數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)接口(JDBC)來訪問各式數(shù)據(jù)庫的數(shù)據(jù)。(目前只支持訪問MYSQL)
JDBC Mutil Catalog
下面我們以 MySQL 為例演示 Mutil Catalog 使用
用于創(chuàng)建一個(gè)名為 jdbc 的 Catalog 連接指定的 MySQL
CREATE CATALOG jdbc PROPERTIES (
"type"="jdbc",
"jdbc.user"="root",
"jdbc.password"="zhangfeng",
"jdbc.jdbc_url" = "jdbc:mysql://localhost:3306/demo",
"jdbc.driver_url" = "file:///Users/zhangfeng/.m2/repository/mysql/mysql-connector-java/8.0.29/mysql-connector-java-8.0.29.jar",
"jdbc.driver_class" = "com.mysql.cj.jdbc.Driver"
);
這里 jdbc.driver_url 可以使用本地路徑和http路徑兩種方式,
注意:
如果是本地路徑要求所有 FE 和 BE 節(jié)點(diǎn)都要有這個(gè)驅(qū)動(dòng) Jar 包
http 方式是 FE 和 BE 是通過 http 方式下載驅(qū)動(dòng)到本地
http方式示例如下:
CREATE CATALOG jdbc_resource properties (
"type"="jdbc",
"jdbc.user"="root",
"jdbc.password"="zhangfeng",
"jdbc.jdbc_url"="jdbc:mysql://192.168.31.54:3306/demo",
"jdbc.driver_url"="http://192.168.31.54/8.0.29/mysql-connector-java-8.0.29.jar",
"jdbc.driver_class"="com.mysql.cj.jdbc.Driver"
);
然后我們查看創(chuàng)建好的 Catalog 并切換到我們創(chuàng)建的 catalog下
show catalogs;

切換到我們創(chuàng)建好的 jdbc catalog
mysql> switch jdbc;
Query OK, 0 rows affected (0.00 sec)
查看 jdbc catalog 下的數(shù)據(jù)庫
show databases;

切換數(shù)據(jù)庫
mysql> use demo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
查看數(shù)據(jù)庫下的表

查看表結(jié)構(gòu)
desc order_analysis;

查詢表
select date,user_src,order_src from order_analysis limit 2;

下面你就可以通過這個(gè),創(chuàng)建Doris的OLAP表將MySQL的表通過下面這種方式導(dǎo)入到Doris表里
insert into <doris_table> select * from <mysql_table>
你也可以很輕松的使用 JDBC Mutil Catalog方式將MySQL表和Doris表進(jìn)行關(guān)聯(lián)分析,而不需要?jiǎng)?chuàng)建外表
我們來使用jdbc mutil catalog 外表,使用create table as select方式創(chuàng)建一個(gè)doris olap表并將外表的數(shù)據(jù)導(dǎo)入到doris里
create table demo.order_analysis_3
PROPERTIES("replication_num" = "1")
as select * from jdbc.demo.order_analysis;
上面這個(gè)sql 我們是通過 jdbc mutil catalog 外表的 jdbc.demo.order_analysis;
這里以 JDBC Mutil Catalog方式演示了Mutil Catalog方式的使用,其他Hive、Hudi、Iceberg及ES使用方法一樣,具體可以參照官方文檔:https://doris.apache.org/zh-CN/docs/dev/ecosystem/external-table/multi-catalog
后面我們也將持續(xù)的將其他的DB融合到Mutil Catalog內(nèi),為用戶提供更方便、更快捷的使用體驗(yàn)