Как создать 12-значный уникальный номер в красное смещение?

У меня есть 3 столбца в таблице, т.е. email_id, rid, final_id,

Правила для rid а также final_id:

  1. Если email_id имеет соответствующий ridиспользовать rid как final_id,
  2. Если email_id не имеет соответствующего rid(т.е.rid равно нулю), сгенерировать уникальный 12-значный номер и вставить в final_id поле.

Как создать 12-значный уникальный номер в красное смещение?

1 ответ

От создания функции UUID в Redshift:

По умолчанию в AWS Redshift нет функции UUID. Однако с помощью пользовательской функции Python вы можете легко создать функцию UUID в Redshift.

Если вы хотите случайный UUID:

CREATE OR REPLACE FUNCTION public.fn_uuid()
RETURNS character varying AS
' import uuid
 return uuid.uuid4().__str__()
 '
LANGUAGE plpythonu VOLATILE;

Если вы хотите последовательный UUID:

CREATE OR REPLACE FUNCTION public.fn_uuid()
RETURNS character varying AS
' import uuid
 return uuid.uuid1().__str__()
 '
LANGUAGE plpythonu VOLATILE;

Просто чтобы добавить к принятому ответу:

С помощью uuid.uuid1().__str__() или uuid.uuid4().__str__() даст вам такие значения, как XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Это полностью верно как uuid, но изящный способ избавиться от хеша - использоватьhex атрибут:

CREATE OR REPLACE FUNCTION public.fn_uuid()
RETURNS character varying AS
' import uuid
 return uuid.uuid4().hex
 '
LANGUAGE plpythonu VOLATILE;

или

CREATE OR REPLACE FUNCTION public.fn_uuid()
RETURNS character varying AS
' import uuid
 return uuid.uuid1().hex
 '
LANGUAGE plpythonu VOLATILE;

Это даст вам значения без хеша, поэтому всего 32 шестнадцатеричных символа.

У меня была такая же проблема целую вечность, но мне было неудобно использовать пользовательскую функцию для генерации UUID в Redshift.

Часто в таблицах Redshift комбинация столбцов уникальна. md5() Встроенная функция в Redshift может помочь генерировать уникальные хэши на основе этой комбинации столбцов.

Отказ от ответственности: он гарантирует уникальный идентификатор, только если комбинация столбцов гарантированно будет уникальной.

Давайте предположим, col1 а также col2 вместе уникальны для стола. затем

`select md5(col1::varchar || col2::varchar)`

может гарантировать уникальный хэш. Дополнительным преимуществом является скорость при использовании этого в JOINs.

Ссылка: https://blog.fishtownanalytics.com/the-most-underutilized-function-in-sql-9279b536ed1a

Другие вопросы по тегам