Ответ 1
Как отметил Ламак в комментарии, COALESCE(column, CAST(0 AS BIGINT))
устраняет ошибку.
Поскольку в Hive нет функции IFNULL
, ISNULL
или NVL
, у меня возникла проблема с преобразованием NULL в 0. Я пробовал COALESCE(*column name*, 0)
, но получил следующее сообщение об ошибке:
Несоответствие типа аргумента 0: выражения после COALESCE должны быть все имеют тот же тип: ожидается "bigint", но "int" найден
Как разрешить это?
Как отметил Ламак в комментарии, COALESCE(column, CAST(0 AS BIGINT))
устраняет ошибку.
Hive поддерживает bigint литерал с версии 0.8. Таким образом, дополнительного "L" достаточно:
COALESCE(column, 0L)
Так как 0.11 hive имеет функцию NVL
nvl(T value, T default_value)
в котором говорится Возвращает значение по умолчанию, если значение равно null else возвращает значение
NVL(value, default value)
Возвращает значение по умолчанию, если значение равно null else возвращает значение
COALESCE (T v1, T v2,...) Верните первый v, который не является NULL, или NULL, если все v равны NULL
nvl(value,defaultvalue) as Columnname
установит отсутствующие значения в значение по умолчанию, указанное
Если основным контактным носителем клиента является адрес электронной почты, если адрес электронной почты является нулевым, а затем номер телефона, а также, если phonenumber также является нулевым, то адрес. Он будет написан с использованием COALESCE как
coalesce(email,phonenumber,address)
в то время как то же самое в улье может быть достигнуто путем объединения nvl как
nvl(email,nvl(phonenumber,nvl(address,'n/a')))