如果我有两个查询从同一个表查询数据,但每个组按不同的列查询。那我应该使用两个单独的查询或使用union all
函数?我关心的是表现。因为有些人说如果没有必要,应该避免union all
,否则这是一个很大的开销。
例如,我应该使用UNION ALL
进行以下查询吗?请指教。感谢。
INSERT INTO TABLE newtable
SELECT SUBSTRING(A1, 1, 7) AS col1, COUNT(DISTINCT B) AS col2, C AS col3
FROM oldtable
GROUP BY SUBSTRING(A1, 1, 7), C;
INSERT INTO TABLE newtable
SELECT A2 AS col1, COUNT(DISTINCT B) AS col2, C AS col3
FROM oldtable
GROUP BY A2, C;
答案 0 :(得分:1)
假设你有一个UNION ALL
,其父母是2个MapReduce工作。
每个MapReduce作业都会将其输出写入临时文件,然后UNION
将读取这些临时文件并写入最终存储。因此,您可以看到它非常浪费,因为您最终会阅读并写两次结果!
有some improvements作为Hive 0.10的一部分已经完成,所以如果您正在运行其中一个较新的版本,可以尝试一下。