繁体   English   中英

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

[英]Snowflake Add new column with unique random value for each record

我有一个数据集如下

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

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

将数字转换为字符串:

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

这会生成一个数字,最多可处理 999,999 行。 它可以很容易地扩展到更多的行。

也就是说,我建议您为此目的只使用数字而不是字符串。

使用数字而不是字符串。 我只会使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM