Hive性能优化 - CTE

时间:2018-04-03 00:11:01

标签: sql hive common-table-expression

请求您了解蜂巢CTE如何针对性能进行调整。我有一个看起来像这样的查询。编辑:请注意下面的两个语句具有不同的映射条件,因此两个WHERE条件不能简单地与OR条件组合,如以下注释中所建议的那样。

WITH complex_query AS (
... big nasty HQL statement ...
)
SELECT complex_mapping_case FROM complex_query
WHERE condition_1
UNION ALL 
SELECT different_mapping_case FROM complex_query
WHERE condition_2
UNION ALL 
.... many more times....

Hive是否智能地执行一次CTE查询并将结果存储在内存中(或磁盘上),还是为每个WHERE条件多次执行CTE?

您是否认为最好将其作为CTE执行,或将其实现为具有最佳索引,分组和排序的舞台表?谢谢!

2 个答案:

答案 0 :(得分:1)

我的理解是union all会多次运行该查询。

如果您使用

,它应该更有效率
select * from cte
where condition_1 OR condition_2

而不是

select * from cte
where condition_1
  union all
select * from cte
where condition_2

如果你必须多次从cte中选择,我的理解是它每次从磁盘读取。

我的理论(仅基于我有限的经验)是临时表的性能提升取决于你拥有多少Ram和你的服务器设置

答案 1 :(得分:0)

评论太长了。

您为什么使用union all?为什么不使用or

WITH complex_query AS (
... big nasty HQL statement ...
)
SELECT *
FROM complex_query
WHERE condition_1 OR condition_2 . . .