Hive 联合所有性能
Posted
技术标签:
【中文标题】Hive 联合所有性能【英文标题】:Hive union all performance 【发布时间】:2013-11-01 17:12:48 【问题描述】:如果我有两个查询从同一个表中查询数据,但每个查询按不同的列分组。那么我应该使用两个单独的查询还是使用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;
【问题讨论】:
【参考方案1】:假设您有一个 UNION ALL
,其父项是 2 个 MapReduce 作业。
每个 MapReduce 作业都会将其输出写入临时文件,然后UNION
将读取这些临时文件并写入您的最终存储。如您所见,这是非常浪费的,因为您最终会读取和写入两次结果!
some improvements 已作为 Hive 0.10 的一部分完成,因此如果您运行的是较新版本之一,可以尝试一下。
【讨论】:
谢谢@Charles。请给我一些提示,这里的“文件接收器”和“父级”是什么意思?以上是关于Hive 联合所有性能的主要内容,如果未能解决你的问题,请参考以下文章