跳转至

7.4.4 Oracle

Apache Doris JDBC Catalog 支持通过标准 JDBC 接口连接 Oracle 数据库。本文档介绍如何配置 Oracle 数据库连接。

1 使用须知

要连接到 Oracle 数据库,您需要

  • Oracle 19c18c12c11g10g

  • Oracle 数据库的 JDBC 驱动程序,您可以从 Maven 仓库下载 Ojdbc8 及以上版本的 Oracle JDBC 驱动程序。

  • Apache Doris 每个 FEBE 节点和 Oracle 服务器之间的网络连接,默认端口为 1521

2 连接 Oracle

SQL
1
2
3
4
5
6
7
8
CREATE CATALOG oracle PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="secret",
    "jdbc_url" = "jdbc:oracle:thin:@example.net:1521:orcl",
    "driver_url" = "ojdbc8.jar",
    "driver_class" = "oracle.jdbc.driver.OracleDriver"
)

Tip

jdbc_url 定义要传递给 JDBC 驱动程序的连接信息和参数。使用 Oracle JDBC Thin 驱动程序时, URL 的语法可能会有所不同,具体取决于您的 Oracle 配置。例如,如果您要连接到 Oracle SIDOracle 服务名称,则连接 URL 会有所不同。有关更多信息,请参阅 Oracle 数据库 JDBC 驱动程序文档。以上示例 URL 连接到名为 orclOracle SID

3 层级映射

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

Apache Doris Oracle
Catalog Database
Database User
Table Table

4 类型映射

4.1 Oracle 到 Apache Doris 类型映射

Oracle Type Apache 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

5 查询优化

5.1 谓词下推

  1. 当执行类似于 where dt = '2022-01-01' 这样的查询时, Apache Doris 能够将这些过滤条件下推到外部数据源,从而直接在数据源层面排除不符合条件的数据,减少了不必要的数据获取和传输。这大大提高了查询性能,同时也降低了对外部数据源的负载。

  2. 当变量 enable_ext_func_pred_pushdown 设置为 true ,会将 where 之后的函数条件也下推到外部数据源。

    目前支持下推到 Oracle 的函数有:

    Function
    NVL

5.2 行数限制

如果在查询中带有 limit 关键字, Apache Doris 会将 limit 转义为 Oraclerownum 语法,以减少数据传输量。

5.3 转义字符

Apache Doris 会在下发到 Oracle 的查询语句中,自动在字段名与表名上加上转义符: ("") ,以避免字段名与表名与 Oracle 内部关键字冲突。

6 常见问题

  1. 创建或查询 Oracle Catalog 时出现 ONS configuration failed

    be.confJAVA_OPTS 增加 -Doracle.jdbc.fanEnabled=false 并且升级 driverhttps://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/19.23.0.0/ojdbc8-19.23.0.0.jar

  2. 创建或查询 Oracle Catalog 时出现 Non supported character set (add orai18n.jar in your classpath): ZHS16GBK 异常

    下载 orai18n.jar 并放到每个 FEBE 的目录下的 custom_lib/ 目录下(如不存在,手动创建即可)并重启每个 FEBE