Apache Doris JDBC Catalog 支持通過標準 JDBC 接口連接 Oracle 數據庫。本文檔介紹如何配置 Oracle 數據庫連接。
使用須知?
要連接到 Oracle 數據庫,您需要
-
Oracle 19c, 18c, 12c, 11g 或 10g。
-
Oracle 數據庫的 JDBC 驅動程序,您可以從?Maven 倉庫下載 Ojdbc8 及以上版本的 Oracle JDBC 驅動程序。
-
Apache Doris 每個 FE 和 BE 節點和 Oracle 服務器之間的網絡連接,默認端口為 1521。
連接 Oracle?
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"
)
備注
jdbc_url
?定義要傳遞給 JDBC 驅動程序的連接信息和參數。 使用 Oracle JDBC Thin 驅動程序時,URL 的語法可能會有所不同,具體取決于您的 Oracle 配置。 例如,如果您要連接到 Oracle SID 或 Oracle 服務名稱,則連接 URL 會有所不同。 有關更多信息,請參閱?Oracle 數據庫 JDBC 驅動程序文檔。 以上示例 URL 連接到名為orcl
的 Oracle SID。
層級映射?
映射 Oracle 時,Apache Doris 的一個 Database 對應于 Oracle 中的一個 User。而 Apache Doris 的 Database 下的 Table 則對應于 Oracle 中,該 User 下的有權限訪問的 Table。即映射關系如下:
Apache Doris | Oracle |
---|---|
Catalog | Database |
Database | User |
Table | Table |
類型映射?
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 |
查詢優化?
謂詞下推?
-
當執行類似于?
where dt = '2022-01-01'
?這樣的查詢時,Apache Doris 能夠將這些過濾條件下推到外部數據源,從而直接在數據源層面排除不符合條件的數據,減少了不必要的數據獲取和傳輸。這大大提高了查詢性能,同時也降低了對外部數據源的負載。 -
當變量?
enable_ext_func_pred_pushdown
?設置為 true,會將 where 之后的函數條件也下推到外部數據源。目前支持下推到 Oracle 的函數有:
Function NVL
行數限制?
如果在查詢中帶有 limit 關鍵字,Apache Doris 會將 limit 轉義為 Oracle 的?rownum
?語法,以減少數據傳輸量。
轉義字符?
Apache Doris 會在下發到 Oracle 的查詢語句中,自動在字段名與表名上加上轉義符:(""),以避免字段名與表名與 Oracle 內部關鍵字沖突。