सर्वोत्तम प्रक्रियाएं

यहां दिए गए सबसे सही तरीकों से, आपको अपनी वेबसाइट या ऐप्लिकेशन को बेहतर बनाने निजता का ध्यान रखने वाली और बेहतर परफ़ॉर्म करने वाली क्वेरी. इन सबसे सही तरीकों के लिए नॉइज़ मोड में क्वेरी चलाने की सुविधा का इस्तेमाल करने के लिए, काम करने वाले और काम न करने वाले सेक्शन देखें शोर इंजेक्शन के बारे में क्वेरी पैटर्न.

निजता और डेटा कितना सटीक है

सैंडबॉक्स डेटा पर क्वेरी डेवलप करना

सबसे सही तरीका: प्रोडक्शन डेटा के लिए सिर्फ़ तब क्वेरी करें, जब आप प्रोडक्शन में हों.

क्वेरी बनाते समय सैंडबॉक्स डेटा का इस्तेमाल करें. सैंडबॉक्स डेटा का इस्तेमाल करने वाले जॉब में, आपकी क्वेरी के नतीजों को फ़िल्टर करने के लिए, अलग-अलग जांच के अतिरिक्त अवसर नहीं मिलते. इसके अलावा, निजता जांच में कमी की वजह से, सैंडबॉक्स क्वेरी तेज़ी से काम करती हैं. इससे क्वेरी डेवलपमेंट के दौरान तेज़ी से काम होता है.

अगर आपको अपने असल डेटा (जैसे, मैच टेबल का इस्तेमाल करते समय) पर क्वेरी बनानी हैं, तो पंक्तियों को ओवरलैप करने की संभावना कम करने के लिए, तारीख की सीमाएं और दूसरे पैरामीटर चुनें जिनसे आपकी क्वेरी के हर बार के दौरान ओवरलैप होने की संभावना न हो. अंत में, अपनी क्वेरी को डेटा की मनचाही रेंज पर चलाएं.

पुराने नतीजों पर गौर करें

सबसे सही तरीका: हाल ही में चलाई गई क्वेरी के बीच, नतीजे सेट के ओवरलैप होने की संभावना कम करें.

ध्यान रखें कि क्वेरी के नतीजों के बीच बदलाव की दर का इस बात पर असर पड़ेगा कि निजता जांच की वजह से, बाद में नतीजों को हटाए जाने की कितनी संभावना है. ऐसा हो सकता है कि हाल ही में दिए गए नतीजे के सेट से मिलता-जुलता दूसरा नतीजा सेट न किया जाए.

इसके बजाय, अपनी क्वेरी के मुख्य पैरामीटर, जैसे कि तारीख की सीमाएं या कैंपेन आईडी में बदलाव करें, ताकि ज़रूरत से ज़्यादा ओवरलैप होने की संभावना कम हो सके.

आज के डेटा के लिए क्वेरी न करें

सबसे सही तरीका: जहां खत्म होने की तारीख आज है उसके लिए एक से ज़्यादा क्वेरी न चलाएं.

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

एक जैसे डेटा के लिए ज़रूरत से ज़्यादा क्वेरी न करें

सबसे सही तरीके:

  • शुरू और खत्म होने की ऐसी तारीखें चुनें जो एक-दूसरे से जुड़ी हों.
  • ओवरलैप होने वाली विंडो पर क्वेरी करने के बजाय, डेटा के अलग-अलग सेट पर अपनी क्वेरी चलाएं. इसके बाद, नतीजों को BigQuery में इकट्ठा करें.
  • अपनी क्वेरी को फिर से चलाने के बजाय, सेव किए गए नतीजों का इस्तेमाल करें.
  • तारीख की हर उस सीमा के लिए अस्थायी टेबल बनाएं जिसके लिए आपको क्वेरी करनी है.

Ads Data Hub यह तय करता है कि एक ही डेटा के लिए कितनी बार क्वेरी की जा सकती है. इसलिए, आपको डेटा के किसी हिस्से को ऐक्सेस किए जाने की संख्या को सीमित करने की कोशिश करनी चाहिए.

एक ही क्वेरी में ज़रूरत से ज़्यादा एग्रीगेशन का इस्तेमाल न करें

सबसे सही तरीके:

  • किसी क्वेरी में एग्रीगेशन की संख्या को कम करें
  • जब भी हो सके, एग्रीगेशन को जोड़ने के लिए क्वेरी को फिर से लिखें

Ads Data Hub, सबक्वेरी में इस्तेमाल किए जा सकने वाले क्रॉस-यूज़र एग्रीगेशन की संख्या को 100 तक सीमित करता है. इसलिए, हम ऐसी क्वेरी लिखने का सुझाव देते हैं जिनमें ज़्यादा ग्रुप वाली कुंजियों और आसान एग्रीगेशन वाली लाइनें हों. इसमें, बड़े ग्रुप वाली कुंजियों और कॉम्प्लेक्स एग्रीगेशन की सुविधा वाले ज़्यादा कॉलम नहीं होते. इन पैटर्न से बचना चाहिए:

SELECT
  COUNTIF(field_1 = a_1 AND field_2 = b_1) AS cnt_1,
  COUNTIF(field_1 = a_2 AND field_2 = b_2) AS cnt_2
FROM
  table

फ़ील्ड के एक जैसे सेट के हिसाब से इवेंट की गिनती करने वाली क्वेरी को, ग्रुप BY स्टेटमेंट का इस्तेमाल करके फिर से लिखा जाना चाहिए.

SELECT
  field_1,
  field_2,
  COUNT(1) AS cnt
FROM
  table
GROUP BY
  1, 2

BigQuery में नतीजे को एक ही तरह से एग्रीगेट किया जा सकता है.

ऐसी क्वेरी जो किसी अरे से कॉलम बनाती हैं और बाद में उन्हें एग्रीगेट करती हैं, इन चरणों को मर्ज करने के लिए उन्हें फिर से लिखा जाना चाहिए.

SELECT
  COUNTIF(a_1) AS cnt_1,
  COUNTIF(a_2) AS cnt_2
FROM
  (SELECT
     1 IN UNNEST(field) AS a_1,
     2 IN UNNEST(field) AS a_2,
   FROM
     table)

पिछली क्वेरी को इस तरह दोबारा लिखा जा सकता है:

SELECT f, COUNT(1) FROM table, UNNEST(field) AS f GROUP BY 1

ऐसी क्वेरी जो अलग-अलग एग्रीगेशन में फ़ील्ड के अलग-अलग कॉम्बिनेशन का इस्तेमाल करती हैं उन्हें ज़्यादा फ़ोकस की गई क्वेरी में फिर से लिखा जा सकता है.

SELECT
  COUNTIF(field_1 = a_1) AS cnt_a_1,
  COUNTIF(field_1 = b_1) AS cnt_b_1,
  COUNTIF(field_2 = a_2) AS cnt_a_2,
  COUNTIF(field_2 = b_2) AS cnt_b_2,
FROM table

पिछली क्वेरी को इन हिस्सों में बांटा जा सकता है:

SELECT
  field_1, COUNT(*) AS cnt
FROM table
GROUP BY 1

और

SELECT
  field_2, COUNT(*) AS cnt
FROM table
GROUP BY 1

इन नतीजों को अलग-अलग क्वेरी में बांटा जा सकता है, टेबल बनाई जा सकती हैं और एक ही क्वेरी में टेबल को जोड़ा जा सकता है. इसके अलावा, अगर स्कीमा साथ में काम करते हैं, तो उन्हें UNION में जोड़ा जा सकता है.

जॉइन को ऑप्टिमाइज़ करना और समझना

सबसे सही तरीका: क्लिक या इंप्रेशन में मिले कन्वर्ज़न को जोड़ने के लिए, INNER JOIN के बजाय LEFT JOIN का इस्तेमाल करें.

सभी इंप्रेशन, क्लिक या कन्वर्ज़न से जुड़े नहीं होते. इसलिए, अगर इंप्रेशन पर क्लिक या कन्वर्ज़न को INNER JOIN किया जाता है, तो जो इंप्रेशन क्लिक या कन्वर्ज़न से नहीं जुड़े हैं उन्हें आपके नतीजों से फ़िल्टर कर दिया जाएगा.

वेन डायग्राम के ज़रिए कई जॉइन टाइप दिखाने वाली इमेज

BigQuery में कुछ फ़ाइनल नतीजों में शामिल हों

सबसे सही तरीका: Ads Data Hub की उन क्वेरी से बचें जो एग्रीगेट किए गए नतीजों को जोड़ती हैं. इसके बजाय, दो अलग-अलग क्वेरी लिखें और BigQuery में नतीजों को जोड़ें.

एग्रीगेशन की ज़रूरी शर्तों को पूरा न करने वाली लाइनें, आपके नतीजों से फ़िल्टर कर दी जाती हैं. इसलिए, अगर आपकी क्वेरी ज़रूरत के मुताबिक एग्रीगेट की गई लाइन से जुड़ती है, तो नतीजे वाली लाइन फ़िल्टर हो जाएगी. इसके अलावा, Ads Data Hub में एक से ज़्यादा एग्रीगेशन वाली क्वेरी कम परफ़ॉर्म करती हैं.

BigQuery में, Ads Data Hub से कई एग्रीगेशन क्वेरी के ज़रिए, नतीजों में शामिल हुआ जा सकता है. सामान्य क्वेरी का इस्तेमाल करके बनाए गए नतीजों के लिए फ़ाइनल स्कीमा एक जैसे होंगे.

नीचे दी गई क्वेरी, अलग-अलग Ads Data Hub नतीजों (campaign_data_123 और campaign_data_456) को लेकर उन्हें BigQuery में जोड़ती है:

SELECT t1.campaign_id, t1.city, t1.X, t2.Y
FROM `campaign_data_123` AS t1
FULL JOIN `campaign_data_456` AS t2
USING (campaign_id, city)

फ़िल्टर की गई लाइन की खास जानकारी का इस्तेमाल करना

सबसे सही तरीका: अपनी क्वेरी में लाइन की फ़िल्टर की गई खास जानकारी जोड़ें.

फ़िल्टर की गई लाइन की खास जानकारी में ऐसे डेटा का हिसाब होता है जिसे निजता से जुड़ी जांच की वजह से फ़िल्टर किया गया था. फ़िल्टर की गई पंक्तियों के डेटा को जोड़कर, कैच-ऑल पंक्ति में जोड़ दिया जाता है. फ़िल्टर किए गए डेटा का ज़्यादा विश्लेषण नहीं किया जा सकता. हालांकि, इससे यह जानकारी मिलती है कि नतीजों से कितना डेटा फ़िल्टर किया गया.

ज़ीरो यूज़र आईडी के लिए खाता

सबसे सही तरीका: नतीजों में शून्य यूज़र आईडी का इस्तेमाल करें.

किसी असली उपयोगकर्ता के आईडी को कई वजहों से 0 पर सेट किया जा सकता है. इनमें दिलचस्पी के मुताबिक विज्ञापन, नियमों के पालन की वजहों वगैरह से ऑप्ट आउट करना शामिल है. इसलिए, एक से ज़्यादा उपयोगकर्ताओं से मिलने वाले डेटा को 0 के लिए सेट किया जाएगा.user_id

अगर आपको कुल इंप्रेशन या क्लिक जैसे डेटा को समझना है, तो आपको ये इवेंट शामिल करने चाहिए. हालांकि, यह डेटा ग्राहकों के बारे में अहम जानकारी पाने के लिए फ़ायदेमंद नहीं होगा. अगर आप इस तरह का विश्लेषण कर रहे हैं, तो आपको इसे फ़िल्टर कर लेना चाहिए.

आप अपनी क्वेरी में WHERE user_id != "0" जोड़कर, इस डेटा को अपने नतीजों से बाहर रख सकते हैं.


परफ़ॉर्मेंस

जानकारी को फिर से एग्रीगेट न करें

सबसे सही तरीका: उपयोगकर्ताओं को अलग-अलग लेयर पर एग्रीगेशन इस्तेमाल करने से बचें.

जिन क्वेरी में ऐसे नतीजे शामिल होते हैं जिन्हें पहले ही एग्रीगेट कर लिया जाता है, जैसे कि एक से ज़्यादा GROUP BY वाली क्वेरी या नेस्ट किए गए एग्रीगेशन वाली क्वेरी को प्रोसेस करने के लिए, ज़्यादा संसाधनों की ज़रूरत होती है.

अक्सर, एग्रीगेशन की कई लेयर वाली क्वेरी को बांटा जा सकता है, जिससे परफ़ॉर्मेंस बेहतर होती है. प्रोसेस करते समय, आपको इवेंट या उपयोगकर्ता लेवल पर लाइनें रखने की कोशिश करनी चाहिए और फिर उसे सिंगल एग्रीगेशन के साथ जोड़ना चाहिए.

इन पैटर्न से बचना चाहिए:

SELECT SUM(count)
FROM
  (SELECT campaign_id, COUNT(0) AS count FROM ... GROUP BY 1)

एग्रीगेशन की एक से ज़्यादा लेयर का इस्तेमाल करने वाली क्वेरी को फिर से लिखा जाना चाहिए. ऐसा एग्रीगेशन की एक लेयर का इस्तेमाल करने के लिए किया जाना चाहिए.

(SELECT ... GROUP BY ... )
JOIN USING (...)
(SELECT ... GROUP BY ... )

उन क्वेरी को अलग-अलग किया जाना चाहिए जिन्हें आसानी से अलग-अलग किया जा सकता हो. BigQuery में नतीजे जोड़े जा सकते हैं.

BigQuery के लिए ऑप्टिमाइज़ करें

आम तौर पर, कम नतीजे देने वाली क्वेरी बेहतर परफ़ॉर्म करती हैं. क्वेरी की परफ़ॉर्मेंस का आकलन करते समय, इन बातों के आधार पर काम की ज़रूरत होगी:

अगर क्वेरी एक्ज़ीक्यूशन के लिए, सेवा स्तर के समझौते की शर्तें पूरी नहीं हो पा रही हैं या संसाधन खत्म होने या टाइम आउट होने की वजह से गड़बड़ियां हो रही हैं, तो इन बातों को ध्यान में रखें:

  • फिर से गणना करने के बजाय पिछली क्वेरी के नतीजों का इस्तेमाल करना. उदाहरण के लिए, हफ़्ते के हिसाब से आपका कुल योग, BigQuery में मौजूद सात दिनों की एग्रीगेट क्वेरी का कुल योग हो सकता है.
  • क्वेरी को लॉजिकल सब-क्वेरी में बांटना (जैसे, एक से ज़्यादा जॉइन को एक से ज़्यादा क्वेरी में बांटना) या प्रोसेस किए जा रहे डेटा के सेट को सीमित करना. BigQuery में, अलग-अलग जॉब के नतीजों को एक डेटासेट में जोड़ा जा सकता है. हालांकि, इससे संसाधन खत्म होने में मदद मिल सकती है, लेकिन इससे आपकी क्वेरी धीमी हो सकती है.
  • अगर BigQuery में आपको ऐसे रिसॉर्स का सामना करना पड़ रहा है जिनसे ज़्यादा गड़बड़ियां मिल रही हैं, तो अपनी क्वेरी को अलग-अलग BigQuery क्वेरी में बांटने के लिए, अस्थायी टेबल का इस्तेमाल करें.
  • एक ही क्वेरी में कम टेबल का रेफ़रंस देना, क्योंकि इसमें बहुत ज़्यादा मेमोरी इस्तेमाल होती है और इसकी वजह से आपकी क्वेरी फ़ेल हो सकती है.
  • अपनी क्वेरी को इस तरह फिर से लिखना कि वे कम उपयोगकर्ता टेबल में शामिल हों.
  • एक ही टेबल में वापस शामिल होने से बचने के लिए, अपनी क्वेरी को फिर से लिखें.

क्वेरी सलाहकार

अगर आपका एसक्यूएल मान्य है, लेकिन ज़रूरत से ज़्यादा फ़िल्टर करने की सुविधा को ट्रिगर कर सकता है, तो query सलाहकार क्वेरी तैयार करने की प्रक्रिया के दौरान कार्रवाई करने लायक सलाह दिखाता है, ताकि इससे आपको अनचाहे नतीजों से बचने में मदद मिलती है.

ट्रिगर में ये पैटर्न शामिल होते हैं:

क्वेरी सलाहकार का इस्तेमाल करने के लिए:

  • यूज़र इंटरफ़ेस (यूआई). सुझाव, ऊपर क्वेरी एडिटर में दिखेंगे क्वेरी का टेक्स्ट.
  • एपीआई. customers.analysisQueries.validate तरीके का इस्तेमाल करें.