我有以下格式的行,我想转换成有效的配置单元时间戳。我的数据格式:
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
我做了以下假设:
我可以重新安排日子和年份。如果这不是真的,我不知道如何将我的原始数据转换成适当的配置单元格式
当我选择这个选项时,它会影响整个列。此外,在成功地完成这项工作之后,我应该能够将整个列的格式从string更改为timestamp(可能我必须为此创建一个新列,不确定)
我不想同时做这两列,但现在当我做查询时,我得到的空值和我的表中的数据一样多,我不确定我的假设是否部分正确,因为我遇到的每个例子都比较简单(例如,它们不会改变前后的天数和年份)。
我想知道如何将查询应用到特定的列,因为我还不知道如何从目前研究的示例中执行该操作。我没有看到他们为此使用任何类型的列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
1条答案
按热度按时间2fjabf4q1#
输入字符串应该完全覆盖格式。
换句话说-
格式的长度可以等于输入字符串的长度,也可以更短,但不能更长。
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)