COALESCE avec Hive SQL
Puisqu'il n'y a pas IFNULL
, ISNULL
, ou NVL
Fonction supportée sur Hive, j'ai du mal à convertir NULL En 0. J'ai essayé COALESCE(*column name*, 0)
mais j'ai reçu le message d'erreur ci-dessous:
Incompatibilité de type D'Argument 0: les expressions après coalescence devraient toutes avoir le même type:" bigint "est attendu mais" int " est trouvé
Comment résoudre ce problème?
7 réponses
Hive prend en charge bigint littéral depuis la version 0.8. Donc, " l " supplémentaire est suffisant:
COALESCE(column, 0L)
Comme Lamak souligné dans le commentaire, COALESCE(column, CAST(0 AS BIGINT))
résout l'erreur.
Depuis 0.11 ruche est une fonction NVL
nvl(T value, T default_value)
Qui dit Retourne la valeur par défaut si la valeur est null sinon retourne la valeur
De Langue DDL & UDF De La Ruche
NVL(value, default value)
Renvoie la valeur par défaut si la valeur est null sinon renvoie la valeur
nvl(value,defaultvalue) as Columnname
Définira les valeurs manquantes sur defaultvalue spécifié
Si le support de contact principal du client est email, si email est null alors phonenumber, et si phonenumber est également null alors address. Il serait écrit en utilisant COALESCE comme
coalesce(email,phonenumber,address)
Alors que la même chose dans la ruche peut être obtenue en chaînant ensemble nvl comme
nvl(email,nvl(phonenumber,nvl(address,'n/a')))
De [Manuel De Langue De La Ruche] [1]:
Coalescence (T v1, T v2,...)
Retourne la première valeur qui n'est pas NULL, ou NULL si toutes les valeurs sont NULL