web-dev-qa-db-ja.com

HiveQL-列の値を見つける方法は数値であるか、UDFを使用していませんか?

基本的には、1つのreturn rowsに基づいてcolumn valueを使用したいと思います。

列にnon numeric値が含まれている場合、Hiveテーブルからそれらの行を返します。

UDFにはHiveがありますか?

8
Shankar

Hiveはrlike(正規表現)をサポートしていると思います。だから、あなたは行うことができます:

where col rlike '[^0-9]'

これにより、数字以外の文字が検索されます。数値に小数点またはコンマが含まれる場合は、これを拡張できます。

14
Gordon Linoff

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)を使用します

を使用したこのアプローチは、負の数および小数の数でも正しく機能します。

8
leftjoin