Настройка Spark-SQL на производительность - PullRequest
0 голосов
/ 27 июня 2019

Я работаю в проекте, где ETL выполняется с помощью Spark SQL buy, создавая последовательность временных представлений по мере продвижения.Недавно я натолкнулся на сценарий, для возврата которого требуется огромное время, что вынуждает нас каждый раз отменять его.Тем не менее, довольно интересно, что это временное представление (о котором идет речь) создается за доли секунды, но когда я выполняю простой select * from temp_view, он, кажется, выполняется вечно.Количество записей также очень низкое < ~10K) Кроме того, существуют другие временные представления, которые демонстрируют ту же проблему, даже при 10 записях.Я уверен, что мне чего-то не хватает здесь, что вызывает эту проблему.

Я попытался увеличить размер блока и механизм выполнения до TEZ, но тщетно.Сценарий начинается с создания представлений, которые хороши при выполнении select * from view_name, но по мере выполнения сценария он начинает становиться неприятным.Я показал пример кода ниже.Это вид, с которого все начинает идти вбок.Пожалуйста, дайте мне знать, если мы можем сделать что-нибудь с этим.

create temporary view plcy_cntrct_tmp1 as
select susp*, ct.polcy_ct_dim
from plcy_susp susp
left outer join plcy_ct
on susp.polcy.plcy_no = ct.polcy_no
where eff_dt BETWEEN susp.eff_start_dt AND susp_eff_end_dt
and ct.cntrct_end_dt >= susp.eff_end_dt;

create temporary view as
select 
q2.plcy_dim_key,
q2.plcy_no
from (select q1.*, row_number() over (partition by plcy_dim_key, plcy_no, plcy_eff_dt, plcy_eff_end_dt ORDER BY cnt_eff_dt DESC) as rn
from (select plcy.*, cnt.eff_dt
from (select plcy_cntc_dim_key, cnt.eff_dt
from (select plcy_cntct_dim_key, polcy_no, eff_dt, eff_mth_dt
from plcy_susp
MINUS
select plcy_cntct_dim_key, polcy_no, eff_dt, eff_mth_dt
from plcy_cntrct_tmp1 ) polcy
left outer join plcy_cntcrct cnt
on cnt.eff_dt < plcy.eff_start_dt
and cnt.policy_no = polcy.polcy_no
and cnt.cntc_end_dt >= polcy.eff_end_dt) q1) q2
UNION ALL
select polcy_dim_key, polcy_no
FROM polcy_cntrct_tmp1;```  

Please understand that the code from above may not be syntactically correct, I am just trying to give my question a context. There are around 35 of such intermediate view created in this script. I just provided the point from where things start giving trouble. 
Kindly suggest if any way this can be optimized. Also, under what circumstances would a query ```select * from temp_view``` with only 9 records will execute forever.
...