如何在BigQuery中修改Array of Structs的指定属性值?
在BigQuery中修改数组结构体的指定属性值
原代码的错误在于试图通过FOR循环直接修改数组属性,BigQuery中的数组属于不可变类型,无法直接在循环中修改数组内的结构体元素,需要通过重新构造数组的方式实现需求。
以下是正确的实现代码:
DECLARE catalog ARRAY< STRUCT< tableName STRING, type STRING, age STRING > >; SET catalog = [ ('TABLE_ONE', '', '5'), ('TABLE_TWO', '', '6'), ('TABLE_THREE', '', '1') ]; -- 重新构造数组,修改每个结构体的type字段 SET catalog = ARRAY( SELECT AS STRUCT tableName, CONCAT('TEST_', age) AS type, age FROM UNNEST(catalog) ); -- 验证修改后的结果 SELECT catalog;
代码逻辑说明
- 使用
UNNEST(catalog)将数组展开为行数据,每行对应一个结构体元素; - 通过
SELECT AS STRUCT重新构造每个结构体:保留原有的tableName和age字段,将type字段替换为TEST_与age拼接的结果; - 用
ARRAY()将处理后的行重新聚合为数组,赋值回原变量catalog。
内容的提问来源于stack exchange,提问作者element
相关产品推荐
相关产品推荐

