2012-11-20 16 views
6

पर जुड़ता है मुझे पता है कि बिगक्वरी पर जुड़ने की सुविधा में सुधार करने के लिए काम किया जा रहा है, यहां पर नाराज नहीं है, लेकिन अगर डेटा का उपयोग ठीक से नहीं किया जा सकता है तो 'विज्ञापन' के रूप में डेटा के 'टेराबाइट' सेट का विश्लेषण करना मुश्किल होगा। ।Google Bigquery

ठीक है, समस्या पर वापस, मेरे पास दो टेबल हैं 600 मेग्स है और दूसरा 50 मेग्स है, मैंने शामिल होने का प्रयास किया और मुझे छोटी तालिका के बारे में एक त्रुटि मिली। मैंने कुछ शोध किया और मुझे पता चला कि Bigquery दोनों टेबलों को बड़ा मानता है यदि वे 7 एमबी से अधिक हैं?

तो मुझे ऑनलाइन मिली कुछ सलाह के आधार पर मैंने छोटी तालिका के प्रश्न में डेटासेट का चयन किया और इसे एक नई तालिका में सहेजा, नया डेटा सेट दो कॉलम पर 12 एमबी और 600 के पंक्तियां हैं। तब मैं अपने क्वेरी फिर से कोशिश की, लेकिन मैं अब भी वही त्रुटि हो रही है:

Query Failed : Error: Large table cdrs_test.geoIP_Left must appear as the leftmost table in a join query 

geoIP_Left, 12 Megs है अन्य तालिका 600Megs है ..

इस किसी भी तरह से तय किया जा सकता है या मैं भंडाफोड़ कर रहा हूँ? यदि ऐसा है तो किसी को भी किसी अन्य सेवा के बारे में पता है जिसका उपयोग मैं डेटा के बड़े सेट का विश्लेषण करने के लिए कर सकता हूं जो समर्थन करता है?

संपादित करें: यह वास्तविक क्वेरी है;

SELECT COUNT(results.cc_card) AS count, 
     sum(results.sessiontime) AS time, 
     geoIP_Left.place AS place 
FROM cdrs_test.cdrs_2010_5 AS results 
JOIN cdrs_test.geoIP_Left AS geoIP_table 
    ON results.cc_card = geoIP_table.vcard 
WHERE results.sessiontime > 0 AND results.countryName Contains 'India' 
GROUP BY place; 
+1

क्या आप अपनी वास्तविक क्वेरी दिखा सकते हैं? –

+0

ज़रूर .. जहां आप – user1838066

+0

चुनते हैं COUNT (results.cc_card) AS गणना, योग (परिणाम.sessiontime) AS समय, geoIP_Left.place cdrs_test.cdrs_2010_5 से AS स्थान के रूप में जोड़ें परिणाम cdrs_test.geoIP_Left AS geoIP_table परिणाम.cc_card = geoIP_table पर .vcard WHERE परिणाम.sessiontime> 0 और results.countryName में 'भारत' समूह शामिल है; – user1838066

उत्तर

10

आप एक subselect cdrs_test.geoIP_Left है कि आप में रुचि रखते हैं से केवल स्तंभों का संदर्भ देता है के रूप में इस क्वेरी को व्यक्त कर सकता है। दूसरे उदाहरण here देखें।

SELECT 
    COUNT(results.cc_card) AS count, 
    sum(results.sessiontime) AS time, 
    geoIP_table.place AS place 
FROM 
    cdrs_test.cdrs_2010_5 AS results 
JOIN 
    (SELECT place, vcard FROM cdrs_test.geoIP_Left) 
AS 
    geoIP_table 
ON 
    results.cc_card = geoIP_table.vcard 
WHERE 
    results.sessiontime > 0 AND results.countryName CONTAINS 'India' 
GROUP BY 
    place; 

तुम भी बस कई क्वेरी चला सकते हैं - ध्यान दें कि आप क्वेरी परिणाम स्पष्ट रूप से बचा सकता है एक नामित तालिका के रूप में, और बाद क्वेरी में उस तालिका का उपयोग करें।

आखिरकार, एक और विकल्प बिगक्चर ईटीएल भागीदारों में से एक द्वारा प्रदान किए गए मैपरेडस ट्रांसफ़ॉर्मेशन पाइपलाइन, या ETL tool का उपयोग करके डेटा में पूर्व-जुड़ना होगा।

+1

2013 अपडेट: जॉइन ईच का उपयोग करके आप अब 2 बड़ी टेबल के भीतर जॉइन कर सकते हैं। –

5

जैसा कि टिप्पणी में फेलिप द्वारा उल्लेख किया गया है। BigQuery ने 2 बड़े टेबल के जॉइन को अनुमति देने के लिए जुड़ने के लिए एक "संशोधक" संशोधक की अनुमति दी है। क्वेरी संदर्भ पृष्ठ से -

सामान्य जॉइन ऑपरेशंस की आवश्यकता होती है कि दाहिने तरफ तालिका में संपीड़ित डेटा के 8 एमबी से कम हो। प्रत्येक संशोधक एक संकेत है जो क्वेरी निष्पादन इंजन को सूचित करता है कि जॉइन दो बड़ी तालिकाओं का संदर्भ दे सकता है। प्रत्येक संशोधक क्रॉस जॉइन क्लॉज में उपयोग नहीं किया जा सकता है।

जब संभव हो, तो सर्वोत्तम प्रदर्शन के लिए प्रत्येक संशोधक के बिना जॉइन का उपयोग करें। जब जॉइन के लिए टेबल आकार बहुत बड़े होते हैं तो प्रत्येक में जॉइन का उपयोग करें।

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