2016-03-20 18 views
0

Her ikisinin de tercih ettiği bir filmin, bir .user_id ve b.user_id sayısını döndüren bir HIVE sorgusu yazmayı deniyorum. Sorgumu çalıştırdığımda a.user_id, b.user_id, count ve film setlerini alıyorum. Ayrıca b.user_id, a.user_id, count ve film setlerini de alıyorum.Filtre Sorguda Eşleme Tersine Eşleştirme

Sorgum, sorgumu yalnızca a.user_id, b.user_id sayısı ve film grubuyla nasıl sınırlandıracağım sorusudur.

Zaten ON(a.movie_id = b.movie_id AND a.user_id < b.user_id)

SELECT a.user_id, b.user_id, count(*) AS num, collect_set(m.movie_title) 
FROM ratings a 
JOIN ratings b 
ON (a.movie_id = b.movie_id) 
JOIN movies m 
ON (a.movie_id = m.movie_id AND b.movie_id = m.movie_id) 
WHERE (a.user_id <> b.user_id) 
GROUP BY a.user_id, b.user_id; 
ORDER BY num DESC; 

hattı 4 chaning tarafından Remove reverse duplicates from an SQL query önerilen bir çözüm çalıştılar Güncel Çıktı: filmleri

B, A

A, B, 25, liste, 25, filmlerin listesi

İstenen çıktı:

A, B, film

+2

Ve neden değil Önerilen çözüm çalışır? –

+0

Bunun sebebi, ben bir öz birleştirme yapıyorum ve kullanıcı deyimine kendi kendine katılmaya başlarken, buradaki ifadeyi değiştirdiğinizde düşünüyorum. Örneğin, dosya boyutu 172.9kb idi ve dosya boyutunun değiştirilmesi 17.8MB oldu. Çıkışı kontrol ettiğimde, eşleşen filmlerin sayısı 6-138 aralığındaydı ve şimdi 300.000 büyüklüğündeler. –

cevap

1

ben olmak istiyorum sorguyu beklenebilir 25 listesi:

SELECT a.user_id, b.user_id, count(*) AS num, collect_set(m.movie_title) 
FROM ratings a JOIN 
    ratings b 
    ON a.movie_id = b.movie_id JOIN 
    movies m 
    ON a.movie_id = m.movie_id 
WHERE a.user_id < b.user_id 
GROUP BY a.user_id, b.user_id 
ORDER BY num DESC; 
+0

Ayrıca AND deyimini kaldırmanın döngüyü durdurmasına neden olup olmadığını merak ediyorum. Teşekkür ederim. Bu arada, ikinci hatta son satırda ek bir noktalı virgül var. –

+0

@BennyBaysinger. . . Hmmm. Uzaktan mümkün. Orijinal 'katılma 'koşulu gereksizdir, bu nedenle sonuç kümesini etkilemez. Yine de sorgu planını etkileyebilir. –

+0

Sadece 'AND' ile birlikte ve kullanmadan çalıştım. Beklediğiniz gibi aynı kesin sorgu. Yemin ederim ki, önerilen çözümünüzü ve önceki posterin çözümünü denedim. Soruyu aynı çözümle bile etiketledim. Başka bir yazım hatası olmalı. Her neyse, mükemmel bir şekilde umarız, aynı konuya sahip bir başkasına yardım eder. –