使用RANDOM([seed])在雪花中获得相同的结果



来自雪花文档-

如果一个调用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更喜欢这种方法作为可重复的生成器。

相关内容

  • 没有找到相关文章