Hive - 在整个列中永久更改日期和类型的正确方法

问题描述

如果有人能在这里逐步解释将日期格式和列类型从字符串更改为日期的过程在通过 Hive View 导入到 HDP 2.6.5 的表中应该是什么样子,我将不胜感激。 数据源是著名的 MovieLens 100K 数据集('u.item' 文件),来自: https://grouplens.org/datasets/movielens/100k/

$ hive --version 为:1.2.1000.2.6.5.0-292
列的日期格式为:'01-Jan-1995'
列的数据类型为:'string'
ACID 事务处于“开启”状态

最终,我想将整列中的数据永久转换为正确的 Hive 格式“yyyy-MM-dd”,并将下一列类型转换为“日期”。
我之前看过十多个关于类似问题的主题。当然,问题不是像这样显示列,只需使用:

即可轻松完成

SELECT from_unixtime(unix_timestamp(prod_date,'dd-MMM-yyyy'),'yyyy-MM-dd') FROM moviesnames;

问题是最后是这样写的。不幸的是,尽管 Hive 配置中包含原子操作,但无法通过以下方式通过 UPDATE 完成。

UPDATE moviesnames SET prodate = (select to_date(from_unixtime(UNIX_TIMESTAMP(prod_date,'dd-MMM-yyyy'))) from moviesnames);

使用 Hive-sql 实现上述目标的最简单方法是什么?通过复制和转换一列或整个表?

解决方法

试试这个:

UPDATE moviesnames SET prodate = to_date(from_unixtime(UNIX_TIMESTAMP(prod_date,'dd-MMM-yyyy')));