【发布时间】:2017-06-23 08:01:05
【问题描述】:
我有以下格式的行,我想将其转换为有效的 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 和 unix_timestamp
我做了以下假设:
- 我可以重新排序日期和年份。如果这不是真的,我不知道如何将我的原始数据转换为正确的 Hive 格式
- 当我执行此选择时,它会影响整个列。此外,在成功完成此操作后,我应该能够将整个列的格式从字符串更改为时间戳(也许我必须为此创建一个新列,不确定)
我不关心同时处理两个列,但是现在当我首先执行查询时,我得到的空值与我的表中的数据一样多,而且我不确定我的假设是否部分正确,因为每个示例我come accros 更简单(例如,它们不会改变周围的日子和年份)。
我想知道如何将查询应用于特定列,因为从目前研究的示例中我还不明白如何做到这一点。我没有看到他们使用任何类型的列 ID,这对我来说很奇怪,使用列中的数据来更改列本身。
提前致谢。
编辑:我现在正在尝试类似
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
【问题讨论】:
标签: hive timestamp unix-timestamp