完美解决Clickhouse-JDBC-Bridge 连接Oracle日期类型错误的问题

本文介绍了在使用Clickhouse-JDBC-Bridge从Oracle数据库抽取数据时遇到的DATE和TIMESTAMP类型字段转换错误的问题。经过一天的探索,发现在JSON配置文件中添加特定的映射转换可以解决这个问题。通过将Oracle的DATE和TIMESTAMP类型手动映射为String类型,成功实现了数据的一致性。分享了具体的配置修改方法及结果展示。
摘要由CSDN通过智能技术生成

 

上一篇文章解决了如何使用Clickhouse-JDBC-Bridge直接从Oracle拉取数据的问题,连接如下:

Clickhouse 通过JDBC方式从Oracle抽取数据,不借助任何抽数工具。顺便聊下Airbyte_Johnwick888的博客-CSDN博客

但实际操作中发现,Oracle的DATE和TIMESTAAMP类型的字段读取过来完全不正确,不管是使用json配置还是jdbc直读的方式,比如下面的字段:

 为了解决问题,用了一整天的时间探索,包括更换JDK、更换JDBC,都不好使,网上也没相关信息。无奈,最后仔细研究了下Clickhouse-jdbc-bridge在GitHub上的源码,发现是配置的问题,需要手动转换才行,具体方式就是更新json配置文件如下:

{
"$schema": "../../../../../docker/config/datasource.jschema",
"myoracle": {
    "converter": {
              "mappings": [{ "nativeType": "TIMESTAMP", "toType": "String" },
              { "nativeType": "DATE", "toType": "String" }]
                      },
             "driverUrls": ["/data/clickhouse-jdbc-bridge/drivers/oracle"],
             "driverClassName": "oracle.jdbc.driver.OracleDriver",
             "jdbcUrl": "jdbc:oracle:thin:@localhost:1521/orclpdb1",
             "username": "nanchang",
             "password": "nanchang",
             "connectionTestQuery":"",
             "initializationFailTimeout": 0,
             "minimumIdle": 0,
             "maximumPoolSize": 10
             }
}

如上,mapping字段就是手动转换相应的数据类型,最终完美解决。不管是直接读取还是插入到Clickhouse的表里,都能跟源数据保持一致。如下:

 最后附上Oracle JDBC直读的格式,但没法解决日期问题,等我解决了再补充。慎用:

select * FROM jdbc('jdbc:oracle:thin:用户名/密码@localhost:1521/orclpdb1','模式', '表或select语句')

Oracle JDBC的完整扩展格式如下:

jdbc:oracle:thin:[user/password]@[[protocol:]//]host1[,host2,host3][:port1][,host4:port2] [/service_name][:server_mode][/instance_name][?connection properties]

可参阅如下链接:

Overview (Oracle Database JDBC Java API Reference)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值