2017-12-01 3 views
3

とRAND())で使用してバグ:グーグルのBigQuery - WITH以内に私はRANDを(使用興味深い振る舞いに出くわしました

WITH 
    t0 AS (SELECT rand() AS c) 

SELECT c FROM t0 
    UNION ALL 
SELECT c FROM t0 
:私はこれを行うとき、同じことでも起こる

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  
-- 

これはどうして起こるのか?削除された答えにコメントとしてエリオットブロサールから、この返信表面化

答えて

1

RAND()は、WITH句で使用されたときに一度だけ実行するようになっています。 WITH 句はマクロと似ています。クエリは プランにインライン展開されています。これは、異なるタスクで実行すると 異なるシードを使用してRAND()が評価されるという既知のバグですが、修正はいくぶん 複雑です。

+1

Thx!私たちは、今のところ、テーブルをWITH句の外に置くことで解決しました(実際のテーブルにします)。 –

関連する問題