ドキュメントによると、Hives の標準関数 hour() は 0 から 24 の間の値を返すはずですが、何らかの理由で常に 0 から 12 の間の 12 時間時計の値を取得します。Hive テーブルのMySQLDateTime
フィールドとしてフィールドを使用しています。Timestamp
誰が問題が何であるか知っていますか?
5 に答える
I think I found it. I looked at the source code and apparently UDFHour.java
does have two evaluate()
functions. One that does accept a Text
object as parameter and one that uses a TimeStampWritable
object as parameter. Both work with a Calendar
instance but for some reason the first function returns the value of Calendar.HOUR_OF_DAY
and the second one Calendar.HOUR
.
I've looked in the Hives documentation but I couldn't find anything about that second function, but it's there. I'm using Hive 0.9.0.16, which came with Hortonworks' HDP.
Edit: I've reported this a while back. A patch is now available: https://issues.apache.org/jira/browse/HIVE-3850.
何hive
が行われたかに関係なく、返される日付を24時間形式としてフォーマットできます。
select FROM_UNIXTIME(mydate)
from mytable
;
または、意味がある場合は、すべての日時スタンプを更新できます。
ハイブの下位バージョンの場合、回避策があります
hour(from_unixtime(
unix_timestamp(
from_utc_timestamp(
from_unixtime(round(created_at/1000)),'Etc/GMT-8')
)))
私はEMRを使用しているため、最新バージョンのハイブを使用することを選択できません。そのため、この回避策を取得しました。
上記ですでに述べたことの例を示すだけです
HOUR(cast (from_utc_timestamp(my_date_timestamp ,'GMT') as string)) -- 24 時間形式を返します
HOUR( from_utc_timestamp(my_date_timestamp ,'GMT') ) -- 12 時間形式を返します