基本的には、1つのreturn rows
に基づいてcolumn value
を使用したいと思います。
列にnon numeric
値が含まれている場合、Hiveテーブルからそれらの行を返します。
UDF
にはHive
がありますか?
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)
を使用します
を使用したこのアプローチは、負の数および小数の数でも正しく機能します。