【发布时间】:2020-03-02 03:21:12
【问题描述】:
不确定此处是否需要可重现的示例。我在 BigQuery 中有一个大而宽的表(10K 行 x 100 列),我想知道 any columns 是否有空值,以及有多少空值。是否有一个我可以运行的查询将返回一个 1 行表,指示每列中空值的数量,而不需要 100 次 ifnull 调用?
谢谢!
【问题讨论】:
标签: google-bigquery
不确定此处是否需要可重现的示例。我在 BigQuery 中有一个大而宽的表(10K 行 x 100 列),我想知道 any columns 是否有空值,以及有多少空值。是否有一个我可以运行的查询将返回一个 1 行表,指示每列中空值的数量,而不需要 100 次 ifnull 调用?
谢谢!
【问题讨论】:
标签: google-bigquery
以下是 BigQuery 标准 SQL
#standardSQL
SELECT col_name, COUNT(1) nulls_count
FROM `project.dataset.table` t,
UNNEST(REGEXP_EXTRACT_ALL(TO_JSON_STRING(t), r'"(\w+)":null')) col_name
GROUP BY col_name
而不是只返回一行 - 它返回那些包含 NULL 的列 - 每列并在单独的行中计数 - 如下例所示
Row col_name nulls_count
1 col_a 21
2 col_d 12
【讨论】:
这将提供空值的百分比:
SELECT col_name,
COUNT(1) AS nulls_count,
round(100*(count(1)/
(SELECT count(*)
FROM `project.dataset.table`)), 2) AS percent_nulls
FROM `project.dataset.table` t,
UNNEST(REGEXP_EXTRACT_ALL(TO_JSON_STRING(t), r'"(\w+)":null')) col_name
GROUP BY col_name
ORDER BY nulls_count DESC
【讨论】: