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

BigQuery中获取record类型字段首个非空partnership_title及对应voucher_code

解决方案

假设funnels_informations是重复的RECORD类型(即数组结构,单个RECORD不存在"首个非空"的场景),以下是两种常用的实现方法:

方法一:通过UNNEST+ROW_NUMBER()排序取首个非空值

这种方法能严格保留数组元素的原始顺序,确保取到的是数组中最先出现的非空partnership_title及其对应voucher_code:

WITH ranked_data AS (
  SELECT
    your_primary_key, -- 替换为你的表主键字段,用于关联原表数据
    fi.partnership_title,
    fi.voucher_code,
    ROW_NUMBER() OVER (
      PARTITION BY your_primary_key 
      ORDER BY 
        CASE WHEN fi.partnership_title IS NOT NULL THEN 0 ELSE 1 END, -- 非空值优先排序
        OFFSET(fi) -- 按数组原始顺序排序
    ) AS row_rank
  FROM
    your_table_name, -- 替换为你的表名
    UNNEST(funnels_informations) AS fi WITH OFFSET
)
SELECT
  your_primary_key,
  partnership_title,
  voucher_code
FROM ranked_data
WHERE row_rank = 1
-- 若需要仅返回存在非空partnership_title的行,可添加 AND partnership_title IS NOT NULL

方法二:用数组函数直接筛选取首元素

通过ARRAY_FILTER筛选出partnership_title非空的元素,再取数组第一个元素,写法更简洁:

SELECT
  your_primary_key, -- 替换为你的表主键字段
  (SELECT partnership_title FROM UNNEST(ARRAY_FILTER(funnels_informations, x -> x.partnership_title IS NOT NULL)) LIMIT 1) AS partnership_title,
  (SELECT voucher_code FROM UNNEST(ARRAY_FILTER(funnels_informations, x -> x.partnership_title IS NOT NULL)) LIMIT 1) AS voucher_code
FROM your_table_name -- 替换为你的表名

补充说明

  • 如果funnels_informations是单个RECORD类型,直接取funnels_informations.partnership_title和funnels_informations.voucher_code即可,但这种场景无需"首个非空"的逻辑。
  • 方法二中如果数组筛选后为空,结果会返回NULL,符合你示例中voucher_code=null的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:35:17