温馨提示:本文翻译自stackoverflow.com,查看原文请点击:google bigquery - Create Temp Table in Each Loop and Union After Loop Completion
google-bigquery

google bigquery - 在每个循环中创建临时表,并在循环完成后合并

发布于 2020-04-08 10:31:51

使用BigQuery的标准SQL脚本功能,我想1)为循环的每次迭代创建一个临时表,2)在循环完成后合并这些临时表。我已经尝试过以下方法:

DECLARE i INT64 DEFAULT 1;
DECLARE ttable_name STRING;

WHILE i < 10 DO
    SET ttable_name = CONCAT('temp_table_', CAST(i AS STRING));
    CREATE OR REPLACE TEMP TABLE ttable_name AS
        SELECT * FROM my_table AS mt WHERE mt.my_col = 1;
    SET i = i + 1;
END LOOP;

SELECT * FROM temp_table_*; -- wildcard table to union all results

但我收到以下错误:

超出速率限制:此表的表更新操作过多。

如何完成这项任务?

查看更多

提问者
xibalba1
被浏览
139
Felipe Hoffa 2020-02-01 07:19

不要创建新表。添加到带有的现有INSERT INTO数据库中,或将数据保存在变量中(如果不是太多数据),如下所示:

DECLARE steps INT64 DEFAULT 1;
DECLARE table_holder ARRAY<STRUCT<steps INT64, x INT64, y ARRAY<INT64>>>;

LOOP 
  SET table_holder = (
    SELECT ARRAY_AGG(
      STRUCT(steps, 1 AS x, [1,2,3] AS y))
    FROM (SELECT '')
  );
  SET steps = steps+1;
  IF steps=30 THEN LEAVE; END IF;
END LOOP;

CREATE TABLE temp.results
AS
SELECT *
FROM UNNEST(table_holder)

相关:https : //stackoverflow.com/a/59314390/132438