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)
此方法适用于负数和小数。
基本上我想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)
此方法适用于负数和小数。