Как создать 12-значный уникальный номер в красное смещение?
У меня есть 3 столбца в таблице, т.е. email_id
, rid
, final_id
,
Правила для rid
а также final_id
:
- Если
email_id
имеет соответствующийrid
использоватьrid
какfinal_id
, - Если
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)`
может гарантировать уникальный хэш. Дополнительным преимуществом является скорость при использовании этого в JOIN
s.
Ссылка: https://blog.fishtownanalytics.com/the-most-underutilized-function-in-sql-9279b536ed1a