2012-11-01 16 views
11

में एकाधिक तालिकाओं को क्वेरी करना क्योंकि BigQuery में किसी तालिका में डेटा अपडेट करना संभव नहीं है, और केवल तंत्र को जोड़ना है, मैंने मासिक आधार पर नई टेबल बनाने का निर्णय लिया है। तो साल 2012 के लिए मान लें कि तालिकाएं (tbl_012012, tbl_022012, tbl_032012, ... tbl_122012) होगी। प्रत्येक रिकॉर्ड स्ट्रिंग के रूप में timestamp के साथ संग्रहीत किया जाएगा।बिग क्वेरी

अब, यदि मेरा आवेदन मार्च 2012 (tbl_012012) से मार्च 2012 (tbl_032012) तक के रिकॉर्ड प्राप्त करना चाहता है, तो BigQuery API स्वचालित रूप से एकल SQL रेंज क्वेरी के माध्यम से वांछित तालिकाओं के माध्यम से ट्रैवर्स करेगा या मुझे एकाधिक SQL क्वेरी लिखनी होगी प्रत्येक क्वेरी परिणाम पुनर्प्राप्त करने के लिए अतिरिक्त एप्लिकेशन कोड के साथ और फिर उन्हें पूरी तरह से एकत्रित करें?

उत्तर

12

एक SQL क्वेरी एकाधिक तालिकाओं का संदर्भ दे सकती है। सभी उल्लिखित तालिकाओं में पूछताछ के लिए प्रत्येक तालिका को FROM खंड में अल्पविराम से अलग करें।

+0

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

+1

BigQuery को कुल प्रश्नों के लिए अनुकूलित किया गया है, क्योंकि एक रिकॉर्ड की तलाश करने वाले प्रश्नों के विपरीत। तो, हां, दुर्भाग्य से इस मामले में आपको हर महीने की मेज के माध्यम से खोजना होगा यदि आप केवल एक रिकॉर्ड की तलाश में हैं जो कि किसी भी तालिका में हो सकता है। –

+0

मेरी मदद करने के लिए धन्यवाद। –

3

यहाँ एक टुकड़ा कई तालिका का एक उदाहरण का प्रदर्शन चयन है:

SELECT trafficSource.medium AS Traffic_Source, COUNT(trafficSource.medium) AS Counts_Source 
FROM [608XXXXX.ga_sessions_20131008], 
[608XXXXX.ga_sessions_20131009], 
[608XXXXX.ga_sessions_20131010], 
[608XXXXX.ga_sessions_20131011], 
[608XXXXX.ga_sessions_20131012], 
[608XXXXX.ga_sessions_20131013], 
[608XXXXX.ga_sessions_20131014], 
[608XXXXX.ga_sessions_20131015], 
GROUP BY Traffic_Source 
ORDER BY Counts_Source DESC 
31

तुम भी एक टेबल वाइल्डकार्ड समारोह का उपयोग कर सकते हैं। यहाँ StandardSQL के लिए docs से एक उदाहरण है:

SELECT 
    name 
FROM 
    mydata.people 
WHERE 
    age >= 35 
    AND 
    (_TABLE_SUFFIX BETWEEN '20140325' AND '20140327') 

और यहाँ LegacySQL के लिए एक समान उदाहरण (docs) है।

SELECT 
    name 
FROM 
    (TABLE_DATE_RANGE([mydata.people], 
       TIMESTAMP('2014-03-25'), 
       TIMESTAMP('2014-03-27'))) 
WHERE 
    age >= 35 

यह टेबल क्वेरी करेगा:

  • mydata.people20140325
  • mydata.people20140326
  • mydata.people20140327

वहाँ docs पर कुछ अन्य विकल्प हैं। मैं उन्हें जांचने की सिफारिश करता हूं।

+0

क्या '201601' के रूप में एक महीने की सीमा भी पूछना संभव है? –

1

2017 अद्यतन:

BigQuery #standardSQL साथ

- आप मानक UNION ALL उपयोग कर सकते हैं या तो एकाधिक तालिकाओं के माध्यम से जाना है, या आप सभी तालिकाओं कि साझा एक ही उपसर्ग मैच के लिए एक * उपयोग कर सकते हैं। * मैचर का उपयोग करते समय, आपको मेटा-कॉलम _TABLE_SUFFIX तक पहुंच होगी - यह जानने के लिए कि पंक्तियां किस तालिका से आई थीं।

SELECT * FROM Roster 
UNION ALL 
SELECT * FROM TeamMascot 
संबंधित मुद्दे