json BigQuery:使用REGEX计算所有列的非空值

qhhrdooz  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(154)

下面的查询可以帮助我计算BQ中一个表的所有列中每列报告了多少个空值:

SELECT col_name, COUNT(1) nulls_count
FROM table t,
UNNEST(REGEXP_EXTRACT_ALL(TO_JSON_STRING(t), r'"(\w+)":null')) col_name
GROUP BY col_name 
;

我需要调整它,使它计数非空值。我尝试使用负前瞻,但它似乎不工作。我的最终目标是指示某个列是否报告至少1个非空值。
输入示例(表格):

输出示例:

column_c不存在,因为它的所有值都是空。

l0oc07j2

l0oc07j21#

您可以尝试此(不带REGEX)解决方案

select * from (
  select column, countif(value != 'null') non_null
from `dataset.table` t,
unnest(array( 
  select as struct trim(arr[offset(0)], '"') column, trim(arr[offset(1)], '"') value
  from unnest(split(trim(to_json_string(t), '{}'))) kv,
  unnest([struct(split(kv, ':') as arr)])
  where trim(arr[offset(0)], '"') != 'user'
)) rec
group by column 
) where non_null!=0

输出:

相关问题