首页 > 解决方案 > Big Query SQL 检查数组是否为空,否则返回 0

问题描述

在大查询中,我试图仅在数组不为空时才显示数组,否则我们返回 0。字段“url”是一个字符串类型的数组,但是我很难实现逻辑。旁注我将无法使用 where 过滤器来过滤数据,而是保留原始数据并仅对字段执行检查,并且占位符为 0 是否为空。

WITH temp_ as(
SELECT
    ASE_IDD,
    REGEXP_EXTRACT_ALL(
      DESCRIPTION,
      r"regex_placeholder") as url
     
  FROM
    table)
   
  SELECT ASE_IDD, IF ( (url is not NULL), url, 0) from temp_

不是的,即使它应该得到任何帮助,它也不起作用:)

here is my error:

1::SQL_ANALYSIS_ERROR: No matching signature for function IF for argument types: BO

我知道错误意味着什么,但我不知道我能做些什么来解决它。我知道我的 url 是一个数组,但是是否有任何其他比较方式不会使用 if 或 nullif 或者是否有任何其他函数可以帮助我解决这个问题?所以请不要关闭我的问题,我只是在寻找我可能错过的额外信息。

标签: google-bigquery

解决方案


返回结果的单列的所有值应该是相同的类型。因此,我们不能在同一列中同时返回 ARRAY 类型(url 数组)和 INT 类型(数字 0)。我们可以将两者都转换为 STRING 类型。尝试array_lengthto_json_string

SELECT ASE_IDD, IF(array_length(url) > 0, to_json_string(url), "0") from temp_

推荐阅读