BigQuery中如何删除指定字段含空单元格的数据行
BigQuery 删除指定字段存在空值的数据行方案
原语句失效原因
所有符合ANSI SQL标准的查询引擎(包括BigQuery)中,不能使用= NULL判断字段是否为空值。NULL代表未知值,任意值与NULL做等值比较的返回结果均为UNKNOWN,永远不会被WHERE条件判定为真,因此你写的DELETE语句不会匹配到任何行,自然不会产生预期的删除效果。
正确写法
基础场景(仅删除字段值为NULL的行)
空值判断必须使用IS NULL运算符,改写后的语句如下:
DELETE FROM `my.table` WHERE TC IS NULL OR HDL IS NULL OR TG IS NULL OR LDL IS NULL
如果觉得多字段重复写IS NULL过于繁琐,可以用COALESCE函数简化逻辑:该函数会返回传入参数列表中第一个非NULL的值,只要四个字段中任意一个为NULL,函数返回结果就为NULL,即可命中删除条件:
DELETE FROM `my.table` WHERE COALESCE(TC, HDL, TG, LDL) IS NULL
兼容空字符串场景
如果你提到的"空单元格"除了NULL之外,还包含导入数据时生成的空字符串('',常见于字符串类型字段),需要把空字符串的判断也加入条件,避免漏删:
DELETE FROM `my.table` WHERE TC IS NULL OR TC = '' OR HDL IS NULL OR HDL = '' OR TG IS NULL OR TG = '' OR LDL IS NULL OR LDL = ''
注意:执行DELETE操作前建议先用SELECT替换DELETE,预览将要删除的行数据,确认匹配范围符合预期后再执行删除,避免误删数据。比如可以先运行
SELECT COUNT(*) FROMmy.tableWHERE [你的筛选条件]确认待删除行数。
内容的提问来源于stack exchange,提问作者Abo7aneen
相关产品推荐
相关产品推荐

