web-dev-qa-db-fra.com

COALESCE avec Hive SQL

Puisqu'il n'y a pas de fonction IFNULL, ISNULL ou NVL prise en charge sur Hive, j'ai des difficultés à convertir NULL en 0. J'ai essayé COALESCE(*column name*, 0) mais j'ai reçu le message d'erreur ci-dessous:

Discordance de type d'argument 0: les expressions après COALESCE doivent toutes ont le même type: "bigint" est attendu mais "int" est trouvé

Comment résoudre ce problème?

22
Parsa

Comme Lamak l'a souligné dans le commentaire, COALESCE(column, CAST(0 AS BIGINT)) résout l'erreur.

20
Parsa

Hive prend en charge littéral bigint depuis la version 0.8 . Donc, "L" supplémentaire suffit:

COALESCE(column, 0L)
38
Ivan Klass

Depuis 0.11 Hive a une fonction NVL nvl(T value, T default_value)

qui dit Retourne la valeur par défaut si la valeur est null sinon renvoie la valeur 

4
kanishka vatsa

De Langue DDL & UDF de Hive

NVL(value, default value) 

Renvoie la valeur par défaut si la valeur est null, sinon la valeur

2
staticor
nvl(value,defaultvalue) as Columnname

définira les valeurs manquantes sur la valeur par défaut spécifiée

1
Srikant

Si le principal moyen de contact du client est un courrier électronique, si le courrier électronique est nul, le numéro de téléphone et si le numéro de téléphone est également nul, l'adresse Il serait écrit en utilisant COALESCE comme

coalesce(email,phonenumber,address) 

alors que la même chose dans Hive peut être atteint en enchaînant nvl 

nvl(email,nvl(phonenumber,nvl(address,'n/a')))
1
Amit_Hora

De [Hive Language Manual] [1]:

COALESCE (T v1, T v2, ...) 

Renverra la première valeur qui n'est pas NULL ou NULL si toutes les valeurs sont NULL

https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-ConditionalFunctions

0
Zorayr