我在表格中有3列,即rid
,final_id
,rid
。
final_id
和email_id
的规则:
rid
有相应的rid
,请使用final_id
作为email_id
。rid
没有相应的rid
(即final_id
为空),请生成唯一的12位数字并插入{{1}}字段。如何在redshift中生成12位唯一编号?
答案 0 :(得分:6)
来自Creating a UUID function in Redshift:
默认情况下,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;
答案 1 :(得分:0)
我曾经有过同样的问题,但是我也不习惯使用自定义函数在Redshift中生成UUID。
在Redshift表中,列的组合通常是唯一的。 Redshift中的md5()
内置函数可以帮助根据这些列组合生成唯一的哈希。
免责声明:仅当列的组合被保证是唯一的时,它才保证唯一的ID。
让我们假设col1
和col2
对于一个表来说是唯一的。然后
`select md5(col1::varchar || col2::varchar)`
可以保证唯一的哈希。在JOIN
s中使用此功能的另一个好处是速度。
参考:https://blog.fishtownanalytics.com/the-most-underutilized-function-in-sql-9279b536ed1a
答案 2 :(得分:0)
只需添加到接受的响应中即可:
使用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个十六进制字符。