Оптимизация производительности Redshift для группировки операций - PullRequest
0 голосов
/ 23 сентября 2019

В настоящее время я нахожусь в испытании, что простая «группировка» занимает около 2 минут.Вот что я сделал:

  1. Я создаю таблицу
create table devdb.raw_external_listings.pq_base_account_table
(
sap_id varchar(50) 
,account_name nvarchar(max) 
,Lead_source_code smallint not null
,company_id nvarchar(50) 
,company_name nvarchar(max) 
,description nvarchar(max) 
,Lead_source_name nvarchar(max) 
,Source_Code nvarchar(50) not null
,Source_Name nvarchar(max) 
,source_country varchar(20) 
,business_model varchar(20) 
,posting_ID bigint not null
,Date_Posted date  not null 
,posted_year int not null
,posted_month int not null
,Work_Type varchar(max) 
,Job_Country varchar(20) 
,joblocation nvarchar(max) 
,class_id int 
,unique_clid varchar(max) not null  sortkey
--,unique_clid bigint not null  sortkey
,ultimate_parent_sap_id varchar(50) 
,ultimate_parent_name nvarchar(max)
,ultimate_legal_parent_sap_id varchar(50) 
,ultimate_legal_parent_sap_name varchar(max) 
,account_bl varchar(50) 
,postal_code varchar(50) 
,emp_resp_login varchar(50) 
,full_name nvarchar(max) 
)
Я вставил данные (54 миллиона строк) Я управляю своей группой по
SELECT count(distinct unique_clid),count(distinct company_id), count(distinct work_type), posted_year, posted_month
FROM devdb.raw_external_listings.pq_base_account_table with (nolock)
GROUP by posted_year, posted_month
order by posted_year, posted_month

Существует ли подход для оптимизации производительности этих основных методов агрегирования?

THX Lazloo

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Чтобы пояснить приведенный выше совет по ключевым ключам:

При этой настройке ваши данные за один и тот же год / месяц разбросаны по узлам кластера Redshift.Я мог бы представить, что для подсчета различных значений механизм будет получать уникальные значения на каждом узле, но затем он должен отправить эти списки на узел-лидер, чтобы объединить их в основной уникальный список и, наконец, подсчитать.Если вы распределяете данные по столбцу год или месяц, это может завершить подсчет отдельных операций на каждом узле независимо, что ускоряет процесс.

Вы также можете сортировать данные по столбцам, по которым вы группируете, но главное, вероятно, распределить.

Нет необходимости сортировать по unique_clid, по крайней мере, для этого запроса.

0 голосов
/ 23 сентября 2019

В Redshift есть концепция sort_key и dist_key, которая очень важна для оптимизации в Redshift.Эти ключи определяют, как данные хранятся в Redshift для таблицы.

В вашем случае в настоящее время Redshift выбирает эти клавиши по умолчанию, что может быть, а может и не быть эффективным в соответствии с вариантом использования пользователя.Пожалуйста, пройдите по ссылкам ниже и оформьте свои таблицы соответственно.

Шаги для рассмотрения https://docs.aws.amazon.com/redshift/latest/dg/tutorial-tuning-tables.html

Для ключей сортировки: https://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-sort-key.html

Для ключей дистрибуции: https://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-best-dist-key.html

...