在BigQuery中按行统计NULL值数量的实现方法
在BigQuery中统计每行NULL值数量的方法
当然可以实现,以下是几种实用的解决方案:
方法一:手动指定列(适合列数少的场景)
如果你的表只有少量列(比如你提到的3列),直接用IF函数逐个判断列是否为NULL,再求和即可得到总数:
SELECT col1, col2, col3, -- 统计每行的NULL值数量 IF(col1 IS NULL, 1, 0) + IF(col2 IS NULL, 1, 0) + IF(col3 IS NULL, 1, 0) AS null_count FROM `your_project.your_dataset.your_table`;
这段代码会给每行新增一个null_count列,值为该行中col1、col2、col3里NULL值的总数。
方法二:动态生成逻辑(适合列数多的场景)
如果表的列数很多,手动编写每个列的判断会很繁琐,可以用动态SQL自动生成统计逻辑:
-- 先获取表的所有列名 DECLARE column_list ARRAY<STRING>; SET column_list = ( SELECT ARRAY_AGG(column_name) FROM `your_project.your_dataset.INFORMATION_SCHEMA.COLUMNS` WHERE table_name = 'your_table' -- 替换成你的表名 ); -- 动态执行查询,自动拼接NULL判断语句 EXECUTE IMMEDIATE FORMAT(""" SELECT *, (%s) AS null_count FROM `your_project.your_dataset.your_table` """, STRING_AGG(FORMAT("IF(%s IS NULL, 1, 0)", col), " + ") FROM UNNEST(column_list) AS col);
这段代码会自动读取表的所有列,生成对应的NULL判断表达式,无需手动逐个列编写。
将统计列永久添加到表中
如果需要把null_count列永久添加到原表,可以分两步操作:
- 新增列:
ALTER TABLE `your_project.your_dataset.your_table` ADD COLUMN null_count INT64;
- 更新列的值:
UPDATE `your_project.your_dataset.your_table` SET null_count = IF(col1 IS NULL, 1, 0) + IF(col2 IS NULL, 1, 0) + IF(col3 IS NULL, 1, 0);
或者直接创建包含统计列的新表:
CREATE TABLE `your_project.your_dataset.new_table_with_null_count` AS SELECT *, IF(col1 IS NULL, 1, 0) + IF(col2 IS NULL, 1, 0) + IF(col3 IS NULL, 1, 0) AS null_count FROM `your_project.your_dataset.your_table`;
内容的提问来源于stack exchange,提问作者DART
相关产品推荐
相关产品推荐

