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

BigQuery SQL 不同schema两表UNION时如何为表2补充空值嵌套字段

BigQuery 实现方案

要实现该需求,核心是在保留表2其余所有字段不变的前提下,修改嵌套结构体details.employment.locations下的指定字段值为NULL,具体分两种常见场景:

场景1:details.employment.locations为单个结构体(非数组)

直接通过嵌套STRUCT构造修改指定字段即可,其余字段原样保留:

SELECT
  * EXCEPT(details),
  -- 重构details结构体,保留其余层级原有字段
  STRUCT(
    (SELECT AS STRUCT details.employment.* EXCEPT(locations),
      -- 重构locations结构体,将指定字段设为NULL
      STRUCT(
        CAST(NULL AS STRING) AS city,
        CAST(NULL AS STRING) AS regionCode,
        CAST(NULL AS STRING) AS Formatted,
        -- 保留locations下除上述三个字段外的其余字段
        details.employment.locations.* EXCEPT(city, regionCode, Formatted)
      ) AS locations
    ) AS employment
    -- 若details下还有employment之外的字段,可在此处追加原样保留即可
  ) AS details
FROM `你的项目ID.你的数据集.表2`

场景2:details.employment.locations为结构体数组(存储多条location记录)

需要结合ARRAY函数遍历数组元素逐个修改:

SELECT
  * EXCEPT(details),
  STRUCT(
    (SELECT AS STRUCT details.employment.* EXCEPT(locations),
      ARRAY(
        SELECT AS STRUCT
          CAST(NULL AS STRING) AS city,
          CAST(NULL AS STRING) AS regionCode,
          CAST(NULL AS STRING) AS Formatted,
          loc.* EXCEPT(city, regionCode, Formatted)
        FROM UNNEST(details.employment.locations) AS loc
      ) AS locations
    ) AS employment
  ) AS details
FROM `你的项目ID.你的数据集.表2`

UNION操作补充说明

处理后的表2结构就和表1完全对齐了,直接在上述查询结果后加UNION ALL(需要去重则用UNION DISTINCT)拼接表1的全量查询即可。

注意:CAST(NULL AS 字段类型)要和表1中对应字段的类型完全匹配,若对应字段不是STRING类型,自行修改CAST的目标类型即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:39:03