我想這是很容易...Hive/SparkSQL:如何將Unix時間戳轉換爲時間戳(不是字符串)?
在蜂巢/ SparkSQL,我該如何轉換unix時間戳[注1]爲timestamp
數據類型?
(注1:也就是說,自1970年1月1日秒/分的毫秒數)
我想from_unixtime()
會做到這一點,但它給回一個字符串 ,而不是一個時間戳。以下實驗說明了該問題
步驟0:製備
select
from_unixtime(1508673584) as fut;
結果:
-----------------------
| fut |
| ------------------- |
| 2017-10-22 11:59:44 |
-----------------------
步驟1:創建與的結果的表from_unixtime()
create table test
select
from_unixtime(1508673584) as fut;
步驟2:檢查所述列的數據類型fut
describe test;
結果:
----------------------------------
| col_name | data_type | comment |
| -------- | --------- | ------- |
| fut | string | <null> |
----------------------------------
我也嘗試這個
select
from_utc_timestamp(1508618794*1000, 'EDT');
根據手冊(鏈路here),這應該工作。因爲它 指出:
覆羽在UTC時間戳*給定的時區(如蜂房0.8.0的)。 * timestamp是一個基本類型,包括時間戳/日期, tinyint/smallint/int/bigint,float/double和decimal。分數 值被視爲秒。整數值被認爲是 毫秒。例如from_utc_timestamp(2592000.0,'PST'), from_utc_timestamp(2592000000,'PST')和from_utc_timestamp(時間戳 '1970-01-30 16:00:00','PST')所有返回的時間戳一九七○年一月三十日 08:00:00
不過,我得到的
Error: org.apache.spark.sql.AnalysisException:
cannot resolve 'from_utc_timestamp((1508618794 * 1000), 'EDT')'
due to data type mismatch:
argument 1 requires timestamp type,
however, '(1508618794 * 1000)' is of int type.; line 2 pos 2;
'Project [unresolvedalias(from_utc_timestamp((1508618794 * 1000), EDT), None)]
+- OneRowRelation$
SQLState: null
ErrorCode: 0