记一次Hive隐式转换的坑

本文记录了一次在Hive中遇到的隐式转换问题,详细解释了由于string和bigint之间的隐式转换导致的数据不准确,以及date和string比较时的转换规则变化。讨论了Hive隐式转换的规律,提醒在比较不同类型数据时要注意显式转换以避免精度损失和意外结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、一次隐式转换遇到的错误及原因

最近在使用Hive中,遇到了一个隐式转换的坑。

首先看一下两个表格

table1

order_number(type:string) value
150970594253582620 123

table2

order_number(type:bigint) value
150970594253582621 123

在两个表的使用中,需要对两个表进行连接

SELECT
	oi.order_number order1,
	cc.order_number order2
from dw.table1 a
join dw.table2 b 
on a.o
回答: Hive中的转换是指在查询过程中,Hive会自动将不同数据类型的值进行转换,以满足表达的要求。Hive转换遵循一定的规则,即数据类型的转换顺序。根据引用\[1\]中的描述,Hive转换顺序为:tinyint -> smallint -> int -> bigint -> float -> double。这意味着,如果在表达中需要使用的数据类型与实际数据类型不匹配,Hive会自动将数据类型进行转换,直到找到合适的数据类型。例如,如果一个表达需要使用int类型的数据,而实际数据是tinyint类型,Hive会自动将tinyint类型转换为int类型。但需要注意的是,boolean类型不能转换成任意类型。引用\[2\]中的示例展示了Hive中的数据插入操作,而引用\[3\]中提到了Hive中可以使用Cast操作进行显示的数据转换。通过使用Cast操作,可以将一个数据类型转换为另一个数据类型。例如,Cast('1' as int)将字符串转换为整型。如果强制转换失败,如Cast('X' as int),表达将返回NULL。这就是Hive转换的原理。 #### 引用[.reference_title] - *1* *2* [Hive 核心原理(hive-3.1.2)(转载)](https://blog.youkuaiyun.com/jianye33/article/details/108398877)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Hive 工作原理详解](https://blog.youkuaiyun.com/weixin_38920945/article/details/103370196)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值