2016-06-28 20 views
1

NULLの値を含める必要がありますが、MAXMINの関数をHiveに計算する必要があります。MAXのMIN、MINの関数がHIVEの場合

id values 
A  1 
B  3 
C  NULL 

その後、MAX(values)NULLを返す必要があります:たとえば、場合、私はテーブルを持っています。

+0

はあなたのために、このソリューションの仕事をしましたか? – gobrewers14

答えて

1

キーグループにNULLがあることを示すフラグを作成できます。次に、その新しく作成された列を集約し、フラグが存在するかどうかを調べると、グループに少なくとも1つのNULLがあることを示します。

データ

key  val 
----------- 
A  1 
A  NULL 
B  3 
B  2 
C  NULL 
C  10 
C  4 

Query0

SELECT key 
    , CASE WHEN ARRAY_CONTAINS(cs, 1) THEN NULL ELSE m END AS col_max 
FROM (
    SELECT key 
    , MAX(val) AS m 
    , COLLECT_SET(CASE WHEN val IS NULL THEN 1 ELSE 0 END) AS cs 
    FROM database.table 
    GROUP BY key) x; 

あなたはまた、代わりにCOLLECT_SET()を使用してのSUM()(またはMAX())を使用することができます。

Query1を

SELECT key 
    , CASE WHEN cs > 0 THEN NULL ELSE m END AS col_max 
FROM (
    SELECT key 
    , MAX(val) AS m 
    , SUM(CASE WHEN val IS NULL THEN 1 ELSE 0 END) AS cs 
    FROM database.table 
    GROUP BY key) x; 

出力

key col_max 
-------------- 
A  NULL 
B  3 
C  NULL