Hive:如何转换毫秒时间戳?
问题描述:
我试图使用的HIVE UDFs
(https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions) 正确地读入一些时间戳。Hive:如何转换毫秒时间戳?
不幸的是,我一直没能正确解析以下时间戳:
unix_timestamp('2011-03-01T00:00:04.226Z', 'yyyy-MM-ddThh:mm:ss.SSS')
回报NA
秒。
任何想法?这里的正确模式是什么? 谢谢!
答
需要引用T
和Z
hive> select unix_timestamp('2011-03-01T00:00:04.226Z', "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'");
OK
1298959204
或者试试这个,如果你不害怕笨拙:
select unix_timestamp(cast(regexp_replace('2011-03-01T00:00:04.226Z', '(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}).(\\d{3})Z', '$1-$2-$3 $4:$5:$6.$7') as timestamp))
从EST
转换为UTC
,使用以下命令:
hive> select to_utc_timestamp(unix_timestamp('2011-03-01T00:00:04.226Z', "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'")*1000, 'EST');
OK
2011-03-01 05:00:04
Multiplicati与1000
是必需的,因为从Hive Language Manual:
小数值被视为秒。整数值被认为是毫秒。例如to_utc_timestamp(2592000.0,'PST'),to_utc_timestamp(2592000000,'PST')和to_utc_timestamp(timestamp'1970-01-30 16:00:00','PST')都返回timestamp 1970-01-31 00:00:00
这真的很棒! –
返回一个bigint类型。你知道为什么我不能使用'to_utc_timestamp(mytime,'EST')'mytime是我们刚刚创建的'unix_timestamp'吗?你将如何将它转换为时间戳类型? –
假设原始时间戳在'EST'中,我希望它在'GMT' –