2016-09-08 4 views
0

wenn ich diese SQL ausführen, dauert es etwa eine halbe Stunde und es ist inakzeptabel. Die Quellentabelle hat 20M Datensätze.Rang() 20M Datensätze in Bienenstock

Mit jedem Rang() erstellen Sie einen mapreduce-Job, der 7 Minuten lang ausgeführt wird, wobei alle Daten in einem Reduzieren enthalten sind. Wie optimiert man diese SQL? Können diese Rank MapReduce parallel laufen?

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; 

Antwort

0

Von How to make hive run mapreduce jobs concurrently?:

In hive-default.xml gibt es eine Eigenschaft mit dem Namen "hive.exec.parallel" die Arbeit parallel ausführen ermöglichen könnte. Der Standardwert ist "false". Du kannst es auf "wahr" setzen, um diese Fähigkeit zu erhalten. Sie können eine andere Eigenschaft "hive.exe.parallel.thread.number" verwenden, um zu steuern, wie viele Jobs höchstens parallel ausgeführt werden können.

Das kann dazu führen, dass jeder der Ränge parallel ausgeführt wird, aber ich habe nicht getestet.

+0

Der Parameter hive.exe.parallel ist bereits auf TRUE und hive.exe.parallel.thread.number = 8 gesetzt. –