问题描述
在 hive on tez 中,使用类似 insert overwrite A select * from B union select * from C 操作时,会导致插入的表或分区目录下有子目录,引起除hive on tez之外的引擎不可查数据。
问题原因
tez 对于 insert union 操作做了优化,通过并行加快速度,同时防止表目录或分区目录下有相同文件,所以在输出的时候各自生成了子目录。但是在用户查询时,只有 hive tez 能正常查询。其他引擎因为子目录问题无法查询。
解决办法
所有 hive 均使用 tez 引擎
使用 sparkSQL 进行 inert union 操作
使用 tez 进行 insert union 操作时 加上 order by 操作
开启 MR 递归查询模式:
1
2set hive.mapred.supports.subdirectories=true;
set mapreduce.input.fileinputformat.input.dir.recursive=true;spark 查询时:
1
set mapreduce.input.fileinputformat.input.dir.recursive=true
后面两种方案需要考虑是否会对其他任务造成影响,建议前面两种。