Как избежать перекоса в красном смещении для больших столов? - PullRequest
0 голосов
/ 07 декабря 2018

Я хотел загрузить таблицу с размером таблицы более 1 ТБ из S3 в Redshift.

Я не могу использовать DISTSTYLE в качестве ВСЕГО, потому что это большая таблица.

Я не могу использовать DISTSTYLE как ДАЖЕ, потому что я хочу использовать эту таблицу в соединениях, из-за которых возникают проблемы с производительностью.

Столбцы в моей таблице:

id INTEGER, имя VARCHAR (10), another_id INTEGER, рабочий день INTEGER, рабочий час INTEGER, worktime_number INTEGER

Наш кластер красных смещений имеет 20 узлов.

Итак, я попытался использовать ключ распределения в рабочий день, но таблица плохо перекошена.

Существует 7 уникальных рабочих дней и 24 уникальных рабочих часа.

Как избежать перекоса в таких случаях?

Как избежать перекоса таблицы в случае неравномерного количества строк дляуникальный ключ (скажем, час1 имеет 1 миллион строк, час2 имеет 1,5 миллиона строк, час3 имеет 2 миллиона строк и т. д.)?

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Вот архитектура, которую я рекомендую

1) загружать в промежуточную таблицу с четным распределением и сортировать по чему-то, что отсортировано в загруженных данных s3 - это означает, что вам не придется пылесосить промежуточную таблицу

2) настройте рабочую таблицу с сортировкой / дистрибутивом, необходимым для ваших запросов.после каждой копии из s3 загрузите эти новые данные в рабочую таблицу и пропустите вакуум.

3) вы можете захотеть иметь 2 производственных таблицы зеркал и переключаться между ними, используя представление поздней привязки.

Это немного сложно, для этого вам может понадобиться помощь профессионала.Там может быть специфика вашего варианта использования.

0 голосов
/ 09 декабря 2018

На момент написания этой статьи (сразу после переизобретения 2018 года) в Redshift имеется функция автоматического распространения, которая является хорошим началом.

Следующие утилиты пригодятся:

https://github.com/awslabs/amazon-redshift-utils/tree/master/src/AdminScripts

Как указано в Ответах POSTED ранее, попробуйте несколько комбинаций, реплицируя одну и ту же таблицу с разными ключами DIST, если вам не нравится, что делает Automatic DIST.После создания таблиц запустите утилиту администратора из репозитория git (предпочтительно создайте представление для сценария SQL в базе данных Redshift).

Кроме того, если у вас есть четкое представление о порядке использования запросов, вы можете использоватьследующие запросы, чтобы проверить, насколько хорошо работает ключ сортировки с использованием приведенных ниже SQL.

/**Queries on tables that are not utilizing SORT KEYs**/

SELECT t.database, t.table_id,t.schema, t.schema || '.' || t.table AS "table", t.size, nvl(s.num_qs,0) num_qs
FROM svv_table_info t
LEFT JOIN (
SELECT tbl, COUNT(distinct query) num_qs
FROM stl_scan s
WHERE s.userid > 1
AND s.perm_table_name NOT IN ('Internal Worktable','S3')
GROUP BY tbl) s ON s.tbl = t.table_id
WHERE t.sortkey1 IS NULL
ORDER BY 5 desc;

/**INTERLEAVED SORT KEY**/
--check skew
select tbl as tbl_id, stv_tbl_perm.name as table_name, 
col, interleaved_skew, last_reindex
from svv_interleaved_columns, stv_tbl_perm
where svv_interleaved_columns.tbl = stv_tbl_perm.id
and interleaved_skew is not null;

конечно, всегда есть возможности для улучшения приведенных выше SQL, в зависимости от конкретной статистики, которую вы можете посмотретьили уточните до.

Надеюсь, это поможет.

0 голосов
/ 07 декабря 2018

Распределите таблицу с помощью DISTSTYLE EVEN и используйте SORTKEY или COMPOUND SORTKEY.Ключ сортировки поможет повысить производительность вашего запроса.Попробуйте сначала.

DISTSTYLE / DISTKEY определяет, как ваши данные распределяются.Из столбцов, используемых в ваших запросах, рекомендуется выбрать столбец, который вызывает наименьший перекос в качестве DISTKEY.Столбец, который имеет много различных значений, таких как отметка времени, будет хорошим первым выбором.Избегайте столбцов с несколькими различными значениями, такими как типы кредитных карт или дни недели.

Возможно, вам придется пересоздать таблицу с различными комбинациями DISTKEY / SORTKEY и попробовать, какая из них будет работать лучше всего на основе ваших типичных запросов..

Для получения дополнительной информации https://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-sort-key.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...