2017-03-22 27 views
6

में एक डिलीमीटर के साथ कई पंक्तियों को कंसैट करें, मुझे '~' को डिलीमीटर के रूप में स्ट्रिंग मानों को पंक्तिबद्ध करने की आवश्यकता है। मैं निम्नलिखित डेटा है:हाइव

enter image description here

मैं परिसीमक के रूप में के साथ 'row_id' '~' के आरोही क्रम में प्रत्येक 'आईडी' के लिए 'टिप्पणी' स्तंभ concat की जरूरत है।

अपेक्षित आउटपुट के रूप में नीचे है:

enter image description here

group_concat एक विकल्प के बाद से मेरी हाइव संस्करण में मान्यता प्राप्त नहीं नहीं है। मैं collect_set या collect_list का उपयोग कर सकता हूं, लेकिन मैं बीच में डेलीमीटर डालने में सक्षम नहीं हूं।

क्या कोई काम आसपास है?

+0

पाठ के साथ छवियों को रख दें। –

+1

क्या आपने हाइव द्वारा प्रदान किए गए कॉन्सट फ़ंक्शंस का उपयोग करने का प्रयास किया था? इस लिंक को देखें: - https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF –

+0

हां मैंने दिए गए सभी संक्षिप्त कार्यों को आजमाया। वे सभी कॉलम वार ऑपरेशंस के लिए हैं। मैं पंक्ति के अनुसार ऑपरेशन की तलाश में हूं – Vaishak

उत्तर

6

collect_list स्ट्रिंग नहीं, सरणी देता है।
concat_ws का उपयोग करके ऐरे को सीमित स्ट्रिंग में परिवर्तित किया जा सकता है।


यह टिप्पणियों के विशिष्ट आदेश के साथ काम करेगा।

select  id 
      ,concat_ws('~',collect_list(comment)) as comments 

from  mytable 

group by id 
; 

+----+-------------+ 
| id | comments | 
+----+-------------+ 
| 1 | ABC~PRQ~XYZ | 
| 2 | LMN~OPQ  | 
+----+-------------+