2013-01-02 31 views
1

根據文檔Hives標準函數hour()應返回0到24之間的值,但出於某種原因,我總是得到0到12之間的12小時時鐘值。在我的Hive表中使用MySQLDateTime字段作爲Timestamp字段。任何人都知道問題可能是什麼?Hive的hour()函數返回12小時時鐘值

+0

它們是否存儲爲0-12?或者它只是一個檢索問題? – Cynical

+0

這只是一個檢索問題。當我選擇他們沒有功能,我看到他們正確。 – Pieterjan

回答

4

我想我找到了。我看了看源代碼,顯然UDFHour.java確實有兩個evaluate()函數。一個確實接受Text對象作爲參數,另一個使用TimeStampWritable對象作爲參數。兩者都與Calendar實例一起工作,但由於某種原因,第一個函數返回值Calendar.HOUR_OF_DAY和第二個Calendar.HOUR

我查看了蜂巢文檔,但找不到有關第二個函數的任何內容,但它在那裏。我使用Hortonworks的HDP附帶的Hive 0.9.0.16。

編輯: 我已經報道了一陣子。現在有一個補丁:https://issues.apache.org/jira/browse/HIVE-3850

2

無論hive做了什麼,您都可以將要返回的日期格式化爲24小時格式。

select FROM_UNIXTIME(mydate) 
from mytable 
; 

或者您可以更新所有日期時間戳,如果它是有道理的。

Reference

+0

@Pieterjan我在網上查詢是否有其他人遇到同樣的問題。如果發現相關的東西,會讓你張貼:) – bonCodigo

+0

非常感謝!我發佈了,我認爲是以下問題。 – Pieterjan

0

爲蜂巢的低版本,我得到了解決辦法

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

由於我使用的電子病歷,我無法選擇使用最新版本的蜂巢,所以我得到了這個解決辦法。

1

如果函數hour()以字符串格式工作,則會返回24h格式化結果。您可以使用

hour(cast (column_name as string))

0

爲了表明什麼上面已經

HOUR告訴一個例子(CAST(from_utc_timestamp(my_date_timestamp, 'GMT')作爲字符串)) - 返回24小時制

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