SQL बड़ी क्वेरी स्क्रिप्ट समस्या

Oct 20 2020

क्या आप मेरी मदद कर सकते हैं, मुझे समझ नहीं आ रहा है कि मेरे व्हाट्सएप में क्या गलत है। मैंने कई चीजों की कोशिश की, लेकिन सही निष्कर्ष पर नहीं पहुंच सका।

SELECT 
CONCAT(fullvisitorId, "-", CAST(visitstarttime AS STRING)) as session,
RANK() OVER(PARTITION BY CONCAT(fullvisitorId, "-", CAST(visitstarttime AS STRING)) ORDER BY hitNumber ASC) AS Rank, 
(SELECT MAX(cd.value) FROM hits.customDimensions as cd where cd.index = 12) as cd1,
(SELECT cd.value FROM hits.customDimensions as cd where cd.index=29) as division,
hits.hitnumber

FROM 
  `dl-training-bigquery.NDA_CHAN*******51.ga_sessions_20191202` as session,
  unnest(hits) as hits
  
WHERE division = 'fsh'
ORDER BY hitnumber ASC

यहाँ छवि विवरण दर्ज करें

जवाब

GordonLinoff Oct 20 2020 at 03:37

divisionएक स्तंभ उर्फ ​​में परिभाषित किया गया प्रतीत होता है select।

यह SQL में अनुमति नहीं है (सामान्य तौर पर, सिर्फ BigQuery नहीं)। परिभाषित करने के लिए एक सबक्वेरी या CTE का उपयोग करें division। फिर बाहरी क्वेरी में फ़िल्टर करें।

GMB Oct 20 2020 at 03:40

आप एक SELECTही स्कोप में क्लॉज में परिभाषित कॉलम का पुन: उपयोग नहीं कर सकते ( ORDER BYक्लॉज को छोड़कर )। यहाँ, सरलतम FROMउपवाक्य संभवतः उपवाक्य को खण्ड में ले जाना है:

SELECT 
    CONCAT(fullvisitorId, "-", CAST(visitstarttime AS STRING)) as session,
    RANK() OVER(PARTITION BY fullvisitorId, visitstarttime ORDER BY hitNumber) as rank, 
    dim1.cd1,
    dim2.division,
    hits.hitnumber
FROM `dl-training-bigquery.NDA_CHAN*******51.ga_sessions_20191202` as session
CROSS JOIN unnest(hits) as hits
CROSS JOIN (SELECT MAX(cd.value) as cd1 FROM hits.customDimensions as cd where cd.index = 12) as dim1
CROSS JOIN (SELECT cd.value as division FROM hits.customDimensions as cd where cd.index = 29) as dim2  
WHERE dim2.division = 'fsh'
ORDER BY hitnumber ASC

ध्यान दें कि मैंने PARTITION BYविंडो फ़ंक्शन के क्लॉज़ को सरल किया है : मुझे नहीं लगता कि आपको यहां स्ट्रिंग कॉन्सेप्टन की आवश्यकता है, आप बस दो-स्तरीय विभाजन का उपयोग कर सकते हैं।

मैंने स्पष्ट जोड़ में निहित जोड़ भी बदले cross join। यह तर्क को नहीं बदलता है, लेकिन मेरी राय में इरादे को स्पष्ट करता है।