【问题标题】:BigQuery check entire table for null valuesBigQuery 检查整个表的空值
【发布时间】:2020-03-02 03:21:12
【问题描述】:

不确定此处是否需要可重现的示例。我在 BigQuery 中有一个大而宽的表(10K 行 x 100 列),我想知道 any columns 是否有空值,以及有多少空值。是否有一个我可以运行的查询将返回一个 1 行表,指示每列中空值的数量,而不需要 100 次 ifnull 调用?

谢谢!

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    以下是 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   
    

    【讨论】:

    • 我猜如果列是记录类型,它也会计算嵌套字段中的 NULL。
    • 没错!嵌套字段将被计为 NULL,而不是父项
    • 有没有办法从中获取每列的空值百分比?我似乎无法弄清楚如何
    • @GiovannaFernandes - 发布您的问题以及所有相关详细信息,我们会回答:o)
    【解决方案2】:

    这将提供空值的百分比:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 2020-02-02
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      相关资源
      最近更新 更多