hiveql-如何查找列值是数字还是不使用任何自定义项?

kdfy810k  于 2021-06-29  发布在  Hive
关注(0)|答案(2)|浏览(350)

基本上我想 return rows 基于一个 column value .
如果列包含 non numeric 值,然后从配置单元表返回这些行。
任何 UDF 在中提供 Hive ?

brccelvz

brccelvz1#

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

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

或者只需在其中使用布尔表达式: 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) 这种方法适用于负数和小数。

vcudknz3

vcudknz32#

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

where col rlike '[^0-9]'

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

相关问题