请求您了解蜂巢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执行,或将其实现为具有最佳索引,分组和排序的舞台表?谢谢!
答案 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 . . .