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

时间:2017-10-05 06:06:35

标签: amazon-web-services amazon-redshift amazon-redshift-spectrum

我在表格中有3列,即ridfinal_idrid

final_idemail_id的规则:

  1. 如果rid有相应的rid,请使用final_id作为email_id
  2. 如果rid没有相应的rid(即final_id为空),请生成唯一的12位数字并插入{{1}}字段。
  3. 如何在redshift中生成12位唯一编号?

3 个答案:

答案 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。

让我们假设col1col2对于一个表来说是唯一的。然后

`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个十六进制字符。