google-bigquery - 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 或者是否有任何其他函数可以帮助我解决这个问题?所以请不要关闭我的问题,我只是在寻找我可能错过的额外信息。
解决方案
返回结果的单列的所有值应该是相同的类型。因此,我们不能在同一列中同时返回 ARRAY 类型(url 数组)和 INT 类型(数字 0)。我们可以将两者都转换为 STRING 类型。尝试array_length和to_json_string:
SELECT ASE_IDD, IF(array_length(url) > 0, to_json_string(url), "0") from temp_
推荐阅读
- flask - 使用 WTForms populate_obj 用额外的列更新多对多关联表
- ffmpeg - Writingminds ffmpeg 64 位架构支持
- sql - 可以在 BigQuery 之外进行数据透视吗?
- javascript - 如何检查Javascript中的所有数组值是否为空
- javascript - 如果复选框选中但输入为空禁用另一个复选框
- flutter - Flutter Gridview 或 StaggeredGridview 可变宽度/可变项目数以填充列
- android - 如何将数组插入 SQLite?
- ios - AFNetworking 是在没有完整位码的情况下构建的
- c# - 将一张表数据插入另一张表
- javascript - React Hooks:useState with onClick 仅更新第二次单击按钮?