Hive的hour()函数返回12小时时钟值

时间:2013-01-02 11:19:00

标签: mysql hadoop hive

根据文档Hives标准函数hour()应返回0到24之间的值,但由于某种原因,我总是得到一个12小时的时钟值,介于0到12之间。我正在使用MySQLDateTime字段作为我的Hive表中的Timestamp字段。任何人都知道问题可能是什么?

5 个答案:

答案 0 :(得分:4)

我想我找到了它。我查看了源代码,显然UDFHour.java确实有两个evaluate()函数。一个接受Text对象作为参数,另一个使用TimeStampWritable对象作为参数。两者都使用Calendar实例,但由于某种原因,第一个函数返回Calendar.HOUR_OF_DAY的值,第二个函数返回Calendar.HOUR

我查看了Hives文档,但我找不到关于第二个函数的任何内容,但它就在那里。我使用Hive 0.9.0.16,它与Hortonworks的HDP一起使用。

修改 我已经报道过这一段时间了。现在可以使用补丁:https://issues.apache.org/jira/browse/HIVE-3850

答案 1 :(得分:2)

无论hive做了什么,您都可以将要返回的日期格式化为24小时格式。

select FROM_UNIXTIME(mydate)  
from mytable
;

或者,如果有意义,您可以更新所有日期时间标记。

Reference

答案 2 :(得分:1)

如果函数hour()使用字符串格式,则返回24h格式化结果。你可以使用

hour(cast (column_name as string))

答案 3 :(得分:0)

对于较低版本的hive,我得到了一个解决方法

    hour(from_unixtime(
unix_timestamp(
from_utc_timestamp(
from_unixtime(round(created_at/1000)),'Etc/GMT-8')
)))

由于我使用EMR,我无法选择使用最新版本的hive,所以我得到了解决方法。

答案 4 :(得分:0)

仅举例说明上面已经说过的内容

HOUR(cast(from_utc_timestamp(my_date_timestamp,' GMT')as string)) - 返回24小时格式

HOUR(from_utc_timestamp(my_date_timestamp,' GMT')) - 返回12小时格式