2011-04-21 13 views
9

मैं HIVE में एक टेबल बना देता हूं।हाइव एक्सप्रेशन समूह में नहीं

id bigint, rank bigint, date string 

मैं प्रति माह औसत (रैंक) प्राप्त करना चाहते हैं: यह निम्न स्तंभ है। मैं इस कमांड का उपयोग कर सकता हूँ। यह काम करता हैं।

select a.lens_id, avg(a.rank) 
from tableA a 
group by a.lens_id, year(a.date_saved), month(a.date_saved); 

हालांकि, मैं भी तारीख की जानकारी प्राप्त करना चाहता हूं।

select a.lens_id, avg(a.rank), a.date_saved 
from lensrank_archive a 
group by a.lens_id, year(a.date_saved), month(a.date_saved); 

यह शिकायत: Expression Not In Group By Key

उत्तर

13

पूर्ण त्रुटि संदेश प्रारूप Expression Not In Group By Key [value] में होना चाहिए मैं इस आदेश का उपयोग करें।
[value] आपको बताएगा कि Group By में कौन सी अभिव्यक्ति की आवश्यकता है।

बस दो प्रश्नों को देखते हुए, मैं कहूंगा कि आपको a.date_saved स्पष्ट रूप से Group By में जोड़ने की आवश्यकता है।

+2

हां। A.date_saved जोड़ने के बाद, यह काम करता है। हालांकि, यह वही नहीं करता जो मैं चाहता हूं। मुझे प्रति माह औसत (रैंक) चाहिए। अब यह औसत नहीं करता है। यह a.date_saved द्वारा समूह जोड़ने के बाद से सभी रिकॉर्ड दिखाता है। – chnet

+2

@chnet: आपके पास कोई कॉलम नहीं चुना जा सकता है और इसे उस कॉलम द्वारा समूहीकृत नहीं किया गया है। यदि आप 'a.date_saved' प्रदर्शित करना चाहते हैं तो आपको इसके द्वारा समूहबद्ध करने की आवश्यकता है। आप 'वर्ष (a.date_saved) 'और' माह (a.date_saved)' प्रदर्शित करने में सक्षम हो सकते हैं क्योंकि वे 'समूह द्वारा' में हैं लेकिन उस पर 100% नहीं हैं। – Nija

+0

धन्यवाद। मैं वर्ष (a.date_saved) और महीने (a.date_saved) प्रदर्शित करने में सक्षम हूं। – chnet

9

एक चारों ओर घूमना अतिरिक्त फ़ील्ड को collect_set में रखना और सेट के पहले तत्व को वापस करना है। उदाहरण

select a.lens_id, avg(a.rank), collect_set(a.date_saved)[0] 
from lensrank_archive a 
group by a.lens_id, year(a.date_saved), month(a.date_saved); 
0

के लिए मैं भी यही समस्या है.अगर का सामना करना पड़ रहा था आप सीधा रास्ता का उपयोग कर तो छोटे अक्षरों में आपकी क्वेरी लिखने क्वेरी निष्पादित करने के लिए कोशिश कर रहे हैं।

+0

स्पष्ट रूप से उत्तर संपादित करें –

संबंधित मुद्दे