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 联合所有性能的主要内容,如果未能解决你的问题,请参考以下文章

性能下降返回光标与联合所有

联合所有在 SQL Server 中的视图性能问题

两个查询的 Hive 联合给出编译错误

Hive 中的联合分组结果集

使用多个联合优化查询性能

SQL Hive:选择 (*) LIMIT 1 基于 3 列的组合,R 中的联合,RODBC