我在蜂巢中有一个外部表,该表具有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
答案 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需要更少的数字反序列化时间,从而使查询更快。如果必须格式化纪元,请在报告层而不是存储层