繁体   English   中英

BigQuery - 从 JSON 集合中提取第一个非空值

[英]BigQuery - Extract first non-null value from JSON collection

这是我的收藏的外观:

我想要的是从中获取第一个非空值,例如json-coalesce(my_collection,"$")在第一种情况下返回5并在第二种情况下返回true

在不单独处理每个键的情况下执行此操作的最佳方法是什么?

考虑以下方法

create temp function values(input string) returns array<string> language js as """
  return Object.values(JSON.parse(input));
""";
select my_collection,
  ( select val
    from unnest(values(my_collection)) val with offset
    where not val is null
    order by offset
    limit 1
  ) as first_not_null_value
from your_table          

如果应用于您问题中的示例数据 - output 是

在此处输入图像描述

不是一般的解决方案,而是使用正则表达式,

SELECT TRIM(REGEXP_EXTRACT(json, r'(?U):\s*([^(null)].*)\s*[,}]'), '"') non_null 
  FROM sample;

假设:一个值是一个原始类型,即integer,字符串。

output 将是:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM