如何在Presto中正确捕获NaN?已尝试的多种写法均不生效或报错
Presto捕获NaN值的正确写法
核心解决方案
Presto提供了内置函数is_nan()专门用于判断浮点类型字段是否为NaN值,对应需求的正确写法如下:
- 仅捕获NaN,不处理NULL:
IF(is_nan(X), 0, X)
- 同时捕获NaN和NULL值:
IF(is_nan(X) OR X IS NULL, 0, X)
原有写法失效/报错的原因
IF(X IS NULL,0,X):NaN属于符合IEEE标准的特殊浮点值,和NULL的定义完全独立,所以该判断只能命中空值,无法识别NaNIF(X IS NaN,0,X):Presto未支持IS NaN语法格式,所以触发语法不匹配错误IF(X = NaN,0,X):首先NaN不会被识别为浮点常量,会被解析为列名触发列不存在错误;其次符合IEEE标准的NaN本身和任何值做等于判断结果都为false,哪怕语法合法也无法正确识别IF(X = 'NaN',0,X):'NaN'是字符串类型,和浮点类型的X做运算会触发类型不匹配错误
内容的提问来源于stack exchange,提问作者user15851574
相关产品推荐
相关产品推荐

