নয়েজ ইনজেকশন

নয়েজ ইনজেকশন হল এমন একটি কৌশল যা ব্যবহারকারীর গোপনীয়তা রক্ষা করার জন্য ব্যবহৃত হয় যখন একটি ডাটাবেস অনুসন্ধান করা হয়। এটি একটি কোয়েরির একটি সমষ্টিগত SELECT ক্লজে এলোমেলো শব্দ যোগ করে কাজ করে। এই গোলমাল ব্যবহারকারীর গোপনীয়তা রক্ষা করে যখন যুক্তিসঙ্গতভাবে সঠিক ফলাফল প্রদান করে, পার্থক্য চেকের প্রয়োজনীয়তা দূর করে এবং আউটপুটের জন্য প্রয়োজনীয় একত্রীকরণ থ্রেশহোল্ড হ্রাস করে। বেশিরভাগ বিদ্যমান প্রশ্নগুলি কিছু সীমাবদ্ধতা সহ নয়েজ মোডে কার্যকর করা যেতে পারে।

নয়েজ ইনজেকশন ব্যবহারের উপকারিতা জানুন

ডিফারেন্স চেক প্রযোজ্য নয়: নয়েজ ইনজেকশনের সাথে কোয়েরি চালানোর সময়, পূর্ববর্তী ফলাফল সেটের সাথে মিল থাকার কারণে বিজ্ঞাপন ডেটা হাব সারিগুলি ফিল্টার করে না। এর মানে হল যে আপনি এখনও ব্যবহারকারীর গোপনীয়তা রক্ষা করার সময় ডেটার একটি সামগ্রিক দৃশ্য পেতে পারেন।

সমস্যা সমাধানকে সরলীকৃত করা হয়েছে: সারিগুলি শুধুমাত্র একত্রিতকরণের প্রয়োজনীয়তার কারণে বাদ দেওয়া হয়েছে, যার ফলে সমস্যা সমাধান করা এবং কোয়েরিগুলিকে মানিয়ে নেওয়া সহজ হয়৷

শেখার জন্য কোন নতুন সিনট্যাক্স নেই: পার্থক্য চেকের পরিবর্তে শব্দ ব্যবহার করার জন্য আপনাকে কোন নতুন ক্যোয়ারী সিনট্যাক্স শিখতে হবে না বা গোপনীয়তা ধারণায় পারদর্শী হতে হবে না।

ফলাফলের নির্ভুলতা পরিষ্কার: একটি সফল কাজ প্রত্যাশিত পরিমাণ গোলমাল সহ ডেটার মোট শতাংশ দেখায়।

কীভাবে শব্দ গোপনীয়তার প্রয়োজনীয়তাকে প্রভাবিত করে তা জানুন

পার্থক্য পরীক্ষা: নয়েজ ইনজেকশন বিজ্ঞাপন ডেটা হাবে বিদ্যমান পার্থক্য পরীক্ষাগুলির উপর নির্ভর করে না। যখন আপনি শব্দ ইঞ্জেকশন ব্যবহার করেন, পার্থক্য চেক অক্ষম করা হয়।

একত্রিতকরণের প্রয়োজনীয়তা: নয়েজ ইনজেকশন আউটপুট ইম্প্রেশন ডেটা যা প্রায় 20 বা তার বেশি অনন্য ব্যবহারকারী দ্বারা উপস্থাপিত হয় এবং প্রায় 10 বা তার বেশি অনন্য ব্যবহারকারী দ্বারা উপস্থাপিত ক্লিক বা রূপান্তর ডেটা।

স্ট্যাটিক চেক: কোন প্রভাব নেই।

বাজেট এবং ক্যোয়ারী সীমা: গোলমাল ব্যবহার করে সঞ্চালিত প্রশ্নগুলি পার্থক্য চেকের সাথে ব্যবহৃত ডেটা অ্যাক্সেস বাজেট ভাগ করে। ডিফারেন্স চেকের মতো, আপনি যদি একই ডেটাসেটে একই ক্যোয়ারী বহুবার চালান, তাহলে আপনি ডেটাসেটে ঘন ঘন অনুসন্ধান করা তারিখগুলিতে অ্যাক্সেস হারাতে পারেন। আপনি যদি স্লাইডিং উইন্ডো কোয়েরি চালান বা আপনি একই অনুরোধ একাধিকবার করেন তাহলে এটি ঘটতে পারে।

নয়েজ মোড কোয়েরির মধ্যে বা জুড়ে একই সমষ্টিগত ফলাফল পুনরায় গণনা করার উপর অতিরিক্ত, কঠোর সীমা আরোপ করে। ডেটা অ্যাক্সেস বাজেটের মতো, আপনি ডেটাসেটে প্রায়শই জিজ্ঞাসা করা তারিখগুলিতে অ্যাক্সেস হারাতে পারেন; কিন্তু একই সামগ্রিক ফলাফল পুনরায় কম্পিউট করার কারণে সীমাবদ্ধতা শুধুমাত্র নয়েজ মোডে প্রশ্ন সীমাবদ্ধ করবে, পার্থক্য চেক মোডে প্রশ্ন নয়। আরও তথ্যের জন্য, পুনরাবৃত্তি ফলাফল দেখুন।

গোপনীয়তা চেক সম্পর্কে আরও জানুন

কিভাবে শব্দ ইঞ্জেকশন ফলাফল প্রভাবিত করে তা বুঝুন

বিজ্ঞাপন ডেটা হাব প্রকাশের ঝুঁকি কমাতে নয়েজ ইনজেক্ট করে—যে ঝুঁকি কেউ একজন স্বতন্ত্র ব্যবহারকারী সম্পর্কে তথ্য জানতে পারে। এটি ইউটিলিটির বিরুদ্ধে গোপনীয়তার ভারসাম্য বজায় রাখে।

বিজ্ঞাপন ডেটা হাব-এ নয়েজ ইনজেকশন ক্যোয়ারী ফলাফলকে নিম্নরূপ রূপান্তরিত করে:

  • এটি সামগ্রিক ফলাফলের বাইরের ব্যবহারকারীদের অবদানকে আটকে দেয়। এটি প্রতিটি সমষ্টিতে প্রতিটি ব্যবহারকারীর অবদানকে যোগ করে এবং তারপরে সর্বনিম্ন এবং সর্বাধিক ক্ল্যাম্পিং বাউন্ডের সাথে প্রতিটি অবদানকে ক্যাপ করে।
  • এটি প্রতি-ব্যবহারকারীর ক্ল্যাম্পড অবদানগুলিকে একত্রিত করে৷
  • এটি প্রতিটি সমষ্টিগত ফলাফলে শব্দ যোগ করে—প্রতিটি সারিতে প্রতিটি সমষ্টি ফাংশনের কলের ফলাফল। এই এলোমেলো শব্দের স্কেল ক্ল্যাম্পড সীমার সমানুপাতিক।
  • এটি প্রতিটি সারির জন্য একটি কোলাহলপূর্ণ ব্যবহারকারীর সংখ্যা গণনা করে এবং খুব কম ব্যবহারকারীর সাথে সারিগুলিকে সরিয়ে দেয়। এটি ডিফারেন্স চেক মোডে k-অনামিতার অনুরূপ, কিন্তু গোলমালের কারণে, একই ডেটাসেটে চলমান কাজগুলি বিভিন্ন সারি ড্রপ করতে পারে। এছাড়াও, নয়েজ মোড কম সারি ড্রপ করে কারণ একত্রিতকরণের প্রয়োজনীয়তা কম (আনুমানিক 20 বনাম ঠিক 50)।

চূড়ান্ত ফলাফল হল একটি ডেটাসেট যেখানে প্রতিটি সারিতে শোরগোল সমষ্টিগত ফলাফল রয়েছে এবং ছোট গোষ্ঠীগুলিকে বাদ দেওয়া হয়েছে৷ এটি প্রত্যাবর্তিত ফলাফলের উপর একটি পৃথক ব্যবহারকারীর প্রভাবকে মাস্ক করে।

সমষ্টি ক্ল্যাম্পিং সম্পর্কে

বিজ্ঞাপন ডেটা হাবে নয়েজ ইনজেকশন বহিরাগতদের অবদান সীমিত করতে অন্তর্নিহিত বা স্পষ্ট একত্রিতকরণ ক্ল্যাম্পিং ব্যবহার করে। আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে আপনি কোন ধরণের ক্ল্যাম্পিং ব্যবহার করবেন তা চয়ন করতে পারেন।

অন্তর্নিহিত ক্ল্যাম্পিং

অন্তর্নিহিত ক্ল্যাম্পিং-এ, সীমা স্বয়ংক্রিয়ভাবে নির্ধারিত হয়। অন্তর্নিহিত ক্ল্যাম্পিং ব্যবহার করার জন্য আপনার কোন বিশেষ 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. ক্যোয়ারী এডিটরে, একটি নতুন কাজের জন্য বিস্তারিত লিখুন রান এ ক্লিক করুন।
  3. গোপনীয়তা সেটিংস টগল করে ইউজ নয়েজ পজিশনে ক্লিক করুন।
  4. প্রশ্নটি চালান
  5. যোগ করা গোলমাল পর্যালোচনা করুন .
  6. ঐচ্ছিক: শব্দের প্রভাব কমাতে ক্যোয়ারী মানিয়ে নিন

গোলমালের প্রভাব পর্যালোচনা করুন

একবার একটি ক্যোয়ারী সফলভাবে সম্পন্ন হলে, আউটপুটে কতগুলি সেলের প্রত্যাশিত পরিমাণ শব্দ আছে তার উপর ভিত্তি করে বিজ্ঞাপন ডেটা হাব ফলাফলের নির্ভরযোগ্যতা প্রদর্শন করে। ফলাফল সারণীতে একটি মান অত্যন্ত প্রভাবিত বলে বিবেচিত হয় যদি যোগ করা শব্দের স্কেল কক্ষের ফলাফলের 5% এর বেশি হয়। নিম্নলিখিত সারণীতে প্রভাব পরিসীমা দেখুন।

প্রভাবিত আউটপুট ডেটা সেটের জন্য, বিশদ ট্যাবে সর্বোচ্চ থেকে সর্বনিম্ন প্রভাব পর্যন্ত 10টি শোরগোল কলাম এবং শব্দে তাদের অনুরূপ অবদানের তালিকা রয়েছে। এটি শব্দের প্রত্যাশিত পরিমাণের ভাঙ্গন।

প্রত্যাশিত শব্দের পরিমাণ সহ ডেটা সূচক রঙ প্রভাব
>95% সবুজ কম প্রভাব
৮৫%-৯৫% হলুদ মাঝারি প্রভাব
75%-85% কমলা উচ্চ প্রভাব
<75% লাল খুব উচ্চ প্রভাব

শব্দের প্রভাব সম্পর্কে বিস্তারিত তথ্য দেখতে:

  1. রিপোর্ট ক্লিক করুন.
  2. তালিকা থেকে একটি প্রতিবেদন নির্বাচন করুন। গোপনীয়তার সারাংশ টুলটিপ ফলাফলের শতকরা শতাংশ নির্দেশ করে যেগুলির প্রত্যাশিত পরিমাণ গোলমাল রয়েছে, যে পরিমাণ শব্দ যোগ করা হয়েছে যা ফলাফলের 5%-এর বেশি।
  3. আরও তথ্য দেখতে, চাকরি > বিবরণে ক্লিক করুন
  4. কাজের বিবরণে গোপনীয়তা বার্তা দেখুন। ফলাফল তালিকাভুক্ত বিভাগের মধ্যে পড়ে।
  5. যদি প্রয়োজন হয়, ফলাফল উন্নত করতে আপনার ক্যোয়ারী সামঞ্জস্য করুন।

প্রশ্নগুলি মানিয়ে নিন

সামগ্রিক ফলাফলে অপ্রত্যাশিত পরিমাণে গোলমাল হওয়ার সম্ভাবনা বেশি থাকে যখন কিছু ব্যবহারকারী সেই ফলাফলগুলিতে অবদান রাখেন। এটি ঘটতে পারে যখন সারিতে অল্পসংখ্যক ব্যবহারকারী থাকে বা যখন কিছু ব্যবহারকারী ফলাফলকে প্রভাবিত করে না—উদাহরণস্বরূপ, COUNTIF ফাংশন ব্যবহার করার সময়। গোলমালের বিবরণের উপর ভিত্তি করে, আপনি শব্দের প্রত্যাশিত পরিমাণের সাথে ডেটার শতাংশ বাড়ানোর জন্য আপনার ক্যোয়ারী সামঞ্জস্য করতে চাইতে পারেন।

নিম্নলিখিত সাধারণ নির্দেশিকা:

  • তারিখ পরিসীমা প্রসারিত করুন.
  • ডেটার গ্রানুলারিটি কমাতে ক্যোয়ারীটি পুনরায় লিখুন, যেমন কম প্যারামিটার দ্বারা গোষ্ঠীবদ্ধ করা বা COUNTIF COUNT দিয়ে প্রতিস্থাপন করা।
  • শোরগোল কলাম সরান.
  • সুস্পষ্ট ক্ল্যাম্পিং ব্যবহার করুন।

সমর্থিত সমষ্টিগত ফাংশন

নিম্নলিখিত সমষ্টিগত ফাংশন শব্দের সাথে সমর্থিত:

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

DISTINCT কীওয়ার্ডটি শুধুমাত্র COUNT ফাংশনের সাথে সমর্থিত, এবং শুধুমাত্র যখন একটি বিজ্ঞাপন ডেটা হাব টেবিল থেকে 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 ব্যবহার করে।


সমর্থিত ক্যোয়ারী প্যাটার্ন

গুরুত্বপূর্ণ : বিজ্ঞাপন ডেটা হাবের বেশিরভাগ স্ট্যান্ডার্ড সর্বোত্তম অনুশীলন এখনও শব্দ ইঞ্জেকশন ব্যবহার করে এমন প্রশ্নের ক্ষেত্রে প্রযোজ্য। বিশেষ করে, আমরা সুপারিশ করি যে আপনি একই ডেটা বারবার জিজ্ঞাসা করার নির্দেশিকা পর্যালোচনা করুন৷

এই বিভাগটি ক্যোয়ারী প্যাটার্নগুলি বর্ণনা করে যা শব্দ ইঞ্জেকশন ব্যবহার করে ক্যোয়ারী চালানোর সময় সমর্থিত।

ব্যবহারকারী-স্তরের সমষ্টি

অনিয়ন্ত্রিত ব্যবহারকারী-স্তরের সমষ্টিগুলি একইভাবে সমর্থিত হয় যেভাবে তারা পার্থক্য চেক মোডে থাকে। গোলমাল শুধুমাত্র একত্রিত করা হয় যা একাধিক ব্যবহারকারীর ডেটা একত্রিত করে। সমষ্টি যা স্পষ্টভাবে user_id দ্বারা গোষ্ঠীভুক্ত হয়, অথবা বিশ্লেষণাত্মক ফাংশন যা user_id দ্বারা বিভাজন করে, কোনো শব্দ পায় না এবং কোনো ফাংশন অনুমোদিত হয়। ব্যবহারকারী-স্তরের একত্রীকরণ যা স্পষ্টভাবে user_id দ্বারা গোষ্ঠীভুক্ত হয় না -উদাহরণস্বরূপ, GROUP BY impression_id ,কে ক্রস-ইউজার অ্যাগ্রিগেশন হিসাবে বিবেচনা করা হয়, তাই গোলমাল যোগ করা হয়।

বহিরাগত_কুকি দ্বারা গোষ্ঠীবদ্ধ করা যথেষ্ট নয়। যদিও external_cookie ব্যবহার করা যেতে পারে *_match টেবিলের সাথে গ্রাহক-মালিকানাধীন টেবিলের সাথে, যেকোন একক-ব্যবহারকারীর সমষ্টিকে স্পষ্টভাবে user_id কলাম দ্বারা গোষ্ঠীভুক্ত করা উচিত, শুধুমাত্র বহিরাগত_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) এর মতো সামগ্রিক ফলাফলগুলিকে পুনরায় একত্রিত করা নিষিদ্ধ করে


অসমর্থিত ক্যোয়ারী প্যাটার্ন

এই বিভাগটি ক্যোয়ারী প্যাটার্ন বর্ণনা করে যা নয়েজ ইনজেকশন ব্যবহার করে ক্যোয়ারী চালানোর সময় সমর্থিত নয়।

আজকের-অন্তর্ভুক্ত প্রশ্ন

নয়েজ মোড কোয়েরিগুলি বর্তমান দিনের ডেটা অনুসন্ধানকে সমর্থন করে না। (এটি পার্থক্য চেক মোডে নিরুৎসাহিত করা হয়।) বর্তমান তারিখটি নয়েজ ইনজেকশন ব্যবহার করে এমন প্রশ্নের জন্য নির্বাচনযোগ্য নয়।

বারবার ফলাফল

নয়েজ মোডে, বিজ্ঞাপন ডেটা হাব সীমিত করে যে আপনি একই সমষ্টি কতবার পুনরাবৃত্তি করতে পারেন। আপনি যদি এই সীমাতে পৌঁছে যান, আপনার নয়েজ মোড প্রশ্নগুলি ডেটাসেটে ঘন ঘন অনুসন্ধান করা তারিখগুলিতে অ্যাক্সেস হারাবে৷ এটি কিভাবে ঘটতে পারে তার উদাহরণ নিচে দেওয়া হল।

ক্যোয়ারী পুনরাবৃত্তি ঘটবে যখন একই ক্যোয়ারী একই প্যারামিটার বা অত্যন্ত অনুরূপ পরামিতিগুলির সাথে একাধিকবার চালানো হয়, যেমন ওভারল্যাপিং তারিখ ব্যাপ্তি। আপনি ইতিমধ্যেই আপনার 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 , এই ক্ষেত্রে)।

মনে রাখবেন যে বিজ্ঞাপন ডেটা হাব টেবিল থেকে একটি অ্যারে আননেস্ট করা একই প্রভাব তৈরি করতে পারে যদি বেশিরভাগ ব্যবহারকারীর মানগুলির একই অ্যারে থাকে:

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

টেম্প টেবিল সম্পর্কে আরও জানুন

যদি একত্রিতকরণের প্রথম স্তরটি গোপনীয়তা চেকের জন্য খুব দানাদার হয়, তাহলে ব্যবহারকারী-স্তরের সমষ্টির সাথে ক্যোয়ারীটি পুনরায় লেখার কথা বিবেচনা করুন৷ যদি এটি সম্ভব না হয়, তাহলে এই প্রশ্নটি নয়েজ মোডে সমর্থিত নয়।

সংযোগহীন ব্যবহারকারী আইডি

নয়েজ মোডে প্রশ্নগুলি পৃথক ব্যবহারকারীদের থেকে একটি একক সারিতে ডেটা একত্রিত করা উচিত নয়, যখন নয়েজ সহ একটি সমষ্টি সম্পাদন করা হয়। ফলস্বরূপ, user_id কলামে স্পষ্টভাবে যোগদানের জন্য একত্রিত বিজ্ঞাপন ডেটা হাব ডেটার যোগদান প্রয়োজন।

এই ক্যোয়ারীটি স্পষ্টভাবে user_id কলামে যোগ দেয় না, যার ফলে একটি বৈধতা ত্রুটি দেখা দেয়:

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

স্পষ্টভাবে user_id অন্তর্ভুক্ত করার জন্য USING ক্লজ সামঞ্জস্য করে এটি ঠিক করা যেতে পারে -উদাহরণস্বরূপ, USING(impression_id, user_id)

মনে রাখবেন যে এই সীমাবদ্ধতা শুধুমাত্র বিজ্ঞাপন ডেটা হাব টেবিলের মধ্যে যোগদানের ক্ষেত্রে প্রযোজ্য (মাত্রা সারণী ব্যতীত)। এটি গ্রাহকের মালিকানাধীন টেবিলের জন্য প্রযোজ্য নয়। উদাহরণস্বরূপ, নিম্নলিখিত অনুমোদিত:

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

বিজ্ঞাপন ডেটা হাব-বিগকুয়েরি ইউনিয়ন

আওয়াজ সহ একত্রিতকরণের জন্য ব্যবহারকারী শনাক্তকারীর প্রয়োজন হয় যাতে ভাল পারফর্ম করা যায়। BigQuery-এ গ্রাহক-মালিকানাধীন ডেটার কোনও ব্যবহারকারী শনাক্তকারী নেই, তাই বিজ্ঞাপন ডেটা হাব টেবিলে যোগ না দিয়ে এটি একটি শব্দ একত্রীকরণে একত্রিত করা যাবে না।

এই ক্যোয়ারী একটি বৈধতা ত্রুটির ফলাফল:

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

এটি ঠিক করার জন্য, আপনাকে হয় BigQuery টেবিলে যোগ দিতে হবে বিজ্ঞাপন ডেটা হাব ডেটাকে যুক্ত করার পরিবর্তে বাড়ানোর জন্য অথবা প্রতিটি উৎসকে আলাদাভাবে একত্রিত করতে ডেটা আলাদা করতে হবে।

মনে রাখবেন যে ব্যবহারকারীর ডেটা সহ একাধিক বিজ্ঞাপন ডেটা হাব টেবিল বা একাধিক গ্রাহক-মালিকানাধীন BigQuery টেবিলের মধ্যে একটি ইউনিয়ন করা ভাল, তবে আপনি দুটিকে মিশ্রিত করতে পারবেন না।

Ads Data Hub-BigQuery ডানে যোগ দেয়

গ্রাহক-মালিকানাধীন ডেটার সাথে আউটার যোগদানের ফলে ব্যবহারকারী শনাক্তকারী অনুপস্থিত সহ সারি হতে পারে, যা ভালোভাবে কাজ করা থেকে গোলমাল প্রতিরোধ করে।

এই দুটি প্রশ্নেরই যাচাইকরণের ত্রুটি দেখা দেয় কারণ তারা বিজ্ঞাপন ডেটা হাবের পাশে অনুপস্থিত ব্যবহারকারী শনাক্তকারীর সাথে অতুলনীয় সারিগুলির জন্য অনুমতি দেয়:

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 এ রপ্তানি করা হয়)।