我试图加载一个包含17列的表,其中一列(datetime)被加载为null。我不确定是否使用了正确的数据类型。这是我的加载脚本:
CREATE EXTERNAL TABLE IF NOT EXISTS
Weather(year INT, month INT, day int, TimeCST timestamp, temperature float,
dew float, humidity int, sea float, visibility int, wind STRING, wspeed float,
gust float, rain float, events string, conditions string, degrees int, dateutc datetime)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/home/ubuntu/final';
麻烦的列是dateutc列。我尝试同时作为datetime和timestamp加载,但都显示为null。下面是来自底层csv的值。1/1/2000 7:53.
你知道为什么会这样吗?
谢谢
1条答案
按热度按时间jq6vz3qz1#
文本文件中的时间戳必须使用格式yyyy-mm-dd hh:mm:ss[.f…]。如果它们是另一种格式,则将它们声明为适当的类型(int、float、string等),并使用自定义项将它们转换为时间戳。
在表级别上,可以通过向serde属性“timestamp.formats”提供格式来支持替代的时间戳格式(从hive-9298的版本1.2.0开始)。例如,yyyy-mm-dd't'hh:mm:ss.sss,yyyy-mm-dd't'hh:mm:ss。
参考资料如下:https://cwiki.apache.org/confluence/display/hive/languagemanual+types