SQL बड़ी क्वेरी स्क्रिप्ट समस्या
क्या आप मेरी मदद कर सकते हैं, मुझे समझ नहीं आ रहा है कि मेरे व्हाट्सएप में क्या गलत है। मैंने कई चीजों की कोशिश की, लेकिन सही निष्कर्ष पर नहीं पहुंच सका।
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
यहाँ छवि विवरण दर्ज करें
जवाब
divisionएक स्तंभ उर्फ में परिभाषित किया गया प्रतीत होता है select।
यह SQL में अनुमति नहीं है (सामान्य तौर पर, सिर्फ BigQuery नहीं)। परिभाषित करने के लिए एक सबक्वेरी या CTE का उपयोग करें division। फिर बाहरी क्वेरी में फ़िल्टर करें।
आप एक 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। यह तर्क को नहीं बदलता है, लेकिन मेरी राय में इरादे को स्पष्ट करता है।