hive性能优化-ctes

brccelvz  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(272)

请求您了解如何调整hive CTE以提高性能。我有一个类似这样的查询。edit:注意下面的两个语句具有不同的Map条件,因此这两个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来执行,还是将其具体化为一个具有最佳索引、bucketing和排序的stage表?谢谢!

egmofgnx

egmofgnx1#

这太长了,不能发表评论。
你为什么用这个 union all ? 为什么不用呢 or :

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

dvtswwa32#

我的理解是,联合体都将多次运行该查询。
如果您使用

select * from cte
where condition_1 OR condition_2

而不是

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

如果你必须从cte中选择多次,我的理解是每次都从磁盘读取。
我的理论(仅基于我有限的经验)是,temp表的性能提高取决于您拥有多少ram和您的服务器设置

相关问题