शोर इंजेक्शन

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

जब एग्रीगेशन को बहुत कम उपयोगकर्ताओं से डेटा मिलता है, तो इंप्लिसिट क्लैंपिंग काम नहीं करती. उदाहरण के लिए, कोई ऐसी 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. निजता से जुड़े ग़ैर-ज़रूरी डेटा के लिए सेटिंग टॉगल को ग़ैर-ज़रूरी डेटा का इस्तेमाल करें पर सेट करें.
  3. क्वेरी चलाएं.
  4. जोड़े गए नॉइज़ के असर की समीक्षा करें.
  5. ज़रूरी नहीं: क्वेरी में बदलाव करें, ताकि आस-पास के शोर का असर कम हो.

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

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

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

5% से ज़्यादा नॉइज़ वाले नतीजे इंडिकेटर का रंग असर
<5% हरा कम असर
5%-15% पीला सामान्य असर
15% से 25% Orange काफ़ी असरदार
>25% लाल बहुत ज़्यादा असर

हाल ही में की गई रिपोर्टिंग से जुड़ी नौकरियों के लिए, होम पेज पर जाकर, निजता की खास जानकारी की झलक भी देखी जा सकती है. किसी नौकरी के लिए निजता की जानकारी देखने के लिए, हाल की गतिविधि में जाकर, नौकरी के कार्ड में मौजूद निजता से जुड़ी सलाह वाले आइकॉन privacy_tip पर कर्सर घुमाएं.

क्वेरी को अडैप्ट करना

जब कुछ उपयोगकर्ता, एग्रीगेट किए गए नतीजों में योगदान देते हैं, तो उनमें अनचाहा नॉइज़ होने की संभावना ज़्यादा होती है. ऐसा तब हो सकता है, जब लाइनों में कम उपयोगकर्ता हों या जब कुछ उपयोगकर्ताओं से नतीजों पर कोई असर न पड़े. उदाहरण के लिए, 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)).

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

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

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

नेगेटिव नतीजों के बारे में जानकारी

सिद्धांत के तौर पर, बहुत कम वैल्यू वाले नॉइज़ की वजह से नेगेटिव नंबर मिल सकते हैं. भले ही, क्वेरी के लिए ऐसा होना सेमैंटिक तौर पर मुमकिन न हो. अनुमान के मुताबिक काम करने के लिए, COUNT और COUNTIF के सभी फ़ॉर्म को अपने-आप शून्य पर सेट कर दिया जाता है, ताकि वे कभी भी नेगेटिव नतीजे न दें. अगर आपको किसी दूसरे फ़ंक्शन, जैसे कि SUM के साथ भी ऐसा ही व्यवहार चाहिए, तो GREATEST(0, SUM(...)) का इस्तेमाल करके, नतीजों को मैन्युअल तरीके से सीमित किया जा सकता है.

आम तौर पर, यह बदलाव बहुत कम होता है. हालांकि, इससे कुल नतीजों पर थोड़ा सकारात्मक असर पड़ता है. अगर आपको ऐसा नहीं करना है, तो COUNT के बजाय ADH.ANON_COUNT का इस्तेमाल करें. इसके अलावा, GROUP BY ROLLUP का इस्तेमाल करके, सभी लाइनों में कुल संख्या का हिसाब लगाया जा सकता है.


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

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

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

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

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

external_cookie के हिसाब से ग्रुप बनाना काफ़ी नहीं है. external_cookie का इस्तेमाल, *_match टेबल को ग्राहक के मालिकाना हक वाली टेबल से जोड़ने के लिए किया जा सकता है. हालांकि, एक उपयोगकर्ता के डेटा को इकट्ठा करने के लिए, user_id कॉलम के हिसाब से ग्रुप बनाना ज़रूरी है. सिर्फ़ external_cookie कॉलम के हिसाब से ग्रुप नहीं बनाया जा सकता.

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

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

इस स्थिति में, आपको किसी एक वैल्यू को हटाना होगा.

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

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)

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

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

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

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)

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

SELECT 
FROM bigquery_project.dataset.table
LEFT JOIN adh.google_ads_impressions_rdid USING(device_id_md5)

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

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

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

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

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

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

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