配置单元-将字符串'yyyy-MM-dd'转换为日期,数据类型为'yyyy-MM-dd

时间:2018-09-04 11:52:51

标签: hadoop hive hiveql

我在蜂巢中有一个外部表,该表具有report_dt作为列,数据类型为string,其值类似于2018-09-02 2018-09-03

我想通过写在此外部表上的查询来创建托管表,其中report_dt_1作为列,数据类型为date

我经历了一些线程,并且能够像

一样查询
create table manag_newtable as select to_date(from_unixtime(unix_timestamp(report_dt,'yyyy-MM-dd'),'yyyy-MM-dd')) as report_dt_1 from exter_table;

因此上述查询创建了一个新表,但是当我desc manag_newtable时,report_dt_1仍显示为string datatype

1 个答案:

答案 0 :(得分:1)

在Hive 2.1.0之前,TO_DATE返回一个字符串。

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions

也许您想尝试CAST
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-date

否则,我建议将该列留为纪元时间,因为1)使用您当前的格式会丢失时区信息,尽管您从未拥有过,所以您假设使用UTC? 2)Hive需要更少的数字反序列化时间,从而使查询更快。如果必须格式化纪元,请在报告层而不是存储层