Snowflake无法读取特定数值问题排查及解决方案咨询
Snowflake数值转换报错解决办法
问题根源
你的answer字段应该是字符串类型(VARCHAR),而非数值类型。当执行数值运算(乘以0.39)或数值比较(>1000)时,Snowflake会尝试隐式将字符串转换为数值,但US地区的某些值(比如报错里的'171240156932559')无法完成转换,导致报错。而单纯查询字符串或非US地区数据时,不需要转换,所以正常运行。
解决步骤
确认字段类型
先执行以下语句查看answer的类型:DESCRIBE TABLE rawheight;显式安全转换数值
使用TRY_TO_NUMBER函数进行显式转换,这个函数会把无法转换的字符串返回NULL,不会中断查询。修改后的第一个SQL:
select *, case when code = 'C' then TRY_TO_NUMBER(answer) * 0.39 else TRY_TO_NUMBER(answer) end as answer_iu from rawheight where country in ('US')修改后的过滤SQL:
select * from rawheight where TRY_TO_NUMBER(answer) > 1000排查转换失败的数据
如果需要找出哪些US地区的answer值无法转换为数值,执行:select answer from rawheight where country = 'US' and TRY_TO_NUMBER(answer) IS NULL这类值可能包含空格、非数字字符,可进一步用
TRIM清理后再转换,比如:TRY_TO_NUMBER(TRIM(answer))
内容的提问来源于stack exchange,提问作者turtle
相关产品推荐
相关产品推荐

