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?
Comme Lamak l'a souligné dans le commentaire, COALESCE(column, CAST(0 AS BIGINT))
résout l'erreur.
Hive prend en charge littéral bigint depuis la version 0.8 . Donc, "L" supplémentaire suffit:
COALESCE(column, 0L)
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
NVL(value, default value)
Renvoie la valeur par défaut si la valeur est null, sinon la valeur
nvl(value,defaultvalue) as Columnname
définira les valeurs manquantes sur la valeur par défaut spécifiée
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')))
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