2017-01-30 3 views
0

У меня есть таблица RedShift с хитами страниц, например, такРаспределяет ли Redshift по DISTKEY последовательно?

CREATE TABLE hits 
(
    user_id INT, 
    ts TIMESTAMP, 
    page VARCHAR(255) 
) 
SORTKEY(user_id, ts) 
DISTKEY(user_id); 

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

Но пользователи только активны в течение некоторого времени и нумеруются последовательно. user_id и time поэтому коррелируются, поэтому всякий раз, когда я запускаю запрос, который подмножества по времени (ts), это приведет к перекос, если Redshift также будет распределяться по user_id последовательно. Это будет менее проблематичным, если оно будет распределено случайно DISTKEY. Мой вопрос: не так ли?

(я новичок в RedShift так что все это может быть просто общее непонимание того, как работают вещи в целом. В этом случае извинения заранее!)

ответ

1

Amazon Redshift использует хэш РАСПРЕДЕЛЕНИЯ KEY (DISTKEY) для распространения записей данных между узлами.

Таким образом, записи будут распределены по-разному на кластере с тремя узлами, чем кластер с четырьмя узлами.

Если вы ищете равномерно распределенные данные, используйте метод распределения EVEN, который просто равномерно распределяет записи между узлами. (Тем не менее, это вряд ли будет оптимальным для вашего сценария использования.)

См документации:

+2

Просто, чтобы понять это немного лучше: Если у меня есть две отдельные таблицы, которые имеют одинаковые имена и типы столбцов и которые разделяют некоторые значения в одном из столбцов. Если я установил этот столбец как DISTKEY, будут ли строки, имеющие одинаковое значение в DISTKEY, на том же узле независимо от таблицы, в которой они находятся? – RoyalTS

+0

Я верю, что это правда, но я не могу найти документацию, которая конкретно говорит об этом. Значение передается через хеш-функцию, которая затем распределяет контент по узлам. Имя столбца не обязательно должно совпадать, оно использует только значение поля. –

+0

@RoyalTS да, строки с одинаковыми значениями DISTKEY заканчиваются на одних и тех же узлах, что позволяет объединить объединение. См. Раздел [query plan] (https://docs.aws.amazon.com/redshift/latest/dg/c-the-query-plan.html), особенно раздел о типах соединений, для информации о 'merge' vs 'hash' присоединяется. –

Смежные вопросы