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

BigQuery如何从结构体数组中返回仅含指定字段的新结构体数组

报错原因

你写的代码中,子查询会返回和原Skills数组长度一致的多行结构体结果,外层用[]包裹的方式只能接收单个元素构造数组,当原Skills数组长度大于1时就会触发Scalar subquery produced more than one element报错,同时你内外层表都用了dd作为别名,也会存在字段引用冲突的问题。

正确实现方案

有两种写法可以实现需求,推荐第二种更简洁:

写法1:手动指定保留字段(适合需要修改字段名的场景)

SELECT 
  -- 用ARRAY函数将子查询返回的多行结果直接拼接为数组
  ARRAY(
    SELECT STRUCT(skill.Level AS Level, skill.TypeId AS typeid)
    FROM UNNEST(dd.Skills) AS skill
  ) AS skills,
  -- 保留原表除Skills外的所有字段,保证结果和原数据结构一致
  dd.* EXCEPT(Skills)
FROM `your_project.your_dataset.tablee` AS dd

写法2:用EXCEPT语法自动剔除指定字段(仅删除字段场景下更高效)

如果不需要修改保留字段的名称,直接用* EXCEPT(字段名)就可以自动剔除不需要的字段,不需要手动列所有保留字段:

SELECT 
  ARRAY(
    SELECT skill.* EXCEPT(Id)
    FROM UNNEST(dd.Skills) AS skill
  ) AS skills,
  dd.* EXCEPT(Skills)
FROM `your_project.your_dataset.tablee` AS dd

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:57:01