JDBC 外表

推荐使用 JDBC Catalog 访问 JDBC 外表。

SinceVersion 1.2.0

JDBC External Table Of Doris 提供了Doris通过数据库访问的标准接口(JDBC)来访问外部表,外部表省去了繁琐的数据导入工作,让Doris可以具有了访问各式数据库的能力,并借助Doris本身的OLAP的能力来解决外部表的数据分析问题:

  1. 支持各种数据源接入Doris
  2. 支持Doris与各种数据源中的表联合查询,进行更加复杂的分析操作

本文档主要介绍该功能的使用方式等。

具体建表语法参照:CREATE TABLE

1. 通过JDBC_Resource来创建JDBC外表

SinceVersion 1.2.1

在1.2.1及之后的版本中,可以将 driver 放到 FE/BE 的 目录下,并直接指定文件名,如:"driver_url" = "mysql-connector-java-5.1.47.jar"。系统会自动在 目录寻找文件。

查询用法

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

事务

Doris的数据是由一组batch的方式写入外部表的,如果中途导入中断,之前写入数据可能需要回滚。所以JDBC外表支持数据写入时的事务,事务的支持需要通过设置session variable: enable_odbc_transcation (ODBC事务也受此变量控制)。

事务保证了JDBC外表数据写入的原子性,但是一定程度上会降低数据写入的性能,可以考虑酌情开启该功能。

1.Mysql测试

Mysql版本Mysql JDBC驱动版本
8.0.30mysql-connector-java-5.1.47.jar

2.PostgreSQL测试

PostgreSQL版本PostgreSQL JDBC驱动版本
14.5postgresql-42.5.0.jar

3.SQLServer测试

4.oracle测试

Oracle版本Oracle JDBC驱动版本
11ojdbc6.jar

目前只测试了这一个版本其他版本测试后补充

5.ClickHouse测试

ClickHouse版本ClickHouse JDBC驱动版本
22clickhouse-jdbc-0.3.2-patch11-all.jar

各个数据库之间数据类型存在不同,这里列出了各个数据库中的类型和Doris之中数据类型匹配的情况。

MySQL

PostgreSQLDoris
BOOLEANBOOLEAN
SMALLINTSMALLINT
INTINT
BIGINTBIGINT
VARCHARVARCHAR
DATEDATE
TIMESTAMPDATETIME
REALFLOAT
FLOATDOUBLE
DECIMALDECIMAL

Oracle

OracleDoris
VARCHARVARCHAR
DATEDATETIME
SMALLINTSMALLINT
INTINT
REALDOUBLE
FLOATDOUBLE
NUMBERDECIMAL

ClickHouse

ClickHouseDoris
BOOLEANBOOLEAN
CHARCHAR
VARCHARVARCHAR
STRINGSTRING
DATEDATE
Float32FLOAT
Float64DOUBLE
Int8TINYINT
Int16SMALLINT
Int32INT
Int64BIGINT
Int128LARGEINT
DATETIMEDATETIME
DECIMALDECIMAL

注意:

  • 对于ClickHouse里的一些特殊类型,如UUID,IPv4,IPv6,Enum8可以用Doris的Varchar/String类型来匹配,但是在显示上IPv4,IPv6会额外在数据最前面显示一个,需要自己用split_part函数处理

Q&A