是否可以在BigQuery中列出没有数据的所有列

时间:2015-05-28 14:47:49

标签: google-bigquery

我正在使用BigQuery,我正在做一些数据验证。作为其中的一部分,我试图找到给定表中完全由null值组成的所有列。我知道我可以使用类似

的方式单独查询每一列
SELECT count(id), <column_name> FROM <dataset>.<table>
WHERE <column_name> IS NOT NULL
GROUP EACH BY 2 HAVING count(id) = 0

我宁愿不必为表中的每一列都这样做,因为它们有很多。

2 个答案:

答案 0 :(得分:3)

这可以在不使用以下内容运行每列查询的情况下完成。获取SUM中的SELECT个非空值,并查找包含零非空值的列。

SELECT
  SUM(column_1 IS NOT NULL),
  SUM(column_2 IS NOT NULL),
  SUM(column_3 IS NOT NULL)
FROM
  (SELECT NULL AS column_1, NULL AS column_2, 17 AS column_3),
  (SELECT 18 AS column_1, NULL AS column_2, 19 AS column_3)

在这种情况下,结果是:

| column_1 | column_2 | column_3 |
|----------|----------|----------|
|        1 |        0 |        2 |

告诉我们column_2只包含空值。

答案 1 :(得分:0)

要添加到上述答案中,

以上答案仅适用于整数列,如果存在其他类型的列,则可以执行以下操作

选择   SUM(IF(column1 IS NULL,0,1)),   SUM(IF(column2 IS NULL,0,1)) 从   桌子

在这种情况下,无论数据类型如何,所有空值都被视为0,其他值都被视为1。如果结果为0,则该列包含的所有值都为空。