BigQuery中ALTER TABLE并UPDATE后用IFNULL设置空值为"LIV"的方法
BigQuery 解决方案:批量更新列值
直接给你两种可行方案,根据你的操作阶段选择:
方案一:一次性完成所有更新(推荐)
如果还没执行第一次UPDATE,直接用CASE WHEN语句一步到位,不用分两次操作,更高效:
-- 若还没添加列,先执行这句 ALTER TABLE `你的项目ID.你的数据集ID.TEST1` ADD COLUMN UBIC2 STRING; -- 一次性完成两种规则的更新 UPDATE `你的项目ID.你的数据集ID.TEST1` SET UBIC2 = CASE WHEN ZONA IN ('X1', 'X2') THEN UBIC ELSE 'LIV' END;
这个语句会直接根据ZONA的值给UBIC2赋值:符合X1/X2的行用UBIC的值,其余所有行直接设为"LIV",无需后续处理NULL。
方案二:补全已部分更新后的NULL值
如果你已经执行了第一次UPDATE(仅将X1/X2行的UBIC2设为UBIC),现在要把剩下的NULL行设为"LIV",直接执行:
UPDATE `你的项目ID.你的数据集ID.TEST1` SET UBIC2 = 'LIV' WHERE UBIC2 IS NULL;
或者用IFNULL也可以(但上面的写法更高效,因为只更新需要修改的行):
UPDATE `你的项目ID.你的数据集ID.TEST1` SET UBIC2 = IFNULL(UBIC2, 'LIV');
为什么之前用IFNULL没成功?
大概率是执行IFNULL的UPDATE时逻辑有误,比如没覆盖到所有NULL行,或者语法细节出错(比如引号、表名拼写错误)。上面的写法都是BigQuery合法语法,替换成你自己的项目和数据集ID就能直接使用。
内容的提问来源于stack exchange,提问作者samcglml
相关产品推荐
相关产品推荐

