com
spark和hive在一些函数,尤其是时间处理函数上有不同,
hive:2.0.1
spark:3.0.3
date_sub
date_sub函数,在hive 2.1.0之前的版本,返回的是String,但是在spark3.0.3,返回的是date对象,所以用date_sub的结果转时间戳的时候,就会有问题。因为date对象肯定是带时分秒毫秒的。
统一的方式就是把date_sub的结果用cast转成string,然后再用unix_timestamp转时间戳。
unix_timestamp
unix_timestamp(参数,格式)
当参数跟格式不匹配时,比如参数为2022-07-24 01:00:07.0,格式为yyyy-mm-dd。spark会报错,hive则会正常返回。
只有参数跟格式刚好匹配,spark的才行