2013-05-16 6 views
12

मैं डेटा के 2 बड़े सेट में शामिल होने वाली क्वेरी चलाने की कोशिश कर रहा हूं और मैं क्वेरी निष्पादन त्रुटि के दौरान संसाधनों को पार कर रहा हूं। मैंने पढ़ा है कि प्रत्येक में शामिल होने और समूह को प्रत्येक का उपयोग करते समय काम करते हैं, लेकिन यह नहीं कि वे कामकाज क्या करेंगे।क्वेरी निष्पादन के दौरान संसाधन

SELECT 
    year(users.firstseen) as first_year, 
    month(users.firstseen) as first_month, 
    DATEDIFF(orders.timestamp,users.firstseen) as days_elapsed, 
    count(orders.user_key) as count_orders 
FROM 
    [project.orders] as orders 
JOIN EACH 
    [project.users] AS users 
ON 
    orders.user_key = users.user_key 
WHERE orders.store = 'ios' 
GROUP EACH BY 1,2,3 

संपादित करें: निम्न काम किया: अगर अपनी चाबी में शामिल होने

SELECT 
    year(users.firstseen) as firstyear, 
    month(users.firstseen) as firstmonth, 
    DATEDIFF(orders.timestamp, users.firstseen) as days_elapsed, 
    COUNT(users.firstseen) AS count_orders FROM [project.orders] as orders 
JOIN EACH(SELECT user_key, firstseen FROM [project.users] 
WHERE store_key = 'ios') as users ON orders.user_key = users.user_key 
GROUP BY firstyear, firstmonth, days_elapsed 
ORDER BY firstyear, firstmonth, days_elapsed 
+1

इस, महीने से काम कर रहा चयन वर्ष (users.firstseen) firstyear रूप में समाप्त हुआ (users.firstseen) firstmonth, DateDiff (orders.timestamp, users.firstseen) days_elapsed, COUNT (users.firstseen) count_orders [project.orders] के रूप में के रूप में के रूप में आदेश प्रत्येक ( चयन user_key, firstseen से शामिल हों के रूप में [project.users] WHERE store_key = 'ios') उपयोगकर्ताओं के रूप में order.user_key = users.user_keyपरग्रुप द्वारा पहली बार, firstmonth, days_elapsed ऑर्डर द्वारा पहली बार, firstmonth, days_elapsed – user2388120

उत्तर

12

प्रत्येक शामिल हों असफल हो सकता है (इस मामले में, user_key) असमान वितरित कर रहे हैं। उदाहरण के लिए, यदि आपके पास असामान्य रूप से दिखाई देने वाली एक उपयोगकर्ता_की है, तो आपको उस कुंजी को संभालने वाले नोड से "संसाधनों से अधिक" त्रुटि प्राप्त होगी। वैकल्पिक रूप से, आप शामिल होने से पहले उपयोगकर्ता कुंजी के कुछ हिस्से को फ़िल्टर करके उपयोगकर्ता कुंजी के छोटे सेट पर क्वेरी चलाने का प्रयास कर सकते हैं।

ग्रुप प्रत्येक भी विफल हो सकता है यदि आपके पास बहुत अलग समूह कुंजी हैं। यह देखने के लिए कि क्या यह मामला है, आप कुछ और कहां खंड जोड़कर शामिल आउटपुट को कम करने का प्रयास कर सकते हैं।

असल में, मैं सलाह देता हूं कि जब तक आप काम करने के लिए क्वेरी प्राप्त न करें, तब तक जॉइन एच या ग्रुप प्रत्येक तक इनपुट को कम करने की सलाह दें, और फिर आपके द्वारा चल रहे सीमाओं के लिए बेहतर समझ होगी । एक बार जब आप इसे जानते हैं, तो आप उपलब्ध संसाधनों से अधिक लाभ प्राप्त करने के लिए (उम्मीदपूर्वक) अपने प्रश्नों की संरचना कर सकते हैं।

(BTW, हम धुन पर निकट भविष्य में इन आपरेशनों सीमा आप मार किया जा सकता है में से कुछ को दूर करने की उम्मीद!)

+0

ऐसा लगता है कि 0 मैचों में पैदा होने वाला कोई भी जॉइन इस त्रुटि को ट्रिगर करता है (2 मिलियन बाएं, 180 मिलियन दाएं जुड़ने पर परीक्षण किया जाता है)। – moin

+0

शून्य मैचों के साथ प्रत्येक में शामिल होने के लिए अपराधी होने की संभावना नहीं है। अधिक संभावना है कि, किसी भी कार्यकर्ता नोड के लिए उपलब्ध संसाधनों से अधिक होने वाली जॉइन ईच से पहले या बाद में आपकी क्वेरी में कुछ अन्य खंड है। यदि आप [email protected] पर नौकरी आईडी भेजते हैं, तो मैं नज़दीकी रूप से देख सकता हूं। –

+0

@ जेरेमीकंडिट क्या आपके पास बाधाओं पर अपडेट है? –

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