BigQuery中如何将FLOAT64字段内的'NaN'字符串替换为0.0?
问题描述
我的BigQuery数据集里有个Unemployment_rate字段,类型为FLOAT64,但部分本该为0的值被存储为浮点类型的NaN(而非字符串)。我尝试用以下UPDATE语句将这些值替换为0.0:
UPDATE `personal-portfolio-397412.capstone_project.2023_HY_Top_950_Youtubers` SET Unemployment_rate = 0.0 WHERE Unemployment_rate = 'NaN'
执行时收到错误提示:
no matching signature for operator = for argument types: FLOAT64, STRING. Supported signature: ANY = ANY at [4.7].
试过ALTER TABLE/COLUMN语句和CASE语句都没解决问题,求熟悉BigQuery语法的帮助。
解决方案
问题核心是你用字符串'NaN'和FLOAT64类型字段直接做相等判断,BigQuery不支持跨类型的这种匹配逻辑。FLOAT64字段里的NaN是浮点原生的特殊值,不是字符串,需要用专门的判断函数处理:
1. 直接替换浮点NaN值
使用BigQuery内置的IS NaN()函数精准匹配浮点类型的NaN值:
UPDATE `personal-portfolio-397412.capstone_project.2023_HY_Top_950_Youtubers` SET Unemployment_rate = 0.0 WHERE Unemployment_rate IS NaN
2. 同时处理NaN和NULL(可选)
如果需要一次性覆盖空值和异常值,扩展WHERE条件即可:
UPDATE `personal-portfolio-397412.capstone_project.2023_HY_Top_950_Youtubers` SET Unemployment_rate = 0.0 WHERE Unemployment_rate IS NaN OR Unemployment_rate IS NULL
特殊情况:字段实际混存字符串和数值
如果你的字段实际是STRING类型(而非FLOAT64),需要先转换类型再处理:
UPDATE `personal-portfolio-397412.capstone_project.2023_HY_Top_950_Youtubers` SET Unemployment_rate = '0.0' WHERE Unemployment_rate = 'NaN' -- 之后再把字段类型修改为FLOAT64 ALTER TABLE `personal-portfolio-397412.capstone_project.2023_HY_Top_950_Youtubers` ALTER COLUMN Unemployment_rate SET DATA TYPE FLOAT64
内容的提问来源于stack exchange,提问作者Sylvia Ikeji
相关产品推荐
相关产品推荐

