如何正确使用ARRAY<STRUCT>变量存储BigQuery查询结果集
问题原因
- 多余的括号包裹:你给
ARRAY()返回的结果额外套了一层括号,虽然多数场景下不会触发语法报错,但如果BigQuery运行环境开启了严格类型校验,可能会出现隐式类型识别异常,导致变量赋值不符合预期。 - 脚本执行模式未开启:使用
DECLARE声明变量的语句必须在BigQuery的脚本模式下运行,如果你是分段单独执行赋值、查询语句,变量的作用域仅在当前执行块生效,后续UNNEST查询会因为识别不到变量返回空结果。
修正后可直接运行的代码
DECLARE rs ARRAY<STRUCT<created_date TIMESTAMP, unique_key STRING, complaint_description STRING>>; -- 去掉外层多余的括号,直接赋值ARRAY函数返回的结果 SET rs = ARRAY( SELECT AS STRUCT created_date, unique_key, complaint_description FROM `bigquery-public-data.austin_311.311_service_requests` LIMIT 10 ); SELECT * FROM UNNEST(rs);
校验方法
你可以在赋值后加一句调试语句,确认变量是否正常赋值:
-- 输出数组长度,正常返回10说明赋值成功 SELECT ARRAY_LENGTH(rs);
如果返回值为0,说明你查询的公共同步数据集存在权限问题或者区域同步延迟,可以换成自己项目下的测试表验证逻辑。
内容的提问来源于stack exchange,提问作者Njord Tyln
相关产品推荐
相关产品推荐

