腾讯云数据仓库 TCHouse-D JDBC Catalog

JDBC Catalog 通过标准 JDBC 协议,连接其他数据源。连接后,Doris 会自动同步数据源下的 Database 和 Table 的元数据,以便快速访问这些外部数据。

相关产品
腾讯云数据仓库 TCHouse-D 产品页,含版本规格、价格与购买入口。

注意:说明:

注意:该功能适用于 Doris 1.2及后续版本。

一、MySQL

CREATE CATALOG jdbc_mysql PROPERTIES ( "type"="jdbc", "user"="root", "password"="********", "jdbc_url" = "jdbc:mysql://172.**.**.**:3306/demo", "driver_url" = "mysql-connector-java-5.1.47.jar", "driver_class" = "com.mysql.jdbc.Driver");

二、PostgreSQL

CREATE CATALOG jdbc_postgresql PROPERTIES ( "type"="jdbc", "user"="root", "password"="*******", "jdbc_url" = "jdbc:postgresql://172.**.**.**:5449/demo", "driver_url" = "postgresql-42.5.1.jar", "driver_class" = "org.postgresql.Driver");

映射 PostgreSQL 时,Doris 的一个 Database 对应于 PostgreSQL 中指定 Catalog 下的一个 Schema(如示例中 jdbc_url 参数中 "demo"下的 schemas)。而 Doris 的 Database 下的 Table 则对应于 PostgreSQL 中,Schema 下的 Tables。即映射关系如下:

Doris PostgreSQL
Catalog Database
Database Schema
Table Table

Doris 通过 SQL 语句来获得 PG user 能够访问的所有 schema 并将其映射为 Doris 的 database

select nspname from pg_namespace where has_schema_privilege('<UserName>', nspname, 'USAGE');

三、Oracle

CREATE CATALOG jdbc_oracle PROPERTIES ( "type"="jdbc", "user"="root", "password"="*********", "jdbc_url" = "jdbc:oracle:thin:@172.**.**.**:1521:helowin", "driver_url" = "ojdbc6.jar", "driver_class" = "oracle.jdbc.driver.OracleDriver");

映射 Oracle 时,Doris 的一个 Database 对应于 Oracle 中的一个 User。而 Doris 的 Database 下的 Table 则对应于 Oracle 中,该 User 下的有权限访问的 Table。即映射关系如下:

Doris Oracle
Catalog Database
Database User
Table Table

四、Clickhouse

CREATE CATALOG jdbc_clickhouse PROPERTIES ( "type"="jdbc", "user"="root", "password"="*******", "jdbc_url" = "jdbc:clickhouse://172.**.**.**:8123/demo", "driver_url" = "clickhouse-jdbc-0.4.6-all.jar", "driver_class" = "com.clickhouse.jdbc.ClickHouseDriver");

五、SQLServer

CREATE CATALOG sqlserver_catalog PROPERTIES ( "type"="jdbc", "user"="SA", "password"="*********", "jdbc_url" = "jdbc:sqlserver://localhost:1433;DataBaseName=doris_test", "driver_url" = "mssql-jdbc-11.2.3.jre8.jar", "driver_class" = "com.microsoft.sqlserver.jdbc.SQLServerDriver");

映射 SQLServer 时,Doris 的一个 Database 对应于 SQLServer 中指定 Database(如示例中 jdbc_url 参数中的 "doris_test")下的一个 Schema。而 Doris 的 Database 下的 Table 则对应于 SQLServer 中,Schema 下的 Tables。即映射关系如下:

Doris SQLServer
Catalog Database
Database Schema
Table Table

六、Doris

JDBC Catalog 也支持连接另一个 Doris 数据库:

CREATE CATALOG doris_catalog PROPERTIES ( "type"="jdbc", "user"="root", "password"="*******", "jdbc_url" = "jdbc:mysql://172.**.**.**:9030?useSSL=false", "driver_url" = "mysql-connector-java-5.1.47.jar", "driver_class" = "com.mysql.jdbc.Driver");

目前 JDBC Catalog 连接一个 Doris 数据库只支持用5.x版本的 JDBC jar 包。如果使用8.x JDBC jar 包,可能会出现列类型无法匹配问题。

七、参数说明

参数 是否必须 默认值 说明
user 是 – 对应数据库的用户名
password 是 – 对应数据库的密码
jdbc_url 是 – JDBC 连接串
driver_url 是 – JDBC Driver Jar 包名称*
driver_class 是 – JDBC Driver Class 名称
only_specified_database 否 "false" 指定是否只同步指定的 database
lower_case_table_names 否 "false" 是否以小写的形式同步 JDBC 外部数据源的表名
include_database_list 否 "" 当 only_specified_database=true 时,指定同步多个 database,以','分隔。db 名称是大小写敏感的
exclude_database_list 否 "" 当 only_specified_database=true 时,指定不需要同步的多个 database,以','分割。db名称是大小写敏感的

八、驱动包路径

driver_url 可以通过以下三种方式指定:

1. 文件名。如 mysql-connector-java-5.1.47.jar。需将 Jar 包预先存放在 FE 和 BE 部署目录的 jdbc_drivers/ 目录下。系统会自动在这个目录下寻找。该目录的位置,也可以由 fe.conf 和 be.conf 中的 jdbc_drivers_dir 配置修改。

2. 本地绝对路径。如 file:///path/to/mysql-connector-java-5.1.47.jar。需将 Jar 包预先存放在所有 FE/BE 节点指定的路径下。

3. HTTP 地址。如:https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/jdbc_driver/mysql-connector-java-5.1.47.jar。系统会从这个 http 地址下载 Driver 文件。仅支持无认证的 http 服务。

九、指定同步数据库

·only_specified_database:在 jdbc 连接时可以指定链接到哪个 database/schema,如:MySQL 中 jdbc_url 中可以指定 database,pg 的 jdbc_url 中可以指定 currentSchema。

·include_database_list:当 only_specified_database=true 时,指定需要同步的 database,以','分割。默认为'',即不做任何过滤,同步所有 database。db 名称是大小写敏感的

·exclude_database_list:当 only_specified_database=true 时,指定不需要同步的多个 database,以','分割。默认为'',即不做任何过滤,同步所有database。db 名称是大小写敏感的。

当 include_database_list 和 exclude_database_list 有重合的 database 配置时,exclude_database_list会优先生效。

如果使用该参数时连接 Oracle 数据库,要求使用 ojdbc8.jar 以上版本 jar 包。

十、数据查询

select * from mysql_catalog.mysql_database.mysql_table where t1 > 1000 and t2 ='term';

由于可能存在使用数据库内部的关键字作为字段名,为解决这种状况下仍能正确查询,所以在 SQL 语句中,会根据各个数据库的标准自动在字段名与表名上加上转义符。例如 MYSQL(“)、PostgreSQL("")、SQLServer([])、ORACLE(""),所以此时可能会造成字段名的大小写敏感,具体可以通过 explain sql,查看转义后下发到各个数据库的查询语句。

十一、MySQL

MYSQL Type Doris Type Comment
BOOLEAN BOOLEAN –
TINYINT TINYINT –
SMALLINT SMALLINT –
MEDIUMINT INT –
INT INT –
BIGINT BIGINT –
UNSIGNED TINYINT SMALLINT Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
UNSIGNED MEDIUMINT INT Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
UNSIGNED INT BIGINT Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
UNSIGNED BIGINT LARGEINT –
FLOAT FLOAT –
DOUBLE DOUBLE –
DECIMAL DECIMAL –
DATE DATE –
TIMESTAMP DATETIME –
DATETIME DATETIME –
YEAR SMALLINT –
TIME STRING –
CHAR CHAR –
VARCHAR VARCHAR –
TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB、TINYSTRING、STRING、MEDIUMSTRING、LONGSTRING、BINARY、VARBINARY、JSON、SET、BIT STRING –
Other UNSUPPORTED –

十二、PostgreSQL

POSTGRESQL Type Doris Type Comment
boolean BOOLEAN –
smallint/int2 SMALLINT –
integer/int4 INT –
bigint/int8 BIGINT –
decimal/numeric DECIMAL –
real/float4 FLOAT –
double precision DOUBLE –
smallserial SMALLINT –
serial INT –
bigserial BIGINT –
char CHAR –
varchar/text STRING –
timestamp DATETIME –
date DATE –
time STRING –
interval STRING –
point/line/lseg/box/path/polygon/circle STRING –
cidr/inet/macaddr STRING –
bit/bit(n)/bit varying(n) STRING bit 类型映射为 doris 的 STRING 类型,读出的数据是 true/false,而不是1/0
uuid/JSONB STRING –
Other UNSUPPORTED –

十三、Oracle

ORACLE Type Doris Type Comment
number(p) / number(p,0) TINYINT/SMALLINT/INT/BIGINT/LARGEINT Doris会根据p的大小来选择对应的类型:p < 3 -> TINYINT; p < 5 -> SMALLINT; p < 10 -> INT; p < 19 -> BIGINT; p > 19 -> LARGEINT
number(p,s), [ if(s>0 && p>s) ] DECIMAL(p,s) –
number(p,s), [ if(s>0 && p < s) ] DECIMAL(s,s) –
number(p,s), [ if(s<0) ] TINYINT/SMALLINT/INT/BIGINT/LARGEINT s<0的情况下, Doris会将p设置为 p+|s|, 并进行和number(p) / number(p,0)一样的映射
number – Doris 目前不支持未指定 p 和 s 的 oracle 类型
decimal DECIMAL –
float/real DOUBLE –
DATE DATETIME –
TIMESTAMP DATETIME –
CHAR/NCHAR STRING –
VARCHAR2/NVARCHAR2 STRING –
LONG/ RAW/ LONG RAW/ INTERVAL STRING –
Other UNSUPPORTED –

十四、SQLServer

SQLServer Type Doris Type Comment
bit BOOLEAN –
tinyint SMALLINT SQLServer 的 tinyint 是无符号数,所以映射为 Doris 的 SMALLINT
smallint SMALLINT –
int INT –
bigint BIGINT –
real FLOAT –
float DOUBLE –
money DECIMAL(19,4) –
smallmoney DECIMAL(10,4) –
decimal/numeric DECIMAL –
date DATE –
datetime/datetime2/smalldatetime DATETIMEV2 –
char/varchar/text/nchar/nvarchar/ntext STRING –
binary/varbinary STRING –
time/datetimeoffset STRING –
Other UNSUPPORTED –

十五、Clickhouse

ClickHouse Type Doris Type Comment
Bool BOOLEAN –
String STRING –
Date/Date32 DATEV2 Jdbc Catlog 连接 ClickHouse 时默认使用 DATEV2类型
DateTime/DateTime64 DATETIMEV2 Jdbc Catlog 连接 ClickHouse 时默认使用 DATETIMEV2类型
Float32 FLOAT –
Float64 DOUBLE –
Int8 TINYINT –
Int16/UInt8 SMALLINT Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
Int32/UInt16 INT Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
Int64/Uint32 BIGINT Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
Int128/UInt64 LARGEINT Doris 没有 UNSIGNED 数据类型,所以扩大一个数量级
Int256/UInt128/UInt256 STRING Doris 没有这个数量级的数据类型,采用 STRING 处理
DECIMAL DECIMAL/DECIMALV3/STRING 将根据 Doris DECIMAL 字段的(precision, scale)和 enable_decimal_conversion 开关选择用何种类型
Enum/IPv4/IPv6/UUID STRING 在显示上 IPv4,IPv6会额外在数据最前面显示一个“/”,需要自己用 split_part 函数处理
Array ARRAY Array 内部类型适配逻辑参考上述类型,不支持嵌套类型
Other UNSUPPORTED –
赞 (0)
上一篇 4天前
下一篇 4天前