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

BigQuery:将含空/Null结构体的数组压缩为单条Null记录

解决BigQuery合并列生成数组时的空结构体问题

你可以通过先筛选有效结构体、再处理全空场景的方式解决这个问题,避免生成多个冗余的空结构体记录。以下是修正后的查询语句:

SELECT 
  IF(ARRAY_LENGTH(valid_labels) = 0, [STRUCT(NULL AS key, NULL AS value)], valid_labels) AS labels
FROM (
  SELECT 
    ARRAY_CONCAT(
      -- 仅当colA有效时生成对应结构体数组,否则为空数组
      IF(colA IS NOT NULL AND TRIM(colA) != "", [STRUCT("center" AS key, colA AS value)], []),
      -- 仅当colB有效时生成对应结构体数组,否则为空数组
      IF(colB IS NOT NULL AND TRIM(colB) != "", [STRUCT("owner" AS key, colB AS value)], [])
    ) AS valid_labels
  FROM `project.dataset.bill`
);

逻辑说明

  1. 筛选有效结构体:对colA和colB分别判断,仅当值非空且非空白字符串时,生成包含对应STRUCT的数组;否则生成空数组。
  2. 合并有效数组:用ARRAY_CONCAT合并两个数组,此时数组中仅包含有效的结构体记录,不会有冗余的空结构体。
  3. 处理全空场景:如果合并后的数组长度为0(即两列都无效),则替换为包含单个(NULL, NULL)结构体的数组;否则直接使用合并后的有效数组。

这样就能实现你需要的效果:有效列保留对应结构体,两列都为空时仅保留一条空结构体记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:27:43