Loops 标准SQL-无法在主循环上循环

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;

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