项目场景:
Hive on Spark的SQL语句插入数据精度丢失问题:
CDH-6.1.1
问题描述
Hive中往目标表insert overwrite table1 select datediff(date1,date2) from tmp 插入数据时,目标表字段类型为bigint,数据值都为0的问题
例如:table1的表结构为
CREATE TABLE if not exists table1
(
,biz_date STRING COMMENT '开户日期'
,days_diff BIGINT COMMENT '时间差'
,accounts_num BIGINT COMMENT '开户人数'
)
STORED AS PARQUET
;
往table1插入数据的语句sql为
insert OVERWRITE TABLE table1
select
biz_date
,datediff(start_date,end_date) as days_diff
,accounts_num
from tmp1
;
sql的执行引擎是spark,table1插入数据后的数据,发现days_diff字段的值都为0
原因分析:
原因不明
解决方案:
将datediff(start_date,end_date)强转为string类型才有用,强转为int或者bigint都没有效果
insert OVERWRITE TABLE table1
select
biz_date
,cast(datediff(start_date,end_date) as string) as days_diff
,accounts_num
from tmp1
;
强转之后,days_diff的值就正常了