根据文档Hives标准函数hour()应返回0到24之间的值,但由于某种原因,我总是得到一个12小时的时钟值,介于0到12之间。我正在使用MySQLDateTime
字段作为我的Hive表中的Timestamp
字段。任何人都知道问题可能是什么?
答案 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
;
或者,如果有意义,您可以更新所有日期时间标记。
答案 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小时格式