蜂巢的小时()函数返回2小时时钟值(Hive's hour() function retur

2019-08-05 06:44发布

根据该文件荨麻疹标准功能小时()应该返回0至24之间的值,但由于某种原因,我总是得到一个十二小时制时钟值,我使用的是0 12之间和MySQLDateTime字段作为Timestamp在我的蜂巢场表。 任何人都知道这个问题可能是什么?

Answer 1:

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

我看着荨麻疹文档中,但我无法找到有关第二函数的任何信息,但它的存在。 我使用的蜂巢0.9.0.16,其附带Hortonworks' HDP。

编辑:我报这个而回。 补丁现已: https://issues.apache.org/jira/browse/HIVE-3850 。



Answer 2:

无论什么样的hive做,你可以格式化日期到24小时格式返回。

select FROM_UNIXTIME(mydate)  
from mytable
;

或者,如果它是有道理的,你可以更新所有日期时间的邮票。

参考



Answer 3:

功能hour()返回24小时格式的结果,如果它与字符串格式的作品。 您可以使用

hour(cast (column_name as string))



Answer 4:

为蜂巢的低版本,我得到了一个解决方法

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

由于我使用的电子病历,我无法选择使用最新版本的蜂巢,所以我得到了这个解决办法。



Answer 5:

只是为了证明什么上面已经讲了一个例子

HOUR(铸造(from_utc_timestamp(my_date_timestamp, 'GMT')作为字符串)) - 返回24小时格式

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



文章来源: Hive's hour() function returns 12 hour clock value