Loops 标准SQL-无法在主循环上循环
在bigquery中使用嵌套循环或WHILE循环时,似乎无法再次迭代外部循环。使用下面的代码可以重现该问题Loops 标准SQL-无法在主循环上循环,loops,while-loop,google-bigquery,Loops,While Loop,Google Bigquery,在bigquery中使用嵌套循环或WHILE循环时,似乎无法再次迭代外部循环。使用下面的代码可以重现该问题 DECLARE i int64 DEFAULT 0; DECLARE j int64 DEFAULT 0; DECLARE k int64 DEFAULT 0; WHILE i < 3 DO SET i = i + 1; WHILE j < 2 DO SET j = j + 1; IF j = 2 THEN SET k = k+7;
DECLARE i int64 DEFAULT 0;
DECLARE j int64 DEFAULT 0;
DECLARE k int64 DEFAULT 0;
WHILE i < 3 DO
SET i = i + 1;
WHILE j < 2 DO
SET j = j + 1;
IF j = 2 THEN
SET k = k+7;
END IF;
EXECUTE IMMEDIATE """
WITH test AS(SELECT @i2 AS i, @j2 AS j, @k2 AS k)
SELECT * FROM test
"""
USING i AS i2, j AS j2, k AS k2;
END WHILE;
END WHILE;
作为这一结果的输出,Bigquery返回了两次内部循环迭代:
一行
我
J
K
1.
1.
1.
0
我希望,当我们结束内部while循环时,我们会转到外部while循环并重新开始
实际上,它的性能完全符合您的预期-要检查这一点-请在下面加上一行,以便您看到证据
DECLARE i int64 DEFAULT 0;
DECLARE j int64 DEFAULT 0;
DECLARE k int64 DEFAULT 0;
WHILE i < 3 DO
SET i = i + 1;
SELECT i; # insert this line to check correctness
WHILE j < 2 DO
SET j = j + 1;
IF j = 2 THEN
SET k = k+7;
END IF;
EXECUTE IMMEDIATE """
WITH test AS(SELECT @i2 AS i, @j2 AS j, @k2 AS k)
SELECT * FROM test
"""
USING i AS i2, j AS j2, k AS k2;
END WHILE;
END WHILE;
DECLARE i int64 DEFAULT 0;
DECLARE j int64 DEFAULT 0;
DECLARE k int64 DEFAULT 0;
WHILE i < 3 DO
SET i = i + 1;
SET j = 0; # reset j
WHILE j < 2 DO
SET j = j + 1;
IF j = 2 THEN
SET k = k+7;
END IF;
EXECUTE IMMEDIATE """
WITH test AS(SELECT @i2 AS i, @j2 AS j, @k2 AS k)
SELECT * FROM test
"""
USING i AS i2, j AS j2, k AS k2;
END WHILE;
END WHILE;