BigQuery合并表时遇DBT错误:Invalid NUMERIC value: nan 求助
Invalid NUMERIC value: nan错误排查方案 错误信息
Database Error in model fact_trips (models/core/fact_trips.sql)
Invalid NUMERIC value: nan
compiled Code at target/run/taxi_rides_ny/models/core/fact_trips.sql
问题背景
已通过dbt_expectations.expect_column_values_to_be_of_type校验所有数值列,校验均通过;数值列存在NULL值,明确NULL与NaN并非同一概念,需定位具体含无效值的列并修复。
排查及修复步骤
逐个排查数值列的NaN值
针对每个NUMERIC类型的列,执行以下查询统计NaN数量:SELECT COUNT(*) AS nan_count FROM [你的源表名] WHERE [目标数值列名] = CAST('nan' AS FLOAT64)BigQuery中NaN属于FLOAT64类型的特殊值,无法直接转为NUMERIC,通过此查询可快速定位存在NaN的列。
检查模型中的类型转换逻辑
查看fact_trips.sql里是否存在将FLOAT64类型字段转为NUMERIC的操作(如CAST(xxx AS NUMERIC)),若原字段包含NaN,转换会直接报错。可提前过滤或替换NaN:CAST(IF(your_float_column IS NOT NULL AND your_float_column != CAST('nan' AS FLOAT64), your_float_column, NULL) AS NUMERIC)用
SAFE_CAST辅助定位
将模型中所有CAST替换为SAFE_CAST,运行模型后查看哪些字段出现了异常NULL值(原本应存在有效数值的记录),这些字段即为包含NaN的目标列。
补充说明
确实,NULL表示缺失值,NaN是浮点类型的特殊非数值,BigQuery的NUMERIC类型不支持存储NaN,因此当数据中存在NaN并尝试转为NUMERIC时会触发该错误。
内容的提问来源于stack exchange,提问作者Peter Liu

