Snowflake WHERE子句异常:符合条件却查询不到数据
Snowflake WHERE子句匹配数值无结果的排查方案
问题说明
执行以下SQL查询无返回结果,但确认表中存在quantile值为0.8的数据:
select * from "ANALYTICS_DEV"."DBT_schema"."WF3_M3_REGRESSION_MODEL" where "quantile"= 0.8
该表为Snowpark Python构建的dbt回归模型表,更换多种相等运算符后问题仍存在。
排查与解决步骤
处理浮点数精度误差:浮点数存储可能存在微小精度偏差(如实际存储为
0.8000000001或0.7999999999),直接用=匹配会失败。可改用范围查询或精度统一:-- 范围匹配 select * from "ANALYTICS_DEV"."DBT_schema"."WF3_M3_REGRESSION_MODEL" where "quantile" between 0.7999 and 0.8001; -- 统一精度后匹配 select * from "ANALYTICS_DEV"."DBT_schema"."WF3_M3_REGRESSION_MODEL" where ROUND("quantile", 1) = 0.8;验证字段数据类型:若
quantile是字符串类型而非数值类型,用数值0.8匹配会失效。先查看字段类型:DESCRIBE TABLE "ANALYTICS_DEV"."DBT_schema"."WF3_M3_REGRESSION_MODEL";如果是字符串类型,改用字符串匹配:
select * from "ANALYTICS_DEV"."DBT_schema"."WF3_M3_REGRESSION_MODEL" where "quantile" = '0.8';检查dbt模型的Snowpark逻辑:确认模型中
quantile字段的生成代码:- 是否在计算过程中产生精度丢失?
- 是否存在不必要的类型转换(如数值转字符串时格式不一致)?
- 是否有过滤逻辑导致目标数据未写入表中?
查看原始数据精确值:直接查询所有
quantile的唯一值,确认实际存储内容:SELECT DISTINCT "quantile", TO_VARCHAR("quantile") FROM "ANALYTICS_DEV"."DBT_schema"."WF3_M3_REGRESSION_MODEL" ORDER BY "quantile";通过
TO_VARCHAR可看到数值的精确存储形式,判断是否存在精度偏差。重置会话参数:Snowflake的会话参数(如
NUMERIC_INPUT_FORMAT)可能影响数值解析,尝试重置后再查询:ALTER SESSION SET NUMERIC_INPUT_FORMAT = 'DEFAULT';
内容的提问来源于stack exchange,提问作者Jackson Alexander
相关产品推荐
相关产品推荐

