En gros, je voudrais return rows
basé sur un column value
.
Si la colonne contient non numeric
valeurs, puis renvoie ces lignes à partir d'une table Hive.
Tout UDF
est disponible dans Hive
?
Je crois que Hive prend en charge rlike
(expressions régulières). Vous pouvez donc faire:
where col rlike '[^0-9]'
Cela recherche tout caractère non numérique. Vous pouvez développer cela si vos valeurs numériques peuvent avoir des virgules décimales ou des virgules.
Utilisez cast(expr as <type>)
. Un null
est retourné si la conversion échoue.
case when cast(col as double) is null then 'N' else 'Y' end as isNumber
ou utilisez simplement l'expression booléenne dans WHERE: cast(col as double) is not null
Vous pouvez également créer une macro isNumber:
create temporary macro isNumber(s string)
cast(s as double) is not null;
Et utilisez-le dans vos requêtes:
Hive> select isNumber('100.100'), isNumber('100'), isNumber('.0'), isNumber('abc');
OK
_c0 _c1 _c2 _c3
true true true false
Si vous devez rechercher Integer, utilisez cast(s as Int)
Cette approche utilisant fonctionne correctement avec des nombres négatifs et fractionnaires.