- 类别:
RANDOM¶
每次调用都会返回一个伪随机 64 位整数。
语法¶
RANDOM([seed])
实参¶
可选:
seed
种子是整数。不同的种子导致 RANDOM 生成不同的输出值。
如果未提供种子,则以特定于平台的方式选择随机数种子。
使用说明¶
如果 SQL 语句对每行使用相同的种子调用 RANDOM,则 RANDOM 会对每行返回不同的值,即使种子相同也是如此。
如果 SQL 语句对 同一行 使用 相同种子 多次调用 RANDOM,则每次调用 RANDOM 会 对该行 返回相同的值。例如,以下调用为每行返回两次相同的值:
select random(42), random(42) from table1
。请参阅 以下示例。
如果多次执行调用 RANDOM 的语句,则 不能保证 RANDOM 每次都会生成相同的值集。无论是否指定种子,都是如此。
即使用相同的数据调用相同的语句,RANDOM 也可能生成不同的值。例如,这可能发生在以下情况下:
工作线程数不同。
行的处理顺序不同。
随机值不一定是唯一值。尽管对于少量调用而言,重复的情况很少,但随着调用数量的增加,重复的几率也会增加。如果需要唯一值,请考虑使用序列 (SEQ1 / SEQ2 / SEQ4 / SEQ8),而不是调用 RANDOM。选择一个具有足够位数且不太可能被回绕的序列。
由于输出是有限整数,并且值是由算法生成的,而不是真正随机生成的,因此该函数最终会“回绕”并开始重复值序列。但是,“周期”(回绕前的调用次数)非常大:2^19937 - 1。
输出只是伪随机的;在给定足够信息(包括算法和种子)的情况下可以预测输出。
RANDOM 实施了称为 MT19937-64 的 64 位 梅森旋转 (link removed) 算法。
生成伪随机数的计算成本有些高;大量调用此函数可能消耗大量资源。
示例¶
以下示例演示了如何使用 RANDOM 函数。以下输出中显示的值可能与您自行运行这些示例时返回的值不同。
以下示例不使用种子调用 RANDOM。每行的输出都不同。
SELECT random() FROM table(generator(rowCount => 3)); +----------------------+ | RANDOM() | |----------------------| | -962378740685764490 | | 2115408279841266588 | | -3473099493125344079 | +----------------------+
以下示例对每行使用相同种子调用 RANDOM。尽管种子是常量,但每行的输出仍然不同。
SELECT random(4711) FROM table(generator(rowCount => 3)); +----------------------+ | RANDOM(4711) | |----------------------| | -3581185414942383166 | | 1570543588041465562 | | -6684111782596764647 | +----------------------+
以下示例在单个语句中多次调用 RANDOM,并且不使用种子。RANDOM 在每行内返回不同的值,以及对不同的行返回不同的值:
SELECT random(), random() FROM table(generator(rowCount => 3)); +----------------------+----------------------+ | RANDOM() | RANDOM() | |----------------------+----------------------| | 3150854865719208303 | -5331309978450480587 | | -8117961043441270292 | 738998101727879972 | | 6683692108700370630 | 7526520486590420231 | +----------------------+----------------------+
以下示例在单个语句中多次调用 RANDOM,并且每次调用都使用相同的种子。RANDOM 在每行 内 返回相同的值,但对不同的行返回不同的值:
SELECT random(4711), random(4711) FROM table(generator(rowCount => 3)); +----------------------+----------------------+ | RANDOM(4711) | RANDOM(4711) | |----------------------+----------------------| | -3581185414942383166 | -3581185414942383166 | | 1570543588041465562 | 1570543588041465562 | | -6684111782596764647 | -6684111782596764647 | +----------------------+----------------------+