我在 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 需要更少的数字反序列化时间,使查询更快。如果您必须格式化纪元,请在报告层而不是存储层执行此操作
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句