Hive on Spark 的bigint类型与datedifff返回值精度丢失问题

项目场景:

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的值就正常了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值