2016-12-09 5 views
0

Ich versuche, die folgende Abfrage auf Hive auszuführen:Hadoop - Hive Unterabfragen - Nicht in Paragraf

SELECT COUNT(*) 
FROM mydata 
WHERE store NOT IN (SELECT store_out 
        FROM (SELECT a.store as store_out, COUNT(*) AS CNT 
          FROM mydata a 
          GROUP BY store) TB1 
        WHERE CNT > AVG(CNT) + STDDEV(CNT) AND CNT < AVG(CNT) - STDDEV(CNT)) 

Aber ich bin immer folgende Fehler:

Error while compiling statement: FAILED: SemanticException [Error 10249]: Line 3:6 Unsupported SubQuery Expression 'store': Correlating expression cannot contain unqualified column references. 

Wie kann Ich schreibe diese Abfrage auf andere Weise?

Danke!

+0

Sie können keine Unterabfragen in einer WHERE-Klausel in Hive haben. – gobrewers14

+0

Hum ... ok. Ich muss sehen, wie ich die Abfrage in Hive erstellen kann. Irgendein Vorschlag? –

Antwort

1

Ich habe nicht Sie Daten exakt so ist es schwer, dies zu überprüfen, aber ich würde etwas tun, wie

SELECT COUNT(*) 
FROM (
    SELECT a.* 
    , flg 
    FROM mydata a 
    LEFT OUTER JOIN (
    SELECT store_out, flg 
    FROM (
     SELECT store_out 
     , cnt 
     , 1 AS flg 
     , AVG(cnt)   OVER() AS avg_cnt 
     , STDDEV_SAMP(cnt) OVER() AS std_cnt 
     FROM (
     SELECT store AS store_out 
      , COUNT(*) AS cnt 
     FROM mydata 
     GROUP BY store) x 
    ) y 
    WHERE cnt > avt_cnt + std_cnt AND cnt < avg_cnt - std_cnt) z 
    ON a.store = z.store_out) final 
WHERE flg IS NULL 

Grundsätzlich verließ die Unterabfrage verbinden und eine Dummy-Spalte erstellen. Diese Spalte ist in der Haupttabelle nicht vorhanden. Wenn also alle flg-Werte NULL sind, sind dies die gewünschten Speicher. Hoffe das hilft.

+0

vielen dank für ihre hilfe !!! Es gibt mir diesen Fehler: Noch nicht unterstützt Platz für UDAF 'AVG' Bienenstock –

+0

bearbeitet. kann auch keine Aggregatfunktion in einer WHERE-Klausel haben. – gobrewers14

+0

vielen dank !!!! Die Abfrage ist TOP! –