2016-06-28 11 views
1

Ich muss NULL Werte während der Berechnung MAX und MIN Funktionen in Hive enthalten. Zum Beispiel, wenn ich die Tabelle:NULL in MAX, MIN Funktion in HIVE

id values 
A  1 
B  3 
C  NULL 

dann MAX(values) sollte NULL zurückzukehren.

+0

Hat diese Lösung für Sie arbeiten? – gobrewers14

Antwort

1

Sie können ein Flag erstellen, das besagt, dass NULL s in Ihrer Schlüsselgruppe vorhanden sind. Dann können Sie die neu erstellte Spalte aggregieren und nach dem Vorhandensein Ihrer Flagge suchen, um anzuzeigen, dass mindestens eine NULL in der Gruppe vorhanden ist.

Daten:

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; 

Sie können auch SUM() (oder MAX()) anstelle COLLECT_SET() zu verwenden.

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; 

Ausgang:

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