当我运行这个sql时,它需要大约半个小时,这是不可接受的。源表有20M条记录。
每个rank()创建一个mapreduce作业,运行7分钟,所有数据都在一个reduce中。如何优化这个sql?这些排名mapreduce可以并行运行吗?
create table tmp.xxxx as
SELECT t.end_user_id,
t.pm_net_amt,
t.parnt_ordr_num,
rank() over(order by t.pm_net_amt) pm_net_amt_rank,
rank() over(order by t.parnt_ordr_num) parnt_ordr_num_rank,
rank() over(order by t.cat_lvl3_num) cat_lvl3_num_rank,
rank() over(order by t.discount_rate) discount_rate_rank
from bi_tmp.bbbbbb t; 发布于 2016-09-08 21:22:19
来自How to make hive run mapreduce jobs concurrently?
在hive-default.xml中,有一个名为"hive.exec.parallel“的属性,可用于并行执行作业。默认值为"false“。您可以将其更改为"true“以获得此能力。您可以使用另一个属性"hive.exec.parallel.thread.number“来控制最多可以并行执行多少个作业。
这可能会导致每个级别并行运行,但我没有测试过。
https://stackoverflow.com/questions/39387918
复制相似问题