背景
需求要把oracle中的数据导入到click house中,使用clickhouse的jdbc表引擎,把oracle11的数据导入到click house中。
一 方案选取
使用 clickhouse-jdbc-bridge ,使用click house的JDBC驱动 来查找数据
CREATE TABLE [IF NOT EXISTS] [db.]table_name
(
columns list...
)
ENGINE = JDBC(datasource_uri, external_database, external_table)
二 clickhouse-jdbc-bridge的下载和安装
- 下载 https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases
-
把jar包放到服务器的路径中, 并在相对路径下创建下面的文件夹
-
vim config/datasources/oracle.json
在这个json里面配置对应的连接{ "oracle11": { "driverClassName":"oracle.jdbc.OracleDriver", "jdbcUrl": "jdbc:oracle:thin:<username>/<password>@//<host>:<ip>/<server>", "ionFailTimeout": 0, "minimumIdle": 0, "maximumPoolSize": 10 } }
-
oracle驱动的下载和配置
下载地址: https://maven.xwiki.org/externals/com/oracle/jdbc/ojdbc8/12.2.0.1/ojdbc8-12.2.0.1.jar
文件的位置: drivers目录下 ojdbc8-12.2.0.1.jar
-
bridge的启动和日志报错的排查
后台运行,日志保存到logs目录下nohup java -Duser.timezone=CN -jar clickhouse-jdbc-bridge-2.0.3-shaded.jar >> ./logs/out.log 2>&1 &
!注意! -Duser.timezone=CN 是在请求oracle11 的时候,会有时区的报错 添加这个报错消失
Caused by: java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1 ORA-01882: timezone region not found
三 数据表的创建和导入
查看oracle中的数据结构 进行字段的转换在click house中创建对应的表
CREATE TABLE TEST
(
`_id_` String,
`NodeName` Nullable(String),
......
`_ExportedDate_` Date
)
ENGINE = MergeTree()
ORDER BY _id_
SETTINGS index_granularity = 8192;
数据导入的sql,click house
insert into TEST select * from jdbc('jdbc:oracle:thin:<username>/<password>@//<host>:1521/<servers>','SELECT * FROM TEST');