我的数据集如下
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
答案 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