web-dev-qa-db-ja.com

Hive SQLでの合体

HiveではIFNULLISNULL、またはNVL関数がサポートされていないため、NULLを0に変換するのに問題があります。COALESCE(*column name*, 0)を試しましたが、以下のエラーメッセージを受け取りました:

引数タイプの不一致0:COALESCEの後の式はすべて同じタイプである必要があります。 "bigint"が期待されますが、 "int"が見つかります

これを解決するには?

26
Parsa

Lamakがコメントで指摘したように、COALESCE(column, CAST(0 AS BIGINT))はエラーを解決します。

22
Parsa

Hiveは バージョン0.8以降のbigintリテラル をサポートしています。したがって、追加の「L」で十分です。

COALESCE(column, 0L)
43
Ivan Klass

.11 Hive にはNVL関数nvl(T value, T default_value)があるため

これはといい、値がnullの場合はデフォルト値を返し、そうでなければvalueを返します

5
kanishka vatsa

Hiveの言語DDLおよびUDF

NVL(value, default value) 

値がnullの場合はデフォルト値を返し、そうでない場合は値を返します

2
staticor

顧客の主な連絡先がメールの場合、メールがnullの場合は電話番号、電話番号もnullの場合は住所です。 COALESCEを使用して次のように記述されます。

coalesce(email,phonenumber,address) 

一方、Hiveでもnvlを次のように連鎖させることで実現できます。

nvl(email,nvl(phonenumber,nvl(address,'n/a')))
2
Amit_Hora
nvl(value,defaultvalue) as Columnname

欠損値を指定されたデフォルト値に設定します

1
Srikant

[Hive Language Manual] [1]から:

COALESCE(T v1、T v2、...)

NULL以外の最初の値、またはすべての値がNULLの場合はNULLを返します

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

1
Zorayr