我有以下格式的行,我想将其转换为有效的Hive时间戳。我的数据格式:
28/04/2017 00:00:00|20550|22/05/2017 00:00:00|
我只对第一列和第三列感兴趣,用|分隔,在我的情况下格式是,然后:
dd/MM/yy HH:mm:ss
我发现这不能用作Hive中的时间戳。
我发现自己无法使用类似于:
的查询将所有第一列和第三列转换为正确的格式select from_unixtime(unix_timestamp('28/04/2017','dd/MM/yy HH:mm:ss'),'yyyy-MM-dd') from `20170428_f_pers_pers`
我正在尝试该查询的不同实例,但由于我无法访问文档(互联网在工作中受到限制),我无法看到如何正确使用这两个函数from_unixtime
和{ {1}}
我做了以下假设:
我不关心同时执行这两个列,但是现在当我执行查询时首先得到的数据与我的表中的数据一样多,并且我不确定我的假设是否部分正确,因为每个示例我变得越来越简单(例如,它们不会改变日期和年份)。
我想知道如何将查询应用于特定列,因为我还不知道如何从目前为止研究的示例中做到这一点。我没有看到他们使用任何类型的列ID,这对我来说很奇怪,使用列中的数据来更改列本身。
提前致谢。
编辑:我现在正在尝试类似
的内容unix_timestamp
但我从HUE得到以下错误:
select from_unixtime(unix_timestamp(f_Date, 'dd/MM/yyyy HH:mm:ss')) from `myTable`
答案 0 :(得分:1)
格式应完全由输入字符串覆盖
换句话说 -
格式的长度可以与输入字符串相等或更短,但不能更长。
28/04/2017 00:00:00
|||||||||||||||||||
dd/MM/yyyy HH:mm:ss
select from_unixtime(to_unix_timestamp('28/04/2017 00:00:00', 'dd/MM/yyyy HH:mm:ss'))
2017-04-28 00:00:00
28/04/2017 00:00:00
||||||||||
dd/MM/yyyy
select from_unixtime(to_unix_timestamp('28/04/2017 00:00:00', 'dd/MM/yyyy'))
2017-04-28 00:00:00
可以使用cast
select cast (from_unixtime(to_unix_timestamp('28/04/2017 00:00:00', 'dd/MM/yyyy HH:mm:ss')) as timestamp)