Кодирование UUID Postgres в Amazon Redshift - PullRequest
0 голосов
/ 08 ноября 2019

У нас есть несколько сущностей, которые сохраняются в Amazon Redshift для целей отчетности, и эти сущности имеют отношения между ними. Исходные таблицы в Postgres связаны через внешний ключ с типом данных UUID, который не поддерживается в Redshift.

Один из вариантов - кодировать UUID как 128-битное целое число со знаком. Документация Redshift относится к возможности создания NUMBER (38,0) и к возможности создания 128-битных чисел.

Но 2 ^ 128 = 340,282,366,920,938,463,463,374,607,431,768,211,456, что составляет 39 цифр. (спасибо Википедия). Таким образом, несмотря на то, что говорят документы, вы не можете хранить полные 128 бит / 39 цифр точности в Redshift. Как вы на самом деле создаете полный столбец 128-битных чисел в Redshift?

Короче говоря, реальный вопрос заключается в том, каков Redshift для хранения и объединения таблиц с первичными ключами UUID?

1 Ответ

0 голосов
/ 08 ноября 2019

Соединения Redshift будут работать хорошо даже с ключом VARCHAR, поэтому я бы начал с этого.

Основным фактором производительности объединения будет совместное размещение строк на одном вычислительном узле. Чтобы добиться этого, вы должны объявить столбец UUID как ключ распределения в обеих таблицах.

В качестве альтернативы, если одна из таблиц довольно мала (<= ~ 1 миллион строк), то вы можете объявить эту таблицу как DISTSTYLE. ALL и выберите какой-нибудь другой ключ dist для таблицы большего размера. </p>

Если вы разместили соединение и хотите оптимизировать его, вы можете попробовать разделить значение UUID на 2 столбца BIGINT, один для старших 64 битов. и еще один для нижних 64. Даже половина UUID, вероятно, будет уникальной, и тогда вы можете использовать второй столбец в качестве «прерывателя связи».

cf "Advanced Red Design Design Play Playbook от Amazon Redshift Engineering: Преамбула, предпосылки и расстановка приоритетов "

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