नॉइज़ इंजेक्शन

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

नॉइज़ इंजेक्शन इस्तेमाल करने के फ़ायदे जानें

अंतर की जांच नहीं की जा सकती: गै़र-ज़रूरी डेटा का इस्तेमाल करके क्वेरी करने पर, Ads Data Hub, लाइनों को फ़िल्टर नहीं करता, क्योंकि वे पिछले नतीजों के सेट से मिलते-जुलते होते हैं. इसका मतलब है कि आपको उपयोगकर्ता की निजता को सुरक्षित रखते हुए, अब भी डेटा की पूरी जानकारी मिल सकती है.

समस्याओं को आसानी से हल किया जा सकता है: सिर्फ़ एग्रीगेशन की ज़रूरी शर्तों की वजह से लाइन को हटाया जाता है. इससे क्वेरी को हल करना और उसे ऑप्टिमाइज़ करना आसान हो जाता है.

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

नतीजा सटीक है: काम पूरा होने पर, गै़र-ज़रूरी डेटा के साथ डेटा का कुल प्रतिशत दिखता है.

जानें कि शोर का असर निजता से जुड़ी ज़रूरी शर्तों पर कैसे पड़ता है

अंतर की जांच: नॉइज़ इंजेक्शन, Ads Data Hub में अंतर की मौजूदा जांचों पर भरोसा नहीं करता. नॉइज़ इंजेक्शन का इस्तेमाल करते समय, अंतर की जांच की सुविधा बंद हो जाती है.

एग्रीगेशन की ज़रूरी शर्त: नॉइज़ इंजेक्शन से, इंप्रेशन का वह डेटा मिलता है जिसे करीब 20 या उससे ज़्यादा यूनीक उपयोगकर्ताओं ने दिखाया है. साथ ही, क्लिक या कन्वर्ज़न का वह डेटा भी मिलता है जिसे करीब 10 या उससे ज़्यादा यूनीक उपयोगकर्ताओं ने दिखाया है.

स्टैटिक जांच: कोई असर नहीं पड़ता.

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

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

निजता से जुड़ी जांच के बारे में ज़्यादा जानें.

यह समझना कि नॉइज़ इंजेक्शन से नतीजों पर क्या असर पड़ता है

Ads Data Hub, जानकारी ज़ाहिर करने से जुड़े जोखिम को कम करने के लिए नॉइज़ इंजेक्ट करता है. इससे किसी व्यक्ति को किसी एक उपयोगकर्ता की जानकारी हासिल करने का जोखिम रहता है. यह उपयोगिता के साथ निजता के बीच संतुलन बनाता है.

Ads Data Hub में नॉइज़ इंजेक्शन से क्वेरी के नतीजों में इस तरह बदलाव होता है:

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

आखिरी नतीजा एक डेटासेट है, जहां हर पंक्ति में शोर वाले एग्रीगेट नतीजे होते हैं और छोटे ग्रुप हटा दिए जाते हैं. यह लौटाए गए नतीजों पर, हर उपयोगकर्ता के असर को मास्क करता है.

एग्रीगेशन क्लैम्पिंग के बारे में जानकारी

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

इंप्लिसिट क्लैंपिंग

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

जब किसी एग्रीगेशन को बहुत कम उपयोगकर्ताओं से डेटा मिलता है, तो इंप्लिसिट क्लैम्पिंग फ़ेल हो सकती है—उदाहरण के लिए, कभी-कभार होने वाली COUNTIF() कॉल. इन मामलों में NULL नतीजे दिखते हैं. यह भी ध्यान रखें कि COUNT(DISTINCT user_id) अपने-आप, 0 और 1 की सीमा के साथ साफ़ तौर पर किसी क्लैंपिंग का इस्तेमाल करता है.

एक्सप्लिसिट क्लैंपिंग

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

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

साफ़ तौर पर क्लैंपिंग का इस्तेमाल करने के लिए, निचली और ऊपरी सीमा को दिखाने वाले पूर्णांक जोड़कर, काम करने वाले हर एग्रीगेट फ़ंक्शन के लिए बाउंड सेट करें. उदाहरण के लिए:

SELECT
campaign_name,
-- Set lower and upper bounds to 0 and 1, respectively
ADH.ANON_COUNT(*, contribution_bounds_per_group => (0,1))
FROM data
GROUP BY 1

नॉइज़ इंजेक्शन का इस्तेमाल करके क्वेरी चलाएं

  1. क्वेरी लिखें या कोई मौजूदा क्वेरी खोलें. कौनसे एग्रीगेट फ़ंक्शन इस्तेमाल किए जा सकते हैं, यह जानने के लिए काम करने वाले फ़ंक्शन देखें.
  2. क्वेरी एडिटर में, नए काम की जानकारी डालने के लिए Run पर क्लिक करें.
  3. निजता सेटिंग के टॉगल पर क्लिक करके, शोर की सुविधा का इस्तेमाल करें पोज़िशन पर क्लिक करें.
  4. क्वेरी करें.
  5. बढ़े हुए शोर की समीक्षा करें.
  6. ज़रूरी नहीं: शोर के असर को कम करने के लिए, क्वेरी करें.

शोर के असर की समीक्षा करें

क्वेरी पूरी हो जाने के बाद, Ads Data Hub नतीजे की विश्वसनीयता दिखाता है. यह नतीजे इस आधार पर दिखाए जाते हैं कि आउटपुट में कितनी सेल में अनुमानित शोर है. अगर ग़ैर-ज़रूरी आवाज़ों का स्केल, सेल में नतीजे के 5% से ज़्यादा होता है, तो नतीजे वाली टेबल में मौजूद वैल्यू पर सबसे ज़्यादा असर माना जाता है. नीचे दी गई टेबल में, अलग-अलग तरह के असर देखें.

जिन आउटपुट डेटा सेट पर असर पड़ा है उनके लिए, 'जानकारी' टैब में सबसे ज़्यादा से लेकर सबसे कम असर वाले 10 कॉलम की सूची होती है. साथ ही, नॉइज़ में उनका योगदान भी होता है. यह नॉइज़ की अनुमानित मात्रा का ब्रेकडाउन होता है.

वह डेटा जिसमें कितना शोर हो सकता है इंंडिकेटर का रंग असर
95% से ज़्यादा हरा कम असर
85% से 95% पीला मध्यम प्रभाव
75% से 85% Orange काफ़ी असरदार
75% से कम लाल बहुत ज़्यादा असर

शोर के असर के बारे में ज़्यादा जानकारी देखने के लिए:

  1. रिपोर्ट पर क्लिक करें.
  2. सूची से कोई रिपोर्ट चुनें. निजता की खास जानकारी देने वाला टूलटिप
  3. ज़्यादा जानकारी देखने के लिए, नौकरी > जानकारी पर क्लिक करें
  4. नौकरी की जानकारी में निजता से जुड़े मैसेज देखें. नतीजे, सूची में दी गई किसी एक कैटगरी में आते हैं.
  5. ज़रूरत पड़ने पर, नतीजे को बेहतर बनाने के लिए अपनी क्वेरी में बदलाव करें.

क्वेरी अपनाएं

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

यहां सामान्य दिशा-निर्देश दिए गए हैं:

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

इस्तेमाल किए जा सकने वाले एग्रीगेट फ़ंक्शन

नीचे दिए गए एग्रीगेट फ़ंक्शन, गै़र-ज़रूरी डेटा के साथ काम करते हैं:

  • SUM(...)
  • COUNT(*)
  • COUNT(...)
  • COUNTIF(...)
  • COUNT(DISTINCT user_id)
  • APPROX_COUNT_DISTINCT(user_id)
  • AVG(...)

DISTINCT कीवर्ड सिर्फ़ COUNT फ़ंक्शन के साथ काम करता है. इसे सिर्फ़ तब इस्तेमाल किया जा सकता है, जब Ads Data Hub टेबल से user_id कॉलम के सीधे रेफ़रंस के साथ इस्तेमाल किया जाता हो या ऐसा एक्सप्रेशन जो user_id या NULL दिखाता हो, जैसे कि COUNT(DISTINCT IF(..., user_id, NULL)).

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

  • LOGICAL_OR(...). इनकी जगह इस्तेमाल करने के लिए सुझाया गया: COUNT(DISTINCT IF(..., user_id, NULL)) > 0
  • LOGICAL_AND(...). इनकी जगह इस्तेमाल करने के लिए सुझाया गया: COUNT(DISTINCT IF(NOT ..., user_id, NULL)) <= 0

पूर्णांक के तौर पर मिले नतीजों के बारे में जानकारी

हालांकि, Ads Data Hub इन एग्रीगेशन फ़ंक्शन के लिए अपने-आप नॉइज़ इंजेक्ट कर देगा, लेकिन फ़ंक्शन के सिग्नेचर में कोई बदलाव नहीं होता. INT64 के COUNT या SUM जैसे फ़ंक्शन, INT64 दिखाते हैं. इसलिए, ग़ैर-ज़रूरी आवाज़ों वाले नतीजे के किसी भी दशमलव वाले हिस्से को पूर्णांक में दिखाया जाता है. आम तौर पर, नतीजे के साइज़ और ग़ैर-ज़रूरी आवाज़ों के हिसाब से इसकी वैल्यू न के बराबर होती है.

अगर आपको अपने नतीजे में दशमलव की जानकारी का स्तर जानना है, तो ऐसे लिखने से बचें जो INT64 दिखाता है. उदाहरण के लिए, FLOAT64 में इनपुट कास्ट करने के लिए SUM का इस्तेमाल करें.


इस्तेमाल किए जा सकने वाले क्वेरी पैटर्न

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

इस सेक्शन में उन क्वेरी पैटर्न के बारे में बताया गया है जो नॉइज़ इंजेक्शन का इस्तेमाल करके क्वेरी करते समय काम करते हैं.

उपयोगकर्ता-लेवल के एग्रीगेट

बिना पाबंदी वाले उपयोगकर्ता-लेवल के एग्रीगेट उसी तरह काम करते हैं जिस तरह वे अंतर जांचने वाले मोड में होते हैं. शोर को सिर्फ़ ऐसे एग्रीगेशन में इंजेक्ट किया जाता है जिसमें कई उपयोगकर्ताओं का डेटा शामिल हो. ऐसे एग्रीगेशन जो साफ़ तौर पर user_id के हिसाब से ग्रुप करते हैं या विश्लेषण फ़ंक्शन जिन्हें user_id से बांटा जाता है उनमें न तो कोई ग़ैर-ज़रूरी डेटा इकट्ठा होता है और न ही किसी भी फ़ंक्शन की अनुमति होती है. उपयोगकर्ता-लेवल के एग्रीगेशन को user_id के हिसाब से ग्रुप नहीं किया जाता. उदाहरण के लिए, GROUP BY impression_id को क्रॉस-उपयोगकर्ता एग्रीगेशन माना जाता है. इस वजह से, ग़ैर-ज़रूरी आवाज़ों को जोड़ा जाता है.

एक्सटर्नल_कुकी के हिसाब से डेटा को ग्रुप में रखना काफ़ी नहीं है. एक्सटर्नल_cookie का इस्तेमाल, ग्राहक के मालिकाना हक वाली टेबल के साथ *_match (*_match) टेबल को जोड़ने के लिए किया जा सकता है. हालांकि, किसी भी एक उपयोगकर्ता के एग्रीगेशन को सिर्फ़ एक्सटर्नल कुकी कॉलम के साथ-साथ, user_id कॉलम के हिसाब से ग्रुप में नहीं रखना चाहिए.

एग्रीगेट फ़ंक्शन का उदाहरण:

WITH user_paths AS (
  # Grouping by user_id, no noise needed, all functions allowed
  SELECT user_id, STRING_AGG(campaign_id, ">" ORDER BY query_id.time_usec) AS path
  FROM adh.google_ads_impressions
  GROUP BY 1
)
# Noise applied here to num_users
SELECT path, COUNT(*) AS num_users
FROM user_paths
GROUP BY 1;

विश्लेषण करने वाले फ़ंक्शन का उदाहरण:

WITH events AS (
  # Partitioning by user_id, no noise needed, all functions allowed
  SELECT
    campaign_id,
    ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY query_id.time_usec) AS index
  FROM adh.google_ads_impressions
)
# Noise applied here to first_impressions
SELECT campaign_id, COUNT(*) AS first_impressions
FROM events
WHERE index = 1
GROUP BY 1;

पैरलल एग्रीगेट

हर क्रॉस-यूज़र एग्रीगेशन के हिसाब से शोर अलग-अलग होता है. ऐसे कई एग्रीगेशन को एक ही स्टेटमेंट में चलाया जा सकता है, जिसमें JOIN या UNION का इस्तेमाल करके, नतीजों को एक टेबल में मिलाया जाता है.

उदाहरण:

WITH result_1 AS (
  # Noise applied here to num_impressions
  SELECT campaign_id, COUNT(*) AS num_impressions
  FROM adh.google_ads_impressions
  GROUP BY 1
), result_2 AS (
  # Noise applied here to num_clicks
  SELECT campaign_id, COUNT(*) AS num_clicks
  FROM adh.google_ads_clicks
  GROUP BY 1
)
SELECT * FROM result_1 JOIN result_2 USING(campaign_id)

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

एग्रीगेट नहीं किए गए डेटा से मिला कुल डेटा

Ads Data Hub सिर्फ़ उन विश्लेषण विंडो के साथ काम करता है जिन्हें user_id के हिसाब से बांटा जाता है. यह एक आम तरीका है. इन नतीजों को फिर से एग्रीगेट करने से पहले अलग-अलग एग्रीगेट किया जाता है और खुद में शामिल किया जाता है. ये क्वेरी, ग़ैर-ज़रूरी आवाज़ें कम करने वाले मोड में काम करती हैं. ये अक्सर अंतर जांचने वाले मोड में बेहतर परफ़ॉर्म करती हैं. ऐसा इसलिए किया जाता है, क्योंकि निजता से जुड़ी ज़रूरी शर्तों को पहले ही पूरा कर लिया जाता है.

उदाहरण:

WITH campaign_totals AS (
  # Noise applied here to campaign_imps
  SELECT campaign_id, COUNT(*) AS campaign_imps
  FROM adh.google_ads_impressions
  GROUP BY 1
)
# Noise applied here to imps
SELECT campaign_id, demographics, campaign_imps, COUNT(*) AS imps
FROM adh.google_ads_impressions JOIN campaign_totals USING(campaign_id)
GROUP BY 1,2,3

शोर मोड की मदद से, सभी नतीजों को एक साथ दिखाने पर पाबंदी है, जैसे कि AVG(campaign_imps).


काम न करने वाले क्वेरी पैटर्न

इस सेक्शन में उन क्वेरी पैटर्न के बारे में बताया गया है जो नॉइज़ इंजेक्शन का इस्तेमाल करके क्वेरी करते समय काम नहीं करते.

आज-कल शामिल की जाने वाली क्वेरी

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

दोहराए गए नतीजे

शोर मोड में, Ads Data Hub यह तय करता है कि एक ही एग्रीगेशन को कितनी बार दोहराया जा सकता है. अगर इन सीमाओं तक पहुंच जाती है, तो ग़ैर-ज़रूरी आवाज़ें कम करने वाले मोड की क्वेरी, डेटासेट में अक्सर पूछी जाने वाली तारीखों को ऐक्सेस नहीं कर पाएंगी. ऐसा कैसे हो सकता है, इसके उदाहरण नीचे दिए गए हैं.

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

ध्यान दें कि अगर दो जॉब में तारीख की सीमाओं के ओवरलैप होने की क्वेरी की जा रही है, तो एक ही उपयोगकर्ता के लिए एक ही कंप्यूटेशन करने पर, वे दोहराव दिखा सकते हैं. उदाहरण के लिए, नीचे दी गई क्वेरी, तारीख की सीमाओं के ओवरलैप होने पर कई बार दोहराई गई है, क्योंकि यह तारीख के हिसाब से बांटी गई है:

SELECT DATE(TIMESTAMP_MICROS(event.event_time)) AS date,
COUNT(*) AS cnt
FROM adh.cm_dt_clicks
GROUP BY 1

इस मामले में, आपको तारीख के अलग-अलग सेगमेंट पर क्वेरी चलाना चाहिए.

दोहराव का एक और उदाहरण तब होता है, जब डेटा कुछ हद तक अलग होता है. ओवरलैप होने वाली तारीखों पर किए जाने पर, इस क्वेरी में दोहराव पैदा होते हैं. जहां दोनों जॉब में कैंपेन के पूरे लाइफ़टाइम को कवर किया जाता है:

SELECT campaign_id, COUNT(*) AS cnt
FROM adh.google_ads_impressions
GROUP BY 1

ऐसे में, आपको इस क्वेरी को सिर्फ़ एक बार चलाना चाहिए, क्योंकि इससे नतीजा नहीं बदलता.

एग्रीगेशन का दोहराव तब होता है, जब किसी क्वेरी में एक ही एग्रीगेशन को कई बार दोहराया जाता है:

SELECT COUNT(*) AS cnt1, COUNT(*) AS cnt2
FROM table

इस स्थिति में, आपको दोहरावों में से किसी एक को हटाना चाहिए.

ध्यान दें कि भले ही एग्रीगेशन के वाक्य अलग-अलग हों, लेकिन एक ही वैल्यू की गणना करें, लेकिन इसे दोहराव के रूप में गिना जाएगा. दूसरे शब्दों में, अगर key की कुछ वैल्यू वाले सभी उपयोगकर्ताओं के लिए, condition1 और condition2 की वैल्यू एक जैसी हैं, तो इस क्वेरी में दोहराव होगा:

SELECT key, COUNTIF(condition1) AS cnt1, COUNTIF(condition2) AS cnt2
FROM table
GROUP BY key

अगर आपकी ऐसी शर्तें हैं जो उपयोगकर्ताओं के कुछ ग्रुप के लिए काफ़ी मिलती-जुलती हैं, तो क्वेरी में सिर्फ़ एक COUNT शामिल करें.

लाइन डुप्लीकेशन तब होता है, जब Ads Data Hub टेबल को BigQuery टेबल से इस तरह जोड़ा जाता है कि Ads Data Hub टेबल की हर लाइन, BigQuery टेबल की कई लाइनों से मैच करती हो. उदाहरण के लिए, अगर bq_table में एक ही कैंपेन आईडी वाली कई लाइनें हैं, तो नीचे दी गई क्वेरी में दोहराव आता है:

SELECT r.campaign_id, COUNT(*) AS cnt
FROM adh_table
INNER JOIN bq_table ON l.campaign_id = r.campaign_id

इस मामले में, आपको क्वेरी का स्ट्रक्चर फिर से तैयार करना चाहिए, ताकि bq_table की हर जॉइन की वैल्यू (इस मामले में campaign_id) के लिए, सिर्फ़ एक लाइन हो.

ध्यान दें कि अगर ज़्यादातर उपयोगकर्ताओं के पास वैल्यू का कलेक्शन एक जैसा है, तो Ads Data Hub टेबल से किसी अरे को अननेस्ट करने पर भी वही असर पड़ सकता है:

SELECT in_market_id, COUNT(*)
FROM adh.dv360_youtube_impressions,
UNNEST(in_market) AS in_market_id
GROUP BY 1

क्वेरी करने के अन्य सबसे सही तरीकों के बारे में जानें.

डायरेक्ट एग्रीगेशन

क्वेरी में क्रॉस-यूज़र एग्रीगेशन की पहली लेयर पर नॉइज़ लागू किया जाता है. एग्रीगेशन की कई लेयर वाली क्वेरी ब्लॉक कर दी जाती हैं:

WITH layer_1 AS (
  # Noise applied here to partial_result
  SELECT campaign_id, demographics, location, COUNT(*) AS partial_result
  FROM adh.google_ads_impressions
  GROUP BY 1,2,3
  HAVING partial_result > 5
)
# Reaggregation of partial_result with no user-level data, will be rejected
SELECT campaign_id, SUM(partial_result) AS final_result
FROM layer_1
GROUP BY 1

शोर से सबसे अच्छे नतीजे पाने के लिए, एक ही एग्रीगेशन में सभी क्रॉस-यूज़र ऑपरेशन की गणना करें. उदाहरण के लिए, इंटरमीडिएट की संख्या के SUM के बजाय SUM इवेंट लें. नॉइज़ एग्रीगेट को फिर से एग्रीगेट करने के लिए, क्वेरी को फिर से लिखा जा सकता है, लेकिन फ़ाइनल एग्रीगेट में ज़्यादा नॉइज़ हो सकता है.

अगर आपको ऐसा नहीं करना है, तो सीधे पहली लेयर से नतीजों को एक्सपोर्ट करने के लिए, अपनी क्वेरी को फिर से लिखा जा सकता है. स्क्रिप्ट के नतीजों में बदलाव किए बिना एक ही काम में ऐसा करने के लिए, OPTIONS(privacy_checked_export=true) सिंटैक्स के साथ एक अस्थायी टेबल (या अपने BigQuery प्रोजेक्ट में एक्सपोर्ट की गई टेबल) बनाएं. उदाहरण के लिए:

CREATE TEMP TABLE layer_1 OPTIONS(privacy_checked_export=true) AS (
  # Noise applied here to partial_result
  SELECT campaign_id, demographics, location, COUNT(*) AS partial_result
  FROM adh.google_ads_impressions
  GROUP BY 1,2,3
  HAVING partial_result > 5
);
# Reaggregation of privacy checked data, no noise needed
SELECT campaign_id, SUM(partial_result) AS final_result
FROM layer_1
GROUP BY 1

टेंपरेचर टेबल के बारे में ज़्यादा जानें.

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

अलग किए गए यूज़र आईडी

शोर मोड में की जाने वाली क्वेरी में अलग-अलग उपयोगकर्ताओं के डेटा को एक ही पंक्ति में नहीं रखा जाना चाहिए. हालांकि, डेटा को गै़र-ज़रूरी डेटा के साथ एग्रीगेशन के तौर पर शामिल किया जाना चाहिए. इस वजह से, एग्रीगेट नहीं किए गए Ads Data Hub के डेटा को user_id कॉलम में साफ़ तौर पर जोड़ना ज़रूरी है.

यह क्वेरी साफ़ तौर पर user_id कॉलम में शामिल नहीं होती, जिसकी वजह से पुष्टि करने में गड़बड़ी होती है:

SELECT …
FROM adh.google_ads_impressions
JOIN adh.google_ads_clicks USING(impression_id)

इसे USING क्लॉज़ में बदलाव करके ठीक किया जा सकता है, ताकि user_id को साफ़ तौर पर शामिल किया जा सके–उदाहरण के लिए, USING(impression_id, user_id).

ध्यान दें कि यह सीमा सिर्फ़ Ads Data Hub टेबल को जोड़ने पर लागू होती है (डाइमेंशन टेबल को छोड़कर). यह ग्राहक के मालिकाना हक वाली टेबल पर लागू नहीं होता. उदाहरण के लिए, इनकी अनुमति है:

SELECT …
FROM adh.google_ads_impressions
JOIN bigquery_project.dataset.table USING(any_column)

Ads Data Hub-BigQuery यूनियन

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

इस क्वेरी की वजह से, पुष्टि करने में गड़बड़ी हुई:

SELECT COUNT(*) FROM (
  SELECT 1 FROM adh.google_ads_impressions
  UNION ALL
  SELECT 1 FROM bigquery_project.dataset.table
)

इसे ठीक करने के लिए, आपको BigQuery टेबल में जोड़ना होगा, ताकि आपको यूनियन के बजाय Ads Data Hub का डेटा बेहतर बनाना होगा या हर सोर्स को अलग-अलग इकट्ठा करने के लिए, डेटा को अलग करना होगा.

ध्यान दें कि कई Ads Data Hub टेबल को उपयोगकर्ता डेटा या ग्राहक के मालिकाना हक वाली कई BigQuery टेबल के साथ एक साथ रखा जा सकता है, लेकिन दोनों टेबल को एक साथ मिलाया नहीं जा सकता.

Ads Data Hub-BigQuery का राइट जॉइन

ग्राहक के मालिकाना हक वाले डेटा के साथ आउटर जॉइन करने पर, ऐसी पंक्तियां दिख सकती हैं जिनके उपयोगकर्ता आइडेंटिफ़ायर मौजूद नहीं हैं. इस वजह से, ग़ैर-ज़रूरी आवाज़ें कम हो जाती हैं.

इन दोनों क्वेरी की वजह से, पुष्टि करने में गड़बड़ियां होती हैं. इसकी वजह यह है कि इनकी वजह से, Ads Data Hub की साइड पर ऐसी लाइनें दिखती हैं जिनके उपयोगकर्ता आइडेंटिफ़ायर मौजूद नहीं होते हैं:

SELECT …
FROM adh.google_ads_impressions
RIGHT JOIN bigquery_project.dataset.table USING(column)
SELECT …
FROM bigquery_project.dataset.table
LEFT JOIN adh.google_ads_impressions USING(column)

ध्यान दें कि अगर टेबल का क्रम उलटा हो जाता है, तो दोनों में से कोई भी जॉइन काम करेगा.

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

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

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

SELECT campaign_name, COUNT(*)
FROM data
GROUP BY 1
UNION ALL
SELECT 'Total', COUNT(*)
FROM data
GROUP BY 1

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

क्रॉस-मोड की बनाई गई टेबल

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