如何在BigQuery存储过程中正确声明变量存储指定表数据?
解决BigQuery存储过程中变量存储重复结构体表数据的问题
你的核心问题是变量类型与表结构不匹配,且未考虑多行数据的存储场景,以下是正确的声明与赋值方式:
问题分析
- 表中
resp是REPEATED RECORD,对应BigQuery中的ARRAY<STRUCT<>>类型,但你当前变量里的resp是单个STRUCT,类型不匹配。 - 如果表包含多行数据,单个STRUCT变量无法存储全部行,需要用结构体数组来承载。
正确的变量声明与赋值
场景1:表中只有1行数据
若确定表仅存在1行数据,可声明单个STRUCT变量,注意将resp定义为数组类型:
DECLARE catalogTip STRUCT< type STRING, resp ARRAY<STRUCT< desc STRING, age INT64 >> >; -- 加LIMIT 1确保只返回单行,避免赋值报错 SET catalogTip = (SELECT * FROM CATALOG LIMIT 1);
场景2:表中包含多行数据
要存储全部行数据,需将变量声明为结构体数组,并用ARRAY_AGG聚合表中所有行:
DECLARE catalogTips ARRAY<STRUCT< type STRING, resp ARRAY<STRUCT< desc STRING, age INT64 >> >>; -- 用ARRAY_AGG将表中所有行打包为数组 SET catalogTips = (SELECT ARRAY_AGG(t) FROM CATALOG t);
内容的提问来源于stack exchange,提问作者element
相关产品推荐
相关产品推荐

