记录同步数据时oracle不可见字符导致字段错位的处理

记录oracle同步数据到starrocks不可见字符导致字段错位的处理

一、症状简述:
使用  datax  从 oracle 同步数据到 starrocks 的时候。总是报错如下

Reason: column count mismatch, expect=10 real=13. src line: [2018-01-08 00:00:007910001073android\N\N\N\N1pt Host Version 5.8???© Microsoff ???© Microsoff];
Reason: column count mismatch, expect=10 real=13. src line: [2018-01-08 00:00:007910001070\N\N\N\N\N1pt Host Version 5.8???© Microsoff ???© Microsoff];

但是实际从数据库查询的时候,结果是正常的

查询sql:select * from mds_login_dev_model where stat_date in(to_date(‘2018-01-08’,‘yyyy-MM-dd’)) AND INSTR(MODEL,CHR(1))>0

在这里插入图片描述

二、问题排查:

可以看到数据最后一个字段model 中有很多 “” 看起来像乱码,这就是数据导入报错的原因。这些字符是0x01 或者 0x02”,datax的starrocks writer默认以 0x01 作为字段分隔符 0x02 作为行分隔符。导致一个字段变成了3个字段,也就多出了2个字段,导致字段个数不匹配报错。

把这个字符,直接复制出来,去查询对应的ascii码值,值为1.

查询sql : select ascii(‘’) from dual;
在这里插入图片描述

三、解决方案:在旧的查询sql上做一些调整
同步时使用的旧sql:
select stat_date,game_id,agg_code,platform,area_id,group_id,channel_id,channel_name,dev_num,

model 

from mds_login_dev_model where stat_date >= to_date('2018-01-08','yyyy-MM-dd' ) and stat_date <= to_date('2023-02-26','yyyy-MM-dd')
在model字段上做一些修改:
 model -->  replace(replace(model,chr(1),''),chr(2),'')   
 通过replace把model字段中的chr(1) 与chr(2)替换成空字符串,本身也是不可以见字符(不可见字符有很多,可自行搜索)。
最终sql结果:
select stat_date,game_id,agg_code,platform,area_id,group_id,channel_id,channel_name,dev_num,

replace(replace(model,chr(1),''),chr(2),'') model  -- 修改本行

from mds_login_dev_model where stat_date >= to_date('2018-01-08','yyyy-MM-dd' ) and stat_date <= to_date('2023-02-26','yyyy-MM-dd')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值