(作者:陈玓玏 data-master)
如果sql无误的情况下,其实这个问题很好解决。一个很可能的原因就是:
写入的数据类型和建表时定义的数据类型不一致。
我之前碰到这个问题,检查了sql很多遍,上层表的数据也检查了很多遍,都是没有问题的。这个时候,可以选择几条数据,不写入表,直接看结果,发现是有结果的。
再检查建表语句,发现建表语句是:
create table tmp.a
(id int
,name string
,class_one float
,class_two float
,class_three float
) partitioned by
(type string)
stored as parquet
但写入时,class_one和class_two实际是string类型,定义时写错了,写成了float型,但写入时并未报错,应该是写入只是写入hdfs中,再更新元数据信息,依据元数据信息读取hdfs中的文件时无法解析对应字段,但不会妨碍写入文件系统。如果不是hive,其他数据碰到这个问题可能会报错的,但在hive中就不会,一定要小心这个问题。
如果sql没问题,直接select结果是正确的,那多半就是数据类型问题了。这样粗心的错误可能也只有我自己会犯了。