You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BigQuery中正确使用FOR...IN DO循环执行查询?

解决BigQuery中FOR循环传递表名到FORMAT的类型错误问题

报错的核心原因是:UNNEST(tables)后用SELECT *返回的是STRUCT<f0_ STRING>类型,而FORMAT函数的第二个参数要求是STRING类型,因类型不匹配导致报错。

有两种简单的修正方式:

方法1:直接取UNNEST后的字符串元素

修改FOR循环里的查询,直接提取UNNEST出的字符串,而非用SELECT *:

DECLARE
  tables ARRAY<STRING>;
SET
  tables = ['table1',
  'table2',
  'table3']; 
FOR loop_variable_name IN (
  SELECT t 
  FROM UNNEST(tables) AS t
) DO 
EXECUTE IMMEDIATE 
  FORMAT("""SELECT * FROM dataset.%s WHERE DATE(_PARTITIONTIME) = '2023-06-22' LIMIT 10""", loop_variable_name);
END FOR;

方法2:提取STRUCT中的字符串字段

如果保留SELECT *的写法,需要在FORMAT里明确访问STRUCT的f0_字段来获取字符串:

DECLARE
  tables ARRAY<STRING>;
SET
  tables = ['table1',
  'table2',
  'table3']; 
FOR loop_variable_name IN (
  SELECT * 
  FROM UNNEST(tables)
) DO 
EXECUTE IMMEDIATE 
  FORMAT("""SELECT * FROM dataset.%s WHERE DATE(_PARTITIONTIME) = '2023-06-22' LIMIT 10""", loop_variable_name.f0_);
END FOR;

两种方法都能解决类型不匹配的问题,推荐第一种,逻辑更清晰,避免依赖自动生成的字段名(比如f0_)。

内容的提问来源于stack exchange,提问作者Luiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:38:18