Hive 使用第一个unix\u时间戳将列中的每一行转换为最新
我有以下格式的行,我想转换成有效的配置单元时间戳。“我的数据”中的格式:Hive 使用第一个unix\u时间戳将列中的每一行转换为最新,hive,timestamp,unix-timestamp,Hive,Timestamp,Unix Timestamp,我有以下格式的行,我想转换成有效的配置单元时间戳。“我的数据”中的格式: 28/04/2017 00:00:00|20550|22/05/2017 00:00:00| 我只对第一列和第三列感兴趣,用|分隔,在我的例子中,格式是,然后: dd/MM/yy HH:mm:ss 我发现这不能在蜂箱中用作时间戳 我发现自己无法使用类似以下查询将所有第一列和第三列转换为正确的格式: select from_unixtime(unix_timestamp('28/04/2017','dd/MM/yy HH
28/04/2017 00:00:00|20550|22/05/2017 00:00:00|
我只对第一列和第三列感兴趣,用|分隔,在我的例子中,格式是,然后:
dd/MM/yy HH:mm:ss
我发现这不能在蜂箱中用作时间戳
我发现自己无法使用类似以下查询将所有第一列和第三列转换为正确的格式:
select from_unixtime(unix_timestamp('28/04/2017','dd/MM/yy HH:mm:ss'),'yyyy-MM-dd') from `20170428_f_pers_pers`
我正在尝试该查询的不同实例,但由于我无法访问文档(internet在工作时被限制),我看不到如何正确使用这两个函数,from\u unixtime
和unix\u timestamp
我做了以下假设:
select from_unixtime(unix_timestamp(f_Date, 'dd/MM/yyyy HH:mm:ss')) from `myTable`
但我从HUE得到以下错误:
Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
输入字符串应完全覆盖格式。
换句话说-
格式的长度可以等于输入字符串的长度,也可以更短,但不能更长
28/04/2017 00:00:00
|||||||||||||||||||
dd/MM/yyyy HH:mm:ss
2017-04-28 00:00:00
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)
我懂了。。。是否可以将该查询应用于列中的所有数据?最终的想法是将数据作为时间戳,这可能吗?也许这就是为什么这个查询总是失败的原因。这对我来说真的很有帮助,因为我也在寻找投球的方法。但是,如果不是只有一行,而是有2000行,是否可以将该操作应用于整个列?例如,如果“2017年4月28日00:00:00”在“日期”列中,您如何将您向我展示的操作应用于该列中的每一行?可能吗?当然可能。标量函数适用于表达式。为什么硬编码表达式和列名之间会有任何区别?为什么查询一个2000行的表和查询一个单行的“表”会有什么区别呢?因为当我用一个列名和一个表切换您的工作示例时,查询失败了:S我正在使用这个,稍微改编自您的示例:select cast(从unixtime(到unix)timestamp(f_date,'dd/MM/yyyy HH:MM:ss'))作为时间戳)从
表中
如果出现故障,则很可能与您的帖子/我的答案无关。如果我的示例“按原样”适用于您,那么为您打开一个新问题,并包含完整的堆栈跟踪
28/04/2017 00:00:00
||||||||||
dd/MM/yyyy
select from_unixtime(to_unix_timestamp('28/04/2017 00:00:00', 'dd/MM/yyyy'))
select cast (from_unixtime(to_unix_timestamp('28/04/2017 00:00:00', 'dd/MM/yyyy HH:mm:ss')) as timestamp)