雪花为每个记录添加具有唯一随机值的新列

时间:2020-09-17 13:42:00

标签: sql snowflake-cloud-data-platform

我的数据集如下

Name      Email            date
john    john@aol.com.    2020-09-01
kevin    kevin@att.net.  2020-09-08
john.   john@aol.com.    2020-09-08

此数据集将每周更新一次,并使用新数据和数据加载日期。

我需要添加另一列Anonymous_id:这是每行的唯一值。这应该是带有len> = 6

的随机字母数字列

原因是我们在不同日期可能使用相同的电子邮件和名称。因此我们要使用Anonymous_id列作为主键。

请记住,该表每周都会加载一次数据。

Name    Email          Date          Anonymous_id
John   john@aol.com    2020-09-01.    123ax56
kevin. kevin@att.net.   2020-09-08.   245xd67
John.   john@aol.com.  2020-09-08.    456yt23

3 个答案:

答案 0 :(得分:1)

有一个函数RANDSTR(,)可以产生一个随机的6个字符串。它不能保证唯一性。使用UUID_STRING()可以更好地产生唯一值。

答案 1 :(得分:0)

将数字转换为字符串:

 select lpad(row_number() over (order by random()), 6, '0')

这将产生一个数字,并将最多处理999,999行。它可以轻松扩展为更多行。

也就是说,我建议您仅使用数字而不是字符串。

答案 2 :(得分:0)

使用数字而不是字符串。我只会用row_number()

create table new_table as

select name, email, date, row_number() over (order by name, email, date) as anonymous_id
from old_table;

此行也可以让您查看每个名称的最新电子邮件地址,因为在查询此new_table时只需在where子句中添加anonymous_id=1

相关问题