Redshift выполняет полное сканирование таблицы даже с помощью ключа сортировки, используемого в предложении where - PullRequest
0 голосов
/ 09 января 2019

У меня есть таблица в кластере DC28XL с красным смещением, содержащая около 527 миллионов строк.

Я добавил определенный столбец varchar (называемый сегмент) в качестве моего ключа dist и ключа сортировки. каждый сегмент имеет около 4 миллионов строк. Когда я запускаю простой выбор с предложением where для одного сегмента select * from table where segment ='s1'; Redshift всегда выполняет последовательное сканирование и занимает более 3 минут.

Может кто-нибудь помочь мне избежать полного сканирования таблицы и снизить производительность до 10 секунд или меньше?

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Я согласен с Nate стиль распространения должен быть четным. Для производительности рекомендуется не сжимать ключи сортировки, необходимо использовать ENCODE raw

Проверьте этот вопрос, на который ответил инженер Redshift.

AWS Redshift: столбцы DISTKEY / SORTKEY должны быть сжаты?

Вы можете запустить ANALYZE COMPRESSION table, чтобы определить, какие столбцы должны быть сжаты

0 голосов
/ 09 января 2019

Хорошее эмпирическое правило для Amazon Redshift:

  • Установите DISTKEY для наиболее часто используемого столбца в JOIN
  • Установите SORTKEY для столбцов, наиболее часто используемых в WHERE

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

Если эти данные часто используют segment в предложении WHERE, тогда SORTKEY должно быть segment, а что-то еще должно быть DISTKEY (предпочтительно что-то используемое в JOINs или, если JOINs не используются, затем используйте DISTKEY EVEN).

0 голосов
/ 09 января 2019

Вероятно, вы получите лучшую производительность, если вы установите стиль распределения равным и сохраните ключ сортировки как сегмент. Это будет равномерно распределять данные по срезам, но сохраняя значения сегментов, отсортированные по блокам. Таким образом вы получите наибольшее распараллеливание и сведете к минимуму блоки, которые необходимо прочитать.

...