我在一个表中有 3 列,即email_id
, rid
, final_id
。
rid
和的规则final_id
:
- 如果
email_id
有对应的rid
,rid
则用作final_id
。 - 如果
email_id
没有对应的rid
(即为rid
空),则生成一个唯一的 12 位数字并插入到final_id
字段中。
如何在红移中生成 12 位唯一数字?
我在一个表中有 3 列,即email_id
, rid
, final_id
。
rid
和的规则final_id
:
email_id
有对应的rid
,rid
则用作final_id
。email_id
没有对应的rid
(即为rid
空),则生成一个唯一的 12 位数字并插入到final_id
字段中。如何在红移中生成 12 位唯一数字?
默认情况下,AWS Redshift 中没有 UUID 函数。但是,使用Python 用户定义函数,您可以轻松地在 Redshift 中创建 UUID 函数。
如果你想要随机 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__()
oruuid.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 个十六进制字符。