oracle数据库使用JDBC导入ClickHouse数据

一、背景

需求要把oracle中的数据导入到clickhouse中,使用clickhouse的jdbc表引擎,把oracle11g的数据导入到clickhouse中。

二、方案

通过clickhouse-jdbc-bridge:是clickhouse提供的一个jdbc组件,用于通过JDBC的方式远程访问其他数据库表。 

三、clickhouse-jdbc-bridge的下载和安装

3.1 下载clickhouse-jdbc-bridge

(1)登录官网:https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases,下载源码程序到本地

(2)将clickhouse-jdbc-bridge-2.1.0-shaded.jar放在Linux服务器的目录/opt/clickhouse-jdbc-bridge下,并在该文件同级目录下新建3个目录:

config/datasources    --存放数据源配置文件
drivers                        --jdbc驱动存放目录

logs                            --存放日志

3.2 下载Oracle对应的驱动包

(1)oracle驱动的下载和配置

下载地址: https://maven.xwiki.org/externals/com/oracle/jdbc/ojdbc8/12.2.0.1/ojdbc8-12.2.0.1.jar

(2)放置到/opt/clickhouse-jdbc-bridge/drivers目录下。

 3.3 配置clickhouse-jdbc-bridge远程的数据库信息

#创建config目录及其子目录
mkdir -p /opt/clickhouse-jdbc-bridge/config/datasources  


在datasources目录下创建数据源配置文件,msjdbc.json文件名尽量与配置中的datasource名一致,如下配置:

{
  "msjdbc": {
      "driverUrls": [
          "/opt/clickhouse-jdbc-bridge/drivers/ojdbc8-12.2.0.1.jar"
       ],
      "driverClassName": "oracle.jdbc.driver.OracleDriver",
      "jdbcUrl": "jdbc:oracle:thin:@远程连接oracle数据库ip:1521:ora11g",
      "username": "ra",
      "password": "密码",
      "connectionTestQuery": ""
   }

 当前Linux服务器的目录为:

[root@localhost clickhouse-jdbc-bridge]# tree
.
├── clickhouse-jdbc-bridge-2.1.0-shaded.jar
├── config
│   └── datasources
│       └── msjdbc.json
├── drivers
│   └── ojdbc8-12.2.0.1.jar
├── logs
└── nohup.out

3.4 运行clickhouse-jdbc-bridge 

cd /opt/clickhouse-jdbc-bridge
nohup java -Duser.timezone=CN -jar clickhouse-jdbc-bridge-2.1.0-shaded.jar &

##注意 -Duser.timezone=CN 是在请求oracle11 的时候,会有时区的报错 添加这个报错消失

3.5 查看clickhouse-jdbc-bridge的日志

tail -10f nohup.out

3.6 修改clickhouse-server的配置文件

到/etc/clickhouse-server目录下的config.xml文件,找到以下代码,移除注释,并修改host为执行clickhouse-jdbc-bridge-2.1.0-shaded.jar的ip地址:

<jdbc_bridge>
   <host>127.0.0.1</host>
   <port>9019</port>
</jdbc_bridge>

保存之后,重启clickhouse服务

systemctl restart clickhouse-server
 

3.7 查询数据

SELECT * FROM jdbc('msjdbc', 'select count(*) from CERT_INFO')

select * FROM jdbc('jdbc:oracle:thin:账号/密码@xx.xx.xx.xx:端口/服务名', 'select * from test_tb')

 

3.8 插入外部表数据

首先参照oracle的表结构在clickhouse创建表

CREATE TABLE default.CERT_INFO
(
    `CERTID` Int64,
    `USERID` Int64,
   ...
    `APPLYTIME` Nullable(DateTime64(3)),
   ...
    `KEYALG` Nullable(String),
  ...
    `UPDATETIME` Nullable(DateTime64(3))
)
ENGINE = MergeTree
PRIMARY KEY CERTID
ORDER BY CERTID
SETTINGS index_granularity = 8192


##默认为非空,如果允许空值,需指定Nullable


插入数据:
 insert into CERT_INFO_TEST(CERTID,USERID,...,UPDATETIME) SELECT * FROM jdbc('msjdbc', 'select * from CERT_INFO)

250万数据,耗时236秒,插入完成,提示如下:
0 rows in set. Elapsed: 236.850 sec. Processed 2.53 million rows, 3.06 GB (10.68 thousand rows/s., 12.94 MB/s.)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七七powerful

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值