1

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

4

5 回答 5

4

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

我查看了 Hives 文档,但找不到关于第二个函数的任何信息,但它就在那里。我正在使用 Hortonworks 的 HDP 附带的 Hive 0.9.0.16。

编辑: 我已经报告了一段时间。现在有一个补丁可用:https ://issues.apache.org/jira/browse/HIVE-3850 。

于 2013-01-02T12:04:55.097 回答
2

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

select FROM_UNIXTIME(mydate)  
from mytable
;

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

参考

于 2013-01-02T11:28:13.583 回答
1

如果函数hour()使用字符串格式,则返回 24 小时格式的结果。您可以使用

hour(cast (column_name as string))

于 2013-12-19T19:45:11.643 回答
0

对于较低版本的配置单元,我有一个解决方法

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

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

于 2013-02-16T15:04:29.480 回答
0

只是为了展示上面已经讲过的例子

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

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

于 2014-12-05T18:31:37.400 回答