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

HiveQL - How to find the column value is numeric or not using any UDF?

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

如果该列包含 non numeric 个值,则 return 这些行来自配置单元 table。

Hive 中有任何 UDF 可用吗?

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

where col rlike '[^0-9]'

这会查找任何非数字字符。如果您的数值可能有小数点或逗号,您可以扩展它。

使用cast(expr as <type>)。如果转换不成功,则返回 null

case when cast(col as double) is null then 'N' else 'Y' end as isNumber 

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

您还可以创建 isNumber 宏:

create temporary macro isNumber(s string)
       cast(s as double) is not null;

并在您的查询中使用它:

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

如果您需要检查整数,请使用 cast(s as Int)

此方法适用于负数和小数。