我在hive中有一个外部表,其中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
在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需要较少的数字反序列化时间,使查询更快。如果必须格式化纪元,请在报告层而不是存储层执行此操作