我正在使用BigQuery,我正在做一些数据验证。作为其中的一部分,我试图找到给定表中完全由null
值组成的所有列。我知道我可以使用类似
SELECT count(id), <column_name> FROM <dataset>.<table>
WHERE <column_name> IS NOT NULL
GROUP EACH BY 2 HAVING count(id) = 0
我宁愿不必为表中的每一列都这样做,因为它们有很多。
答案 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,则该列包含的所有值都为空。