来自雪花文档-
如果一个调用RANDOM的语句被执行多次,则不能保证RANDOM每次都会生成相同的值集。无论是否指定种子,这都是正确的。
如果随机种子不允许创建可复制的代码,它有什么用有没有办法解决这个问题,这样,如果我想再次使用相同的查询,我每次都会得到相同的行,即使这些行是使用种子随机排序的?例如,
SELECT ID,
ROW_NUMBER() OVER (PARTITION BY group_name ORDER BY RANDOM(123)) AS random_n
FROM my_table
WHERE random_n < 100
在并行数据库中,可重复的随机数真的很棘手,而且通常不值得付出这些努力。这在跨平台数据库上更为困难。
正如文档所示,random(seed)
的目的是为一行中的多个调用返回相同的值。这似乎是一种微观效率,因为您应该能够使用CTE或子查询生成相同的效果。
文档还建议出于某些目的使用SEQ
函数。事实上,您可以使用seq值生成自己的可重复伪随机数生成器——假设数据的基本顺序是恒定的。我的猜测是Snowflake更喜欢这种方法作为可重复的生成器。