根据该文件荨麻疹标准功能小时()应该返回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