Тази заявка включва 4 таблици и струва 10,5 часа за изпълнение:
Етап 1:
create table temp partitioned by (date_pull) stored as parquet as
select <fields>
from trans_ext -- this is the base table
inner join [shuffle] ac -- fact_acc
inner join [shuffle] c --related_acc
left join dt --trx_type
статистически данни за броя на редовете за таблиците:
trans_ext: 8,289,244,895 (72 partitions)
ac: 985,164,794 (1 partitions)
c: 17,496,531 (1 partition)
dt 4: 369 (1 partition)
Стъпка 2: Създайте таблица за преброяване h от temp
select related_cust, count(*) as ct from temp group by related_cust;
Стъпка 3: Създайте финална таблица чрез вътрешно присъединяване към таблицата за преброяване и прилагане на клауза where
select t.*
from temp t
inner join [shuffle] h on h.related_cust=t.related_cust
where t.related_cust is not null
and h.ct <=1000000
order by t.related_cust;
Мисля си как мога да премахна таблицата за преброяване и директно да създам крайния резултат? размер на финалната маса: 19,6 милиарда реда.
Някаква мисъл? всеки намек е високо оценен.