Google BigQuery存储过程中结构体数组定义报错求助
问题原因与解决方案
错误根源
BigQuery存储过程的变量类型不支持匿名结构体数组(即ARRAY<STRUCT<STRING,STRING,STRING>>这种未给字段命名的定义)。虽然BigQuery查询中允许临时使用匿名结构体,但存储过程变量必须明确指定结构体的每个字段名称,确保类型与查询返回结果完全匹配。
修正后的代码
将变量声明中的匿名结构体改为带字段名的定义,与查询返回的结构体字段一一对应:
DECLARE my_array ARRAY<STRUCT<id STRING, type STRING, name STRING>> DEFAULT NULL; SET my_array = ARRAY( SELECT AS STRUCT id, type, name FROM `mytable` where company=0 );
额外优化
SET语句中外层的SELECT可以省略,直接使用ARRAY()构造器即可完成数组赋值,简化代码逻辑。
完整存储过程示例
CREATE OR REPLACE PROCEDURE `your-project.your-dataset.test-procedure`() BEGIN DECLARE my_array ARRAY<STRUCT<id STRING, type STRING, name STRING>> DEFAULT NULL; SET my_array = ARRAY( SELECT AS STRUCT id, type, name FROM `mytable` WHERE company=0 ); -- 验证结果(可选) SELECT * FROM UNNEST(my_array); END;
内容的提问来源于stack exchange,提问作者user2255299
相关产品推荐
相关产品推荐

