记录一次hive表中 string字符串写入int字段引起的小bug

0. 场景

一个还在开发的项目中的某张明细层表某个字段在UAT时发现错误值全为null!正确结果为 从主数据表中拿到的字符串

1. 解决

在梳理了一遍逻辑后,确认源数据库、我方ods、我方清洗层均有数据且形成该明细层的表逻辑均无问题后,在重新查看项目文档时发现:

  • 该字段之前我在开发时由于某些原因,修改过该字段文档逻辑!但是由于只涉及到几个字段名,当时都没放在心上大家都没记录变更。
  • 当时的变更完后我检测时发现了之前的逻辑在业务角度有点问题,和业务沟通确认后更改了逻辑:该字段取数逻辑从 之前「取int型的A字段」变为「取string的B字段」!

再一想,当时修改了相关sql的取数逻辑!对于hive表的字段类型没有修改!!!hive表中钙字段还是int!!!!
之后按照思路:hive里删表重建(还在开发所以删表无所谓)–》将该字段类型 从 int改为 string–》重新采集入库推送。果然恢复正常!

2.赛后总结

hive 中有类型转换这我是知道的:隐式和显示。

  • 隐式:小->大,如 int ->bigint , int->string
  • 显示:利用函数如cast( ‘1’ as int)把字符串转换为整数1,若转换失败则为 null

我们来复现这个情况。随意在hive建个带int类型字段的表

create table typetranstest(
id int,
age int);`

插入数据(1,'保密'),注意此时age字段插入的是个字符串。运行命令正常运行结束,没有报错

insert into table typetranstest values (1,‘保密’);

查看数据可以发现,当string 插入 int类型的字段中,string的值 直接为 null了

hive> select * from typetranstest;
OK
1 NULL
Time taken: 0.199 seconds, Fetched: 1 row(s)

情况很明确。但是,为什么没有报错呢?留个问题给未来的我吧

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值