一个数据仓库项目引发的学习收获点滴摘记

客户业务数据库oracle 11g r2,同步至apache doris,java的应用连doris数据仓库展示报表。

用flinkcdc 同步,分成批和流的两种同步。

这次就说流的方式,flink slot有限于,改 flink-conf.yaml的

taskmanager.numberOfTaskSlots: 参数好像也受限于硬件配置,不能想要多少就改成多少。

我们把几个表分成一组,用

BEGIN STATEMENT SET;
END; 语句快把 insert select 包起来,这样几个表同步可以共享一个slot。

但实际效果还是不好,因为会反复jdbc方式连接oracle业务数据库,扫描。尤其cdc2.3.0连接多到业务库崩溃。

那怎么办呢?就开始研究dinky的CDCSOURCE 整库同步.

版本是0.7.2下下来搞到idea中,这样能调试好更快二开。

这个项目mysqlcdc能同步数据,但是oracle不能,如果表的字段都是字符就能。

那只能研究代码改代码了,拧过来 让ta能为止。

我改了很多点块,我就列下关键的几个

1报错 string 不能cast 数字,

找到OracleCDCBuilder,

sourceBuilder.deserializer(new JsonDebeziumDeserializationSchema(false,configa));

改成这样。

Map configa = new HashMap(); configa.put(JsonConverterConfig.DECIMAL_FORMAT_CONFIG, DecimalFormat.NUMERIC.name()); sourceBuilder.deserializer(new JsonDebeziumDeserializationSchema(false,configa));

这时又报 数字不能cast string错误

找到 SQLSinkBuilder

else if (logicalType instanceof DecimalType) {
            return new BigDecimal((String) value);
        

改成

else if (logicalType instanceof DecimalType) {
            return new BigDecimal(value +"");

然后就能同步数据到doris里面了。至于下游自动建表,甚至表字段变化,下游也跟着改,这个我真没弄懂,如果下游想要收到数据必须提前建好表。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值