3

我在一个表中有 3 列,即email_id, rid, final_id

rid和的规则final_id

  1. 如果email_id有对应的ridrid则用作final_id
  2. 如果email_id没有对应的rid(即为rid空),则生成一个唯一的 12 位数字并插入到final_id字段中。

如何在红移中生成 12 位唯一数字?

4

2 回答 2

11

在 Redshift 中创建 UUID 函数

默认情况下,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;
于 2017-10-05T06:36:21.150 回答
0

只是添加到接受的响应中:

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

于 2020-06-04T11:25:19.357 回答