#amazon-web-services #amazon-redshift
#amazon-веб-сервисы #amazon-redshift
Вопрос:
У меня есть таблица из примерно 300 миллионов записей в Redshift.
В любом случае, мы можем указать год-месяц в качестве ключа распространения вместо метки времени. Улучшит ли это производительность, если я выберу key diststyle, поскольку в основном нам нужно запрашивать квартальные данные.
Ответ №1:
Вы не хотите этого делать.
В Amazon Redshift ключ распространения ( DISTKEY
) используется для распределения данных между фрагментами (на узел приходится несколько фрагментов). Когда запрос соединяет две таблицы с использованием DISTKEY, он выполняется намного быстрее, поскольку данные в обеих таблицах, относящиеся к этому ключу, находятся в одном срезе — нет необходимости перемещать данные между срезами, и срезы могут работать параллельно. DISTKEY должен быть полем, которое вы используете чаще всего для ОБЪЕДИНЕНИЯ таблиц вместе.
Существует также ключ сортировки ( SORTKEY
), который сортирует данные, хранящиеся на срезе. Запрос, который использует этот ключ СОРТИРОВКИ в WHERE
предложении, будет работать более эффективно, потому что запрос может пропускать блоки на диске. Каждый дисковый блок размером 1 МБ содержит значения, относящиеся к одному столбцу в одной таблице. Каждый блок имеет карту зон, которая определяет минимальные и максимальные значения в блоке. Если блок не содержит значений, соответствующих предложению WHERE, то Redshift не нужно читать блок. Это делает запрос чрезвычайно быстрым.
Итак, если вы в основном запрашиваете квартальные данные, вам следует установить КЛЮЧ СОРТИРОВКИ таблицы в поле «Временная метка». Это позволит каждому фрагменту обрабатывать данные параллельно, пропуская при этом нерелевантные блоки диска. НЕ используйте значение даты для DISTKEY — это приведет к выполнению запроса только одним фрагментом, и он будет выполняться медленнее. Вместо этого установите свой DISTKEY на то, что вы в основном используете для объединения этой таблицы с другими таблицами (например, идентификатор клиента).
Комментарии:
1. Большое спасибо за подробное объяснение. Не могли бы вы, пожалуйста, объяснить мне, как данные распределяются по нескольким узлам. И как стиль распространения может повлиять на производительность?
2. Документация: Выберите лучший стиль распространения и примеры распространения . Я также рекомендую посмотреть презентацию Redshift от AWS Summit , которая дает хорошую визуальную аналогию для распределения данных.