में समस्याएं ग्रुप द्वारा मैं Google Big Query (और स्टैक ओवरफ़्लो) में नया हूं, मुख्य रूप से उस गति का परीक्षण करता हूं जिस पर बिग क्वेरी दोनों अच्छी तरह से तैयार किए गए और खराब तरीके से तैयार किए गए प्रश्नों को संसाधित करने का प्रबंधन करती है।Google बिग क्वेरी
मुझे एक बोझिल क्वेरी के साथ कठिनाई हो रही है जो MySQL पर (धीरे-धीरे) चलती है। बड़ी क्वेरी ग्रुप बाय सामग्री के बारे में शिकायत करती है।
SELECT nonstops.term, nonstops.lincat, nonstops.id,
MIN(
(1-((LEAST(1,minusone.catimp/nonstops.catimp) + LEAST(1,minusone.catweb/nonstops.catweb))/2))*
(1-((LEAST(1,minusone.catimp/nonstops.catimp) + LEAST(1,minusone.catweb/nonstops.catweb))/2))*
(1-((LEAST(1,minusone.catimp/nonstops.catimp) + LEAST(1,minusone.catweb/nonstops.catweb))/2))*
(nonstops.catweb * nonstops.catweb * nonstops.catimp/nonstops.fnvweb/nonstops.fnvimp)
)
AS calc FROM nonstops INNER JOIN EACH minusone ON nonstops.lincat = minusone.lincat AND nonstops.term = minusone.term
WHERE nonstops.lincat = 556 GROUP BY nonstops.term, nonstops.lincat
ORDER BY `calc` DESC
ध्यान दें कि "प्रत्येक" आंतरिक में जोड़ा जाता है शामिल हों के रूप में दोनों तालिकाओं बड़े हैं: यहाँ शुरू करने क्वेरी है। मैंने इसे पढ़ने में आसान बनाने के लिए डेटासेट नाम हटा दिया है।
ग्रुप बाय का उद्देश्य प्रत्येक शब्द/लिनकैट जोड़ी के लिए शामिल होने से गणना की गई गणना के सबसे कम मूल्य को वापस करने का इरादा है।
त्रुटि मैं मिलता है:
(एल 1: 62): अभिव्यक्ति 'phrases.nonstops.id' की सूची
कौन सा मैं में नहीं करना चाहती द्वारा समूह में मौजूद नहीं है ग्रुप द्वारा, लेकिन मैं इसे जोड़ दिया है और मैं तो मिलती है:
अभिव्यक्ति 'calc
' कौन सा मैं भी नहीं कर सूची
द्वारा समूह में मौजूद नहीं है चाहते हैं! लेकिन अगर मैं इसे जोड़ने मैं:
(एल 7: 1): Can समूह नहीं एक समग्र
से मैं प्रलेखन को देखा और एक जवाब के लिए खोज की है, लेकिन कोई किस्मत। किसी भी संकेत या लिंक की सराहना की जाएगी।
धन्यवाद माइकल, बैकटीक्स वास्तव में एक समस्या थी। ग्रुप बाय से लापता आईडी फ़ील्ड एक अच्छा बिंदु है, इस डेटा के लिए यह MySQL में ठीक काम करता है क्योंकि परिणाम प्रत्येक समूह के लिए एक ही आईडी का उत्पादन करने के लिए जाने जाते हैं (थोड़ा अनावश्यक लेकिन आईडी पर इंडेक्स का उपयोग किया जाता है)। मैंने इसे सुझाव के रूप में बदल दिया और यह काम किया। – LocalGeek
जोड़ना चाहिए, प्रदर्शन के अनुसार, इसमें 75 सेकंड (2.5 जीबी डेटा) लिया गया। क्वेरी को जॉइन में विभाजित करना (डेटा का एक सेट बनाना) फिर ग्रुप बाय चलाना 20 सेकंड और फिर 15 सेकंड लेता है। 32 जीबी 2133 मेगाहर्ट्ज रैम वाला एक लिनक्स बॉक्स, 8 जीबी माइस्क्लुएल द्वारा इस्तेमाल किया गया एक सैमसंग 840 एसएसडी पर डेटा के साथ एक बहुत धीमी एएमडी ए 10 प्रोसेसर (7850 के) पूर्ण क्वेरी के लिए लगभग 2000 सेकंड लेता है या उन्हें विभाजित करता है। – LocalGeek
प्रदर्शन-वाइस मुझे लगता है कि जॉइन से पहले फ़िल्टरिंग करके आपको लाभ हो सकता है (BigQuery अपने आप को अभी तक करने के लिए पर्याप्त स्मार्ट नहीं है): चुनें ... से चुनें (चुनें .. नॉनस्टॉप से जहां lincat = 556) INNER शामिल हों प्रत्येक (चयन .. minusone से कहां LINCAT = 556) पर nonstops.lincat = minusone.lincat और nonstops.term = minusone.term nonstops.term द्वारा समूह, द्वारा calc DESC आदेश nonstops.lincat – Michael