需要从hive中给定的时间戳中减去一些小时

vh0rcniy  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(980)

输入:unix\u时间戳('01/15/2018 15:26:37','mm/dd/yyyy hh:mm:ss')
预计输出比utc输入时间延迟4小时,即2018年1月15日11:26:37
我知道hive中有date\子函数,但它只用于从给定的时间戳中减去天数。但我需要知道是否有一种方法,我可以减去小时,分钟或秒。
我还尝试了以下方法,因为edt时区比utc晚4小时(但输出错误):

SELECT to_date(from_UTC_timestamp(unix_timestamp('01/15/2018 15:26:37', 'mm/dd/YYYY hh:mm:ss')*1000, 'EST6EDT')) as earliest_date; -- OUTPUT: 2017-12-31 (wrong)

有人能帮我吗?

eoxn13cs

eoxn13cs1#

除了@strongyoung的答案。
我发现将长表达式定义为宏并放入初始化文件(例如。 hive -i init-file.hql ... ).

hive> create temporary macro sub_hours(dt string, hours int)
from_unixtime(unix_timestamp(dt, 'MM/dd/yyyy HH:mm:ss') - 3600 * hours, 'MM/dd/yyyy HH:mm:ss');
OK
Time taken: 0.005 seconds
hive> select sub_hours("01/01/2019 00:00:00", 5);
OK
12/31/2018 19:00:00
Time taken: 0.439 seconds, Fetched: 1 row(s)

宏可以从hive0.12.0开始使用,更多的细节可以在这里找到(注意“错误修复”部分)。

wydwbb8l

wydwbb8l2#

很好用。

select from_unixtime(unix_timestamp('01/15/2018 15:26:37', 'MM/dd/yyyy HH:mm:ss')-4*3600, 'MM/dd/yyyy HH:mm:ss')

相关问题