Можем ли мы использовать только столбец год-месяц временной метки в качестве ключа распространения в Amazon Redshift

#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 , которая дает хорошую визуальную аналогию для распределения данных.