Hadoop 配置单元unix_时间戳函数计算不匹配

Hadoop 配置单元unix_时间戳函数计算不匹配,hadoop,hive,bigdata,Hadoop,Hive,Bigdata,我正在尝试编写一个配置单元查询,它将为时间戳值添加6个小时,然后将其与其他时间戳进行比较 我使用的方法是使用unix\u timestamp()函数转换时间戳,然后向其添加21600秒,以便最终值比初始值提前6小时 hive> select unix_timestamp('2014-11-02 00:58:20') from unix_tmp limit 1; OK 1414907900 1414907900+6*60*60=1414929500 hive> select from

我正在尝试编写一个配置单元查询,它将为时间戳值添加6个小时,然后将其与其他时间戳进行比较

我使用的方法是使用
unix\u timestamp()
函数转换时间戳,然后向其添加21600秒,以便最终值比初始值提前6小时

hive> select unix_timestamp('2014-11-02 00:58:20') from unix_tmp limit 1;
OK
1414907900
1414907900+6*60*60=1414929500

hive> select from_unixtime(1414929500) from unix_tmp limit 1;
OK
2014-11-02 05:58:20
我认为小时值应该是
06
,而不是
05
。我做错了什么

另外,另一个观察结果是,并非所有值都是如此;对于某些值,上述计算给出了正确的结果

是否有更好的方法进行小时加法和时间戳比较

正如上面所说:

unix\u时间戳(字符串日期)

使用默认时区和默认区域设置,将格式为yyyy MM dd HH:MM:ss的时间字符串转换为Unix时间戳(以秒为单位),如果失败,则返回0:

from_unixtime(bigint unixtime[,字符串格式])

将unix历元(1970-01-01 00:00:00 UTC)中的秒数转换为表示当前系统时区中该时刻的时间戳的字符串,格式为“1970-01-01 00:00:00”


解决方案

来自utc时间戳(时间戳,字符串时区)

假设给定的时间戳是UTC,并转换为给定的时区(从Hive 0.8.0开始)。例如,从utc时间戳(“1970-01-01 08:00:00”,“PST”)返回1970-01-01 00:00:00

到utc时间戳(时间戳,字符串时区)

假设给定的时间戳在给定的时区内,并转换为UTC(从Hive 0.8.0开始)。例如,to_utc_timestamp('1970-01-01 00:00:00','PST')返回1970-01-01 08:00:00


这基本上是GMT的问题。相对于GTM的时间为+1或更多的时区谢谢您的回答,但我想检查时间戳是否为1>(时间戳2+6小时)。如何进行比较如果您想比较时间戳,只需使用
unix\u timestamp()将两个时间戳转换为
unix\u timestamp
函数。您没有在时间戳中添加小时。将小时添加到
unix\u timestamp
中,它是bigint。这就是我最初尝试的;它没有起作用:-(比较
unix\u时间戳
结果很好。您的问题是将
unix\u时间戳
结果转换回
time\u stamp字符串
。您可以使用
转换utc\u时间戳
使时间戳位于相同的基础上。