2010-09-13 24 views

cevap

13

Kullanım benzeyecek yüzden sorguyu yapacağını nasıl bu

userid, col 
-------------- 
1, a 
1, b 
2, c 
2, d 
3, e 

gibi 5 satır vardır:

SELECT yt.userid, 
     GROUP_CONCAT(yt.col SEPARATOR ' ') AS combined 
    FROM YOUR_TABLE yt 
GROUP BY yt.userid 

Varsayılan ayırıcı bir virgül (","), bu nedenle tek bir alanın SEPARATOR değerini belirtmeniz gerekir. İstediğiniz çıktı.

Eğer GROUP_CONCAT değerlerin sırasını sağlamak istiyorsanız

kullanın:

SELECT yt.userid, 
     GROUP_CONCAT(yt.col ORDER BY yt.col SEPARATOR ' ') AS combined 
    FROM YOUR_TABLE yt 
GROUP BY yt.userid 
+0

Ben bunları tutmak gerekirse bu yayını kontrol edebilirsiniz Şu anda Hive kullanıyor, bu yüzden GROUP_CONCAT bir agregasyon işlevi olarak kabul edilmediğinden, grubun bir kısmını neden yapamıyorum? – haoxu

+0

@haoxu: Sonraki seçenek (bir SQL önceliğinden), bir imleç ve birleştirme dizgesi olabilir, ancak bir MySQL işlevi gerektirir. Hive ile aşina değilim - yerel bir sorgu kullanmanın bir yolu yok mu? –

+1

HiveQL'de GROUP_CONCAT için bir JIRA isteği dosyalandı: https://issues.apache.org/jira/browse/HIVE-1689 –

-6

Sana Hive QL kullanarak bunu yapamaz eminim. Ancak, kendi Harita/Küçültme komut dosyalarınızı yazıyorsanız bunu yapmak mümkün olmalıdır - başlamak için this tutorial'a bakın.

+0

cevap güncel değil. Yeni sürümlerin özellikleri var. –

41

Kovanda sen

SELECT userid, collect_set(combined) FROM tabel GROUP BY user_id; 

collect_set çoğaltılamaz kaldırır kullanabilirsiniz. arasında

COLLECT_SET() in Hive, keep duplicates?

+1

tam olarak ne istedim! sorguya göre bir gruptan bir satır uydurmak için cazibe gibi çalışır –

2
SELECT 
    userid, 
    concat_ws(" ", collect_set(col)) AS combined 
FROM table 
GROUP BY userid 
İlgili konular