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

BigQuery STRING数组字段非空返回本身、为空返回0实现报错问题

报错根因

BigQuery的IF函数要求两个返回分支的数据类型必须完全一致,你当前代码的IF分支1返回ARRAY<STRING>类型的url数组,分支2返回INT64类型的数值0,类型不匹配触发该报错。
另外注意:REGEXP_EXTRACT_ALL无匹配结果时返回的是空数组[]而非NULL,你原来写的url is not NULL判断无法覆盖空数组的场景,不符合你「数组非空才返回本身」的需求。

解决方案

根据你最终需要的返回值类型,可选择以下两种方案:

方案1:统一返回ARRAY类型(推荐,保留数组结构)

空/无匹配时返回包含字符串'0'的数组,和原url数组类型一致,修改后的完整SQL如下:

WITH temp_ as(
SELECT
    ASE_IDD,
    REGEXP_EXTRACT_ALL(
      DESCRIPTION,
      r"regex_placeholder") as url
  FROM
    `table`)
   
SELECT 
  ASE_IDD, 
  IF(ARRAY_LENGTH(url) > 0, url, ['0']) AS url 
FROM temp_

方案2:统一返回STRING类型

如果需要输出扁平的字符串而非数组,可以把非空数组转为JSON字符串,空匹配时返回字符串'0':

WITH temp_ as(
SELECT
    ASE_IDD,
    REGEXP_EXTRACT_ALL(
      DESCRIPTION,
      r"regex_placeholder") as url
  FROM
    `table`)
   
SELECT 
  ASE_IDD, 
  IF(ARRAY_LENGTH(url) > 0, TO_JSON_STRING(url), '0') AS url 
FROM temp_

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 00:54:02