返回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函数属于数学函数,更多数据计算、数据转换的相关函数请参见数学函数。