Есть ли способ оптимизировать производительность этого запроса в Impala? - PullRequest
0 голосов
/ 10 декабря 2018

Этот запрос включает в себя 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 миллиардов строк.

Есть мысли?любой намек высоко ценится.

1 Ответ

0 голосов
/ 11 декабря 2018

Моя первая мысль - удалить предложение order by из вашего последнего запроса, использованного для создания вашей финальной таблицы.Эта операция действительно дорогая, и в дополнение к этому она не добавляет никакой ценности, учитывая, что данные не будут считываться последовательно, поэтому вы ничего от этого не получите.

Могут быть другие способы реализовать тот же запрос, было бы полезно, если бы вы могли объяснить проблему, которую вы пытаетесь решить, а не запрос, используемый для ее решения.

...