hive linux时间戳转换,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 | |

----------------------------------

我也尝试这个

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值