HiveではIFNULL
、ISNULL
、またはNVL
関数がサポートされていないため、NULLを0に変換するのに問題があります。COALESCE(*column name*, 0)
を試しましたが、以下のエラーメッセージを受け取りました:
引数タイプの不一致0:COALESCEの後の式はすべて同じタイプである必要があります。 "bigint"が期待されますが、 "int"が見つかります
これを解決するには?
Lamakがコメントで指摘したように、COALESCE(column, CAST(0 AS BIGINT))
はエラーを解決します。
Hiveは バージョン0.8以降のbigintリテラル をサポートしています。したがって、追加の「L」で十分です。
COALESCE(column, 0L)
.11 Hive にはNVL関数nvl(T value, T default_value)
があるため
これはといい、値がnullの場合はデフォルト値を返し、そうでなければvalueを返します
顧客の主な連絡先がメールの場合、メールがnullの場合は電話番号、電話番号もnullの場合は住所です。 COALESCEを使用して次のように記述されます。
coalesce(email,phonenumber,address)
一方、Hiveでもnvlを次のように連鎖させることで実現できます。
nvl(email,nvl(phonenumber,nvl(address,'n/a')))
nvl(value,defaultvalue) as Columnname
欠損値を指定されたデフォルト値に設定します
[Hive Language Manual] [1]から:
COALESCE(T v1、T v2、...)
NULL以外の最初の値、またはすべての値がNULLの場合はNULLを返します