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

BigQuery中更新RECORD REPEATED类型字段报错求助

问题分析与解决方案

问题原因

你遇到的错误看似类型一致,实际是新生成的ARRAY<STRUCT>结构和目标表eventInfo字段的原生结构不匹配——BigQuery对STRUCT类型校验严格,要求字段的顺序、名称、类型完全一致,哪怕字段列表看起来一样,只要顺序不对或者遗漏了原STRUCT中的字段,就会触发类型不匹配错误。另外你的原查询会过滤掉所有不满足WHERE条件的eventInfo元素,导致更新后数组丢失未匹配的记录。

修正后的查询

UPDATE `business-intelligence-251208.WIS_DWH.testUpdate`
SET eventInfo = ARRAY(
  SELECT AS STRUCT e.* REPLACE(
    COALESCE(n.newOperator, e.operator) AS operator
  )
  FROM UNNEST(eventInfo) AS e
  LEFT JOIN `business-intelligence-251208.WIS_DWH.OPERATOR_MAPPING_TPP` AS n
    ON e.eventAction = LOWER(n.pretty_link)
    AND e.operator = 'Operator Not Mapped'
)
WHERE TRUE;

关键修改点

  • 保留原STRUCT完整结构:用e.* REPLACE(...)代替手动列举所有字段,确保新STRUCT的字段顺序、名称、类型和原表完全一致,避免类型不匹配。
  • 保留未匹配元素:使用LEFT JOIN替代原查询的交叉JOIN,原数组中不满足匹配条件的元素会被保留,不会丢失。
  • 安全替换字段:用COALESCE(n.newOperator, e.operator)确保只有匹配到映射关系且原operator为'Operator Not Mapped'的元素才会更新operator值,其他情况保留原字段值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:23:21