测试环境csv文件数据导入parquet存储文件后用limit查询报错问题解决

数据导入流程

先将oracle数据导出为csv文件,在将csv文件进行删除表头(第一行),删除双引号,替换时间分隔符等操作;然后创建对应表两张,一张表A存储格式textfile,另一张B表存储格式parquet,,先将csv文件导入A表,在通过A表导入B表。最后select count(*) from B ;有数据,但是执行select * from B limit 2 ;执行报错 提示类型问题,然后执行select * from A limit 2;没有任何问题,A,B表的区别只有存储格式不同,其他字段类型都相同;

报错信息和以前的遇到的类型不匹配问题完全相同,所以第一步排查类型问题,清空B表后 执行insert into table B select * from A limit 100; 在B表导入少量数据,在执行select * from B; 查看数据有没有截断,null值等问题;结果发现没有null和截断的数据,再次执行select * from B limit 2 依然报错;

到这里就蒙了,这是什么原因?困扰了一天,后来猜想应该还是类型问题,不是了星星不匹配,应该是精度不够,于是将B表的建表语句decimal类型放大试一试,将原来的decimal(16,8)改为decimal(22,8); workdate类型改为decimal(20,0) 再次导入数据,并执行 带limit的查询语句,竟然成功了;后面分别调几个decimal类型,必须都扩大;

成功后检查原来的csv文件数据,降序排列后,数据最大没有超过3000,带上小数点长度最长9位,而原来设定的decimal类型长度16,精度8位,,并且worddate长度是8,用默认decimal的10位保存;按理来说应该已经足够容纳数据了,为什么还是报错的,并且将worddate扩大到decimal(15,0)依然失败,扩大到decimal(20,0)的时候就才成功。

最后总结,问题虽然解决了,但还是不明白为什么会出现这种情况,如果哪位大佬知道,欢迎评论或私信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值