HiveQL - 如何使用任何UDF查找列值是否为数字?

Sha*_*kar 7 hive hiveql

基本上我想return rows基于一个column value.

如果列包含non numeric值,则从hive表返回这些行.

任何UDF可用的Hive

Gor*_*off 15

我相信Hive支持rlike(正则表达式).所以,你可以这样做:

where col rlike '[^0-9]'
Run Code Online (Sandbox Code Playgroud)

这会查找任何非数字字符.如果您的数值可能包含小数点或逗号,则可以展开它.


lef*_*oin 8

你正在寻找的功能是cast(expr as <type>).null如果转换不成功,则返回A.

case when cast(col as double) is null then 'N' else 'Y' end as isNumber 
Run Code Online (Sandbox Code Playgroud)

或者只是在WHERE中使用布尔表达式: cast(col as double) is not null

您还可以创建isNumber宏:

create temporary macro isNumber(s string)
       cast(s as double) is not null;
Run Code Online (Sandbox Code Playgroud)

并在您的查询中使用它:

hive> select isNumber('100.100'), isNumber('100'), isNumber('.0'), isNumber('abc');
OK
_c0     _c1     _c2     _c3
true    true    true    false
Run Code Online (Sandbox Code Playgroud)

如果您只需要检查Integer,那么使用cast(s as Int) 此方法,此方法可以正确地使用负数.