如何在不重复整数的情况下随机创建 ID 列?

Posted

技术标签:

【中文标题】如何在不重复整数的情况下随机创建 ID 列?【英文标题】:How can I create an ID column randomly, without repeating integers? 【发布时间】:2019-03-14 12:42:45 【问题描述】:

假设我有一个名为sourcetable 的表,其中包含colAcolBcolC。我只是想创建一个具有非重复、唯一和随机整数的 id 列。如何在 netezza SQL 或使用 proc SQL (SAS) 中创建它?

【问题讨论】:

【参考方案1】:

为确保唯一性,您肯定会将id 限制为主键或唯一键。

SAS 函数UUIDGENRANUNI 是在计算时生成唯一性概率非常高的值的候选对象。我认为没有任何简单/独立的函数可以保证 100% 它不会计算先前返回的值。

UUIDGEN 返回一个 36 字节的字符值,例如 170bf2ef-16c7-4b7f-b25b-000333d9679b

RANUNI 按 1E15 缩放将返回一个最多 14 位的整数值。

data want;
  do i = 1 to 100;
    id_v1 = uuidgen();
    id_v2 = floor(1e15 * ranuni(0));
    output;
  end;
  format id_v2 15.;
run;

对于 Netezza,请查看 SO How to overcome Netezza's lack of unique constraint/referential integrity enforcement? "

【讨论】:

如何使用 proc sql 做到这一点?我的数据集超过20亿条记录,需要用sql写这段代码 是否有特定原因不能使用从序列返回的序列号?如果您有 Netezza 方面的 2B 记录,这听起来更像是 Netezza 专家的问题。不确定如何在假定的 DW 中获得如此大的表,而设计中没有唯一的行标识符

以上是关于如何在不重复整数的情况下随机创建 ID 列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用临时表或视图的情况下在多个列上使用 PIVOT [重复]

如何在不重复单词并遍历整个数组的情况下从数组中随机播放文本? (迅速)

如何在不使用 sqrt 的情况下检查整数是不是是完美的正方形 [重复]

如何在不重复预定义三元组中的特定元素的情况下随机化向量?

如何在不转换列的情况下更改 MySQL 中的表(默认)排序规则[重复]

如何在不重复员工 ID 的情况下计算表中的姓氏