记一次hiveSQL 查询无数据,String类型的字段自动转化为int类型的经历和解决方案

背景: 我有一张hive表:销售订单表,名为:sale_order_info. 里面有字段:销售订单号sale_order(string类型),回款金额back_amt(decimal)。这个表是业务部门(销售部门)填写的。我是经过这个表收集数据到数据中台中,然后进行关联,反馈给BI报表。

问题描述: 数据同步到hive中后,要将sale_order_info和b表关联,关联字段为sale_order,b表的sale_order为string类型,本来2个字段类型都一样的,关联应该没问题才对,可是问题恰恰出现在这里,关联之后没数据,然后单独检测sale_order_info,发现

sql 复制代码
hive> select * from sale_order_info where sale_order = '12345'

的时候没数据,反而

sql 复制代码
hive> select * from sale_order_info where sale_order = 12345

的时候有数据。可是我明明是将sale_order设置为string类型啊,为何hive 会自动将string类型转化为int类型呢?

解决方案: 网上查找了一些资料,得知:Hive存在隐式类型转换规则 。最常见的情况是数据中存在不可见字符 ,比如sale_order字段存储的值带有空格、制表符、换行符等不可见字符。hive关联时会进行字符串的比较发现'12345' ≠ "12345 "(比如后面有空格的)。Hive会自动去除前后空白,将其转化为int类型。就出现了这种设置string类型,查询时却自动转化为int类型的情况了。

所以解决的方案是在对关联字段进行清洗即可:

sql 复制代码
hive> select * from sale_order_info where trim(sale_order) = '12345'

特意返回去看了一下存储销售表的数据库,发现果然是后面多了空格,业务填写时很容易造成这种情况。

相关推荐
十月南城2 天前
Hive与离线数仓方法论——分层建模、分区与桶的取舍与查询代价
数据仓库·hive·hadoop
鹏说大数据2 天前
Spark 和 Hive 的关系与区别
大数据·hive·spark
B站计算机毕业设计超人2 天前
计算机毕业设计Hadoop+Spark+Hive招聘推荐系统 招聘大数据分析 大数据毕业设计(源码+文档+PPT+ 讲解)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
B站计算机毕业设计超人2 天前
计算机毕业设计hadoop+spark+hive交通拥堵预测 交通流量预测 智慧城市交通大数据 交通客流量分析(源码+LW文档+PPT+讲解视频)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
AI架构师小马2 天前
Hive调优手册:从入门到精通的完整指南
数据仓库·hive·hadoop·ai
数据架构师的AI之路2 天前
深入了解大数据领域Hive的HQL语言特性
大数据·hive·hadoop·ai
Gain_chance2 天前
33-学习笔记尚硅谷数仓搭建-DWS层交易域用户粒度订单表分析及设计代码
数据库·数据仓库·hive·笔记·学习·datagrip
佐伊234 天前
SQL优化剧场:当Hive/MaxCompute遇上数据倾斜的十二种剧情
hive·sql优化·maxcompute·数据倾斜
Amber勇闯数分4 天前
【Hive】基于物品协同过滤 [ ItemCF ] 推荐课程-余弦相似度计算
大数据·数据仓库·hive·hadoop·矩阵
努力有什么不好4 天前
SparkSQL如何查询外部hive数据
数据仓库·hive·hadoop