Rup*_*ssl 5 sql google-bigquery google-cloud-platform
当我在WITH中使用RAND()时,我遇到了一个有趣的行为:
WITH
t0 AS ( SELECT rand() AS c ),
t1 AS ( SELECT c FROM t0 ),
t2 AS ( SELECT c FROM t0 )
SELECT c FROM t1
UNION ALL
SELECT c FROM t2
--
-- returns:
-- 1 0.229810680294245
-- 2 0.5750437237982657
-- instead of:
-- 1 0.229810680294245
-- 2 0.229810680294245
--
Run Code Online (Sandbox Code Playgroud)
当我这样做时,甚至会发生相同的事情:
WITH
t0 AS ( SELECT rand() AS c )
SELECT c FROM t0
UNION ALL
SELECT c FROM t0
Run Code Online (Sandbox Code Playgroud)
有什么线索为什么会发生?
将 Elliott Brossard 的回复作为对已删除答案的评论显示:
RAND()
在WITH子句中使用时应该只运行一次。WITH 子句与宏类似——它们内联到查询计划中——这是一个已知的错误,因为在不同的任务上运行时,RAND() 将使用不同的种子进行评估,但修复有点复杂。
归档时间: |
|
查看次数: |
122 次 |
最近记录: |