2016-06-21 9 views
0

Ich habe eine Tabelle, dieWie erzeuge ich eine Tabelle mit IDs, die jeweils nur ein Attribut haben?

id attribute 
1 a 
1 a 
2 b 
2 a 

Und ich will sammeln alle IDs wie folgt aussieht, die nur ein Attribut haben. So im Beispielfall:

id 
1 

war mein erster Gedanke ein where zu verwenden, aber das würde zurückkehren:

id 
1 
1 
2 

Da 2 auch ein "a" -Attribut in einer Instanz hat.

P.S. Mir ist klar, dass die Formulierung des Titels zweideutig ist; vielleicht gibt es einen besseren Begriff als Attribut, um in diesem Fall zu verwenden?

Antwort

2

ohh Ich sah gerade Bienenstock, aber das ist ziemlich Standard sql geben Sie es zu versuchen.

SELECT 
    ID 
FROM 
    TABLENAME 
GROUP BY 
    ID 
HAVING 
    COUNT(DISTINCT attribute) = 1 

Haben ist wie eine Where-Anweisung nach der GROUP BY Aggregation aufgetreten ist.

+0

HiveQL hat viele Eigenschaften mit mehr Standard SQLs gemeinsam, also werde ich es laufen müssen sicher sein, aber ich denke, das es tun kann mich. Ich werde in ein paar Minuten als beantwortet markieren, wenn es erfolgreich ist. Danke Matt! –

+0

Ich vermutete, dass es wahrscheinlich ist. Ich muss noch eine Hadoop-Umgebung aufbauen, um damit zu spielen:) – Matt

+0

Ich empfehle es @Matt. Besonders mit Tez-on-Hive ist es eine Freude, mit ihm zu arbeiten - wenn du einmal an den Eigenarten von HiveQL vorbeikommst. –

0

HiveQL Äquivalent von SQL group by verwenden, having und distinct

select id from (select id,count(distinct attribute) cnt from table_actual group by id having cnt='1') tableouter; 
+0

aber diese Abfrage wird nur erhalten, ID 1 mit Attribut a. er wollte alle IDs bekommen, die nur ein eindeutiges Attribut haben. Um die HAVING-Klausel zu verwenden, ist eine Gruppierung erforderlich. DISTINCT wäre großartig, wenn Sie Ihre Ergebnisse nicht weiter einschränken möchten. – Matt

+0

Danke Matt für den Heads-up, die Abfrage aktualisiert, um alle möglichen Ergebnisse zu erreichen. – syadav