0

我在表中有3列,即email_id,rid,final_id如何在红移中生成12位唯一编号?

规则ridfinal_id

  1. 如果email_id都有相应的rid,使用ridfinal_id
  2. 如果email_id没有相应的rid(即rid为空),则生成一个唯一的12位数字并插入final_id字段。

如何在redshift中生成12位唯一编号?

+0

有一个办法,你可以加入时间戳,RANDOM_NUMBER,ROW_NUMBER产生一个12位数字。但是,这不是一种内置的方法,更多的是一种黑客攻击。还可以使用'coalesce(rid,<12 digit int generation>)来检查规则。 – nightgaunt

回答

2

Creating a UUID function in Redshift

默认情况下没有在AWS红移没有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; 
+0

有没有其他方法?因为我收到错误,如'无效的操作:权限被拒绝模式公开;'。我不能访问公共模式。 –

+0

您也可以在自己的模式中创建函数。尝试删除“public.'位。 –

+0

重要 - 根据文档 - 您需要: 撤销PUBLIC语言PLPYTHONU的使用; 授予语言PLPYTHONU对udf_devs组的使用; 或 将语言PLPYTHONU上的用法授予用户youruserid; –