记录一次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)

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

记录一次hive表中 string字符串写入int字段引起的小bug_第1张图片

你可能感兴趣的:(总结,hive,bug,大数据)