在Google BigQuery中何时使用NULL、0或FLOAT64替换值?
BigQuery中替换默认值的最佳场景(NULL/0/FLOAT64)
先给你几个简化写法,替代冗长的IF语句,让代码更简洁好记:
- 温度替换:
NULLIF(temp, 9999.9) AS temperature - 降水替换:
IFNULL(NULLIF(prcp, 99.99), 0) AS precipitation - 风速处理:
NULLIF(CAST(wdsp AS FLOAT64), 999.9) AS wind_speed
下面分场景讲什么时候用NULL、0,以及CAST成FLOAT64:
用NULL替换的场景
当默认值(比如9999.9、"999.9")是数据缺失/无效的标记时,优先用NULL。比如温度不可能达到9999.9,风速也不会是999.9,这些都是传感器故障或者无数据的标识。
NULL的优势是:BigQuery的聚合函数(AVG、SUM等)会自动忽略NULL值,不会干扰计算结果——比如算平均温度时,无效值不会被纳入统计,结果更准确。
用0替换的场景
只有当默认值代表实际为0的业务场景时,才用0。比如降水的99.99如果是“无降水”的约定标记,替换成0是合理的,因为0能准确表达“没有降水”的状态,而且计算累计降水量时,0不会影响SUM的结果,符合业务逻辑。
注意:如果默认值是“数据缺失”(比如站点当天没测降水),别用0,否则会把缺失值当成0拉低平均降水量,这时候用NULL更合适。
CAST成FLOAT64的场景
当原始字段是字符串类型,但实际存储的是数值数据时(比如你的wdsp字段),必须转成FLOAT64(或其他数值类型)才能进行计算、排序、筛选等操作。比如风速是数值,存在字符串字段里,转成FLOAT64后才能算平均风速、筛选风速大于5的记录。
可以把CAST和NULLIF结合,一步完成类型转换+无效值替换,代码更紧凑。
简化代码对比
原来的温度处理:
IF( temp=9999.9, NULL, temp) AS temperature,
简化后:
NULLIF(temp, 9999.9) AS temperature
原来的降水处理:
IF( prcp=99.99, 0, prcp) AS precipitation
简化后:
IFNULL(NULLIF(prcp, 99.99), 0) AS precipitation
原来的风速处理:
IF( wdsp="999.9", NULL, CAST(wdsp AS Float64)) AS wind_speed,
简化后:
NULLIF(CAST(wdsp AS FLOAT64), 999.9) AS wind_speed
内容的提问来源于stack exchange,提问作者Lisa M
相关产品推荐
相关产品推荐

