是否可以列出 BigQuery 中没有数据的所有列
Is it possible to list all columns without data in BigQuery
我在工作中使用 BigQuery,并且正在进行一些数据验证。作为其中的一部分,我试图找到给定 table 中完全由 null
值组成的所有列。我知道我可以使用类似
的方式单独查询每一列
SELECT count(id), <column_name> FROM <dataset>.<table>
WHERE <column_name> IS NOT NULL
GROUP EACH BY 2 HAVING count(id) = 0
我宁愿不必对 table 中的每一列都执行此操作,因为它们的数量很多。
这可以在没有 运行 每列查询的情况下完成,如下所示。在 SELECT
中取 SUM
个非空值,并查找包含零个非空值的列。
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 只包含空值。
要添加到上述答案中,
以上答案仅适用于整数列,如果有其他类型的列,您可以执行以下操作
SELECT
SUM(如果(第 1 列为 NULL, 0, 1)),
SUM(IF(column2 为 NULL, 0, 1))
从
table
在这种情况下,无论数据类型如何,所有空值都被视为 0,其他值被视为 1。如果结果为 0,则该列包含的所有值都为空。
SELECT
column_name, COUNT(1) AS nulls_count
FROM
`projectID.Dataset.Table`,
UNNEST(REGEXP_EXTRACT_ALL(TO_JSON_STRING(`projectID.Dataset.Table`), r'"(\w+)":null')) column_name
GROUP BY
column_name
ORDER BY
nulls_count DESC
上面的bigquery给出了具有NULL值的记录数并对列进行分组。另请注意,查询不会给出非空列。
我在工作中使用 BigQuery,并且正在进行一些数据验证。作为其中的一部分,我试图找到给定 table 中完全由 null
值组成的所有列。我知道我可以使用类似
SELECT count(id), <column_name> FROM <dataset>.<table>
WHERE <column_name> IS NOT NULL
GROUP EACH BY 2 HAVING count(id) = 0
我宁愿不必对 table 中的每一列都执行此操作,因为它们的数量很多。
这可以在没有 运行 每列查询的情况下完成,如下所示。在 SELECT
中取 SUM
个非空值,并查找包含零个非空值的列。
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 只包含空值。
要添加到上述答案中,
以上答案仅适用于整数列,如果有其他类型的列,您可以执行以下操作
SELECT SUM(如果(第 1 列为 NULL, 0, 1)), SUM(IF(column2 为 NULL, 0, 1)) 从 table
在这种情况下,无论数据类型如何,所有空值都被视为 0,其他值被视为 1。如果结果为 0,则该列包含的所有值都为空。
SELECT
column_name, COUNT(1) AS nulls_count
FROM
`projectID.Dataset.Table`,
UNNEST(REGEXP_EXTRACT_ALL(TO_JSON_STRING(`projectID.Dataset.Table`), r'"(\w+)":null')) column_name
GROUP BY
column_name
ORDER BY
nulls_count DESC
上面的bigquery给出了具有NULL值的记录数并对列进行分组。另请注意,查询不会给出非空列。