RAND

返回DOUBLE类型的随机数,返回值区间是0~1。

命令格式

double rand(bigint <seed>)

参数说明

seed:可选。BIGINT类型。随机数种子,决定随机数序列的起始值。

说明

您可以通过seed确定随机数序列,seed确定后,即可固定该函数的返回结果。执行环境是一样的情况下,seed取值不变的话,返回值是一样的,如果需要返回不一样的结果,需要修改seed取值。

可在SQL前新增以下参数,默认值为false

set odps.sql.executionengine.enable.rand.time.seed=true|false;
  • 当参数值为false时,RAND函数使用当前InstanceId作为随机数初始化seed,可以保证函数幂等。

  • 当参数值为true时,RAND函数使用当前系统时间作为随机数初始化的seed, 但RAND函数不再幂等,不能作为Shuffle Key使用,会导致重跑的结果不相同。

返回值说明

返回DOUBLE类型。

使用示例

--返回0.7308781907032909。
select rand(1);

--当参数为false时,保持原有行为
set odps.sql.executionengine.enable.rand.time.seed=false;
select rand();
--返回
+------------+
| _c0        |
+------------+
| 4.7147460303803655E-4 |
+------------+

select rand();
--返回
+------------+
| _c0        |
+------------+
| 4.7147460303803655E-4 |
+------------+

--当参数为true时,每次返回值都不一样
set odps.sql.executionengine.enable.rand.time.seed=true;
select rand();
--返回
+------------+
| _c0        |
+------------+
| 0.4111229695431529 |
+------------+
select rand();
--返回
+------------+
| _c0        |
+------------+
| 0.8212525247695169 |
+------------+
说明

参数odps.sql.executionengine.enable.rand.time.seed=true只对不输入参数生效,如果加入了参数,默认参数值false

相关函数

RAND函数属于数学函数,更多数据计算、数据转换的相关函数请参见数学函数