ব্যবহারকারী-প্রদত্ত ডেটা ম্যাচিং

ব্যবহারকারী-প্রদত্ত ডেটা ম্যাচিং (UPDM) প্রথম-পক্ষের ডেটাতে যোগ দেয় যা আপনি কোনও ব্যবহারকারী সম্পর্কে সংগ্রহ করেছেন—যেমন আপনার ওয়েবসাইট, অ্যাপস বা ফিজিক্যাল স্টোর থেকে তথ্য—Google-এর মালিকানাধীন এবং পরিচালিত ডেটা সহ সমস্ত Google বিজ্ঞাপন ডেটা জুড়ে একই ব্যবহারকারীর সাইন-ইন করা কার্যকলাপের সাথে। এর মধ্যে রয়েছে Google Marketing Platform (GMP) পণ্যের মাধ্যমে কেনা ডেটা, উদাহরণস্বরূপ, YouTube Display & Video 360 ব্যবহার করে কেনা। অন্যান্য GMP পণ্য যা Google-এর মালিকানাধীন এবং পরিচালিত নয় তা সমর্থিত নয়।

ব্যবহারকারী-প্রদত্ত ডেটা ম্যাচিংয়ের জন্য যোগ্য হতে, বিজ্ঞাপন ইভেন্টটিকে অবশ্যই Google বিজ্ঞাপন ডেটাতে সাইন-ইন করা ব্যবহারকারীর সাথে লিঙ্ক করতে হবে।

এই দস্তাবেজটি ব্যবহারকারী-প্রদত্ত ডেটা ম্যাচিং বৈশিষ্ট্য বর্ণনা করে এবং সেটআপ এবং ব্যবহারের নির্দেশিকা প্রদান করে।

ব্যক্তিগত ক্লাউড ম্যাচ ওভারভিউ

মূল্যবান বিজ্ঞাপনের অন্তর্দৃষ্টি অর্জনের জন্য প্রায়ই একাধিক উত্স থেকে ডেটা একত্রিত করার প্রয়োজন হয়৷ এই ডেটা পাইপলাইন সমস্যার আপনার নিজস্ব সমাধান তৈরি করতে উল্লেখযোগ্য সময় বিনিয়োগ এবং প্রকৌশল বিনিয়োগ প্রয়োজন। বিজ্ঞাপন ডেটা হাব-এ ব্যক্তিগত ক্লাউড ম্যাচ BigQuery-এ একটি ম্যাচ টেবিল তৈরি করার জন্য একটি বিজ্ঞাপন ডেটা হাব কোয়েরি টেমপ্লেট প্রদান করে এই প্রক্রিয়াটিকে স্ট্রিমলাইন করে যা আপনার বিজ্ঞাপন ডেটা হাব কোয়েরিতে ব্যবহার করা যেতে পারে আপনার প্রথম পক্ষের ডেটার সাথে আপনার বিজ্ঞাপনের ডেটা মেলাতে। প্রথম-পক্ষের ডেটা দিয়ে আপনার প্রশ্নগুলিকে সমৃদ্ধ করা গ্রাহকদের আরও সমৃদ্ধ অভিজ্ঞতা প্রদান করতে পারে এবং শিল্প-ব্যাপী বিজ্ঞাপন-ট্র্যাকিং পরিবর্তনগুলির জন্য আরও প্রতিরোধী।

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

প্রক্রিয়া সারাংশ

  1. ডেটা ইনজেশন এবং ম্যাচিং এর সেটআপ
    • নিশ্চিত করুন যে আপনার প্রথম-পক্ষের ডেটা BigQuery-এ অবস্থিত এবং আপনার পরিষেবা অ্যাকাউন্টে এটি পড়ার অ্যাক্সেস রয়েছে। ডেটা ইনজেশন সেট আপ দেখুন।
  2. প্রথম পক্ষের ডেটা ইনজেশন এবং ম্যাচিং
    • আপনি আপনার BigQuery ডেটাসেটে আপনার প্রথম পক্ষের ডেটা ফর্ম্যাট এবং আপলোড করুন।
    • আপনি একটি ব্যক্তিগত ক্লাউড ম্যাচ বিশ্লেষণ ক্যোয়ারী তৈরি করে এবং একটি সময়সূচী সেট করে একটি ডেটা-মেলিংয়ের অনুরোধ শুরু করেন।
    • Google আপনার প্রোজেক্ট এবং Google-এর মালিকানাধীন ডেটার মধ্যে ডেটা যোগ করে যাতে Google-এর ইউজার আইডি থাকে এবং ম্যাচ টেবিল তৈরি এবং আপডেট করতে ব্যবহারকারী-প্রদত্ত ডেটা হ্যাশ করে।
    • প্রথম পক্ষের ডেটা ইনজেস্ট দেখুন
  3. বিজ্ঞাপন ডেটা হাবে চলমান প্রশ্ন, মিলে যাওয়া ডেটার উপর ভিত্তি করে
    • আপনি বিজ্ঞাপন ডেটা হাবে যেভাবে নিয়মিত কোয়েরি চালান ঠিক একইভাবে আপনি ম্যাচ টেবিলের বিরুদ্ধে কোয়েরি চালান। ক্যোয়ারী মিলে যাওয়া ডেটা দেখুন।

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

গ্রাহকের তথ্য সংগ্রহ করা হচ্ছে

ব্যবহারকারী-প্রদত্ত ডেটা ম্যাচিং ব্যবহার করার সময়, আপনাকে অবশ্যই প্রথম পক্ষের ডেটা আপলোড করতে হবে৷ এটি হতে পারে আপনার ওয়েবসাইট, অ্যাপস, ফিজিক্যাল স্টোর থেকে সংগ্রহ করা তথ্য অথবা একজন গ্রাহক সরাসরি আপনার সাথে শেয়ার করেছেন এমন কোনো তথ্য।

আপনাকে অবশ্যই:

  • নিশ্চিত করুন যে আপনার গোপনীয়তা নীতি প্রকাশ করে যে আপনি আপনার পক্ষ থেকে পরিষেবাগুলি সম্পাদন করার জন্য তৃতীয় পক্ষের সাথে গ্রাহকের ডেটা ভাগ করেন এবং যেখানে আইনিভাবে প্রয়োজন সেখানে আপনি এই ধরনের ভাগ করার জন্য সম্মতি পান
  • গ্রাহক ডেটা আপলোড করতে শুধুমাত্র Google-এর অনুমোদিত API বা ইন্টারফেস ব্যবহার করুন
  • প্রযোজ্য হতে পারে এমন যেকোন স্ব-নিয়ন্ত্রক বা শিল্প কোড সহ সমস্ত প্রযোজ্য আইন ও প্রবিধান মেনে চলুন

প্রথম পক্ষের সম্মতির স্বীকৃতি

আপনি বিজ্ঞাপন ডেটা হাবে আপনার প্রথম-পক্ষের ডেটা ব্যবহার করতে পারবেন তা নিশ্চিত করতে, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি EU ব্যবহারকারীর সম্মতি নীতি এবং বিজ্ঞাপন ডেটা হাব নীতি অনুসারে EEA শেষ ব্যবহারকারীদের থেকে Google-এর সাথে ডেটা শেয়ার করার জন্য যথাযথ সম্মতি পেয়েছেন। এই প্রয়োজনীয়তা প্রতিটি বিজ্ঞাপন ডেটা হাব অ্যাকাউন্টের জন্য প্রযোজ্য এবং প্রতিবার আপনি নতুন প্রথম পক্ষের ডেটা আপলোড করার সময় অবশ্যই আপডেট করতে হবে। যেকোন একজন ব্যবহারকারী পুরো অ্যাকাউন্টের পক্ষে এই স্বীকৃতি দিতে পারেন।

মনে রাখবেন যে একই Google পরিষেবার ক্যোয়ারী নিয়ম যা বিশ্লেষণের প্রশ্নে প্রযোজ্য তা UPDM কোয়েরির ক্ষেত্রেও প্রযোজ্য। উদাহরণস্বরূপ, যখন আপনি একটি ম্যাচ টেবিল তৈরি করেন তখন আপনি EEA-তে ব্যবহারকারীদের উপর ক্রস-সার্ভিস কোয়েরি চালাতে পারবেন না।

বিজ্ঞাপন ডেটা হাবে কীভাবে সম্মতি স্বীকার করতে হয় তা জানতে, ইউরোপীয় অর্থনৈতিক এলাকার জন্য সম্মতির প্রয়োজনীয়তা দেখুন।

ডেটা সাইজ

শেষ-ব্যবহারকারীর গোপনীয়তা রক্ষা করতে, ব্যবহারকারী-প্রদত্ত ডেটা ম্যাচিং আপনার ডেটার আকার সম্পর্কিত এই প্রয়োজনীয়তাগুলি প্রয়োগ করে:

  • আপনাকে অবশ্যই আপনার ব্যবহারকারী তালিকায় কমপক্ষে 1,000টি রেকর্ড আপলোড করতে হবে৷
  • আপনার তালিকা রেকর্ডের সর্বোচ্চ সংখ্যা অতিক্রম করা উচিত নয়. সর্বাধিক ডেটা সীমা সম্পর্কে জানতে, আপনার Google প্রতিনিধির সাথে যোগাযোগ করুন।

ডেটা ইনজেশন সেট আপ করুন

আপনি শুরু করার আগে, নিশ্চিত করুন:

  • আপনার প্রথম পক্ষের ডেটা অবশ্যই BigQuery-এ থাকতে হবে। আপনার যদি একটি VPC-SC পরিধি থাকে, তাহলে এই প্রথম পক্ষের ডেটা আপনার VPC-SC-এর মধ্যে থাকা আবশ্যক৷
  • আপনার বিজ্ঞাপন ডেটা হাব পরিষেবা অ্যাকাউন্টে অবশ্যই প্রথম পক্ষের ডেটা পড়ার অ্যাক্সেস থাকতে হবে।
  • আপনার প্রথম পক্ষের ডেটা অবশ্যই ফরম্যাট করতে হবে এবং সঠিকভাবে হ্যাশ করতে হবে। আরো বিস্তারিত জানার জন্য পরবর্তী অধ্যায় দেখুন.

এর বাইরে, ব্যক্তিগত ক্লাউড ম্যাচের কোনও অতিরিক্ত অনবোর্ডিং নেই। আপনি যদি একটি বিশ্লেষণ ক্যোয়ারী চালাতে পারেন, তাহলে আপনি একটি ব্যক্তিগত ক্লাউড ম্যাচ ক্যোয়ারী চালাতে পারেন।

প্রথম পক্ষের ডেটা ইনজেস্ট করুন এবং মেলে৷

ইনপুট জন্য ফর্ম্যাট তথ্য

সঠিকভাবে মেলে আপনার ডেটা এই ফর্ম্যাটিং প্রয়োজনীয়তা মেনে চলতে হবে:

  • যেখানে নিম্নলিখিত ইনপুট ক্ষেত্রের বিবরণে নির্দেশিত আছে, আপনাকে অবশ্যই SHA256 হ্যাশিং ব্যবহার করে আপলোড করতে হবে।
  • ইনপুট ক্ষেত্রগুলি অবশ্যই স্ট্রিং হিসাবে ফর্ম্যাট করা উচিত৷ উদাহরণস্বরূপ, আপনি যদি Base64 এনকোডিং ফাংশন ( TO_BASE64 ) এর সাথে BigQuery-এর SHA256 হ্যাশ ফাংশন ব্যবহার করেন, তাহলে নিম্নলিখিত রূপান্তরটি ব্যবহার করুন: TO_BASE64(SHA256(user_data))
  • UPDM বেস64 এনকোডিং সমর্থন করে। আপনার বিজ্ঞাপন ডেটা হাব কোয়েরিতে ব্যবহৃত ডিকোডিংয়ের সাথে আপনাকে আপনার প্রথম-পক্ষের ডেটার এনকোডিং সারিবদ্ধ করতে হবে। আপনি যদি আপনার প্রথম-পক্ষের ডেটা এনকোডিং পরিবর্তন করেন, তাহলে একই বেস থেকে ডিকোড করতে আপনাকে অবশ্যই আপনার বিজ্ঞাপন ডেটা হাব কোয়েরি আপডেট করতে হবে। নিম্নলিখিত উদাহরণ Base64 এনকোডিং ব্যবহার করে।

ইউজার আইডি

  • সরল পাঠ্য
  • হ্যাশিং: কোনোটিই নয়

ইমেইল

  • অগ্রণী এবং পিছনের হোয়াইটস্পেসগুলি সরান৷
  • ছোট হাতের সব অক্ষর
  • সমস্ত ইমেল ঠিকানার জন্য একটি ডোমেন নাম অন্তর্ভুক্ত করুন, যেমন gmail.com বা hotmail.co.jp
  • উচ্চারণগুলি সরান-উদাহরণস্বরূপ, è, é, ê, বা ë থেকে e পরিবর্তন করুন
  • gmail.com এবং googlemail.com ইমেল ঠিকানাগুলিতে ডোমেন নামের আগে থাকা সমস্ত সময়কাল (.) সরান
  • হ্যাশিং: বেস64 এনকোডেড SHA256

বৈধ: TO_BASE64(SHA256("jeffersonloveshiking@gmail.com"))

অবৈধ: TO_BASE64(SHA256(" Jéfferson.Lôves.Hiking@gmail.com "))

ফোন

  • স্ট্রিপ হোয়াইটস্পেস
  • E.164 ফরম্যাটে বিন্যাস - US উদাহরণ: +14155552671, UK উদাহরণ: +442071838750
  • দেশের কোডের আগে "+" ছাড়া সব বিশেষ অক্ষর সরান
  • হ্যাশিং: বেস64 এনকোডেড SHA256

বৈধ: TO_BASE64(SHA256("+18005550101"))

অবৈধ: TO_BASE64(SHA256("(800) 555-0101"))

প্রথম নাম

  • স্ট্রিপ হোয়াইটস্পেস
  • ছোট হাতের সব অক্ষর
  • সমস্ত উপসর্গ সরান-উদাহরণস্বরূপ Mrs., Mr., Ms., Dr.
  • উচ্চারণ মুছে ফেলবেন না —উদাহরণস্বরূপ, è, é, ê, বা ë
  • হ্যাশিং: বেস64 এনকোডেড SHA256

বৈধ: TO_BASE64(SHA256("daní"))

অবৈধ: TO_BASE64(SHA256("Mrs. Daní"))

পদবি

  • স্ট্রিপ হোয়াইটস্পেস
  • ছোট হাতের সব অক্ষর
  • সমস্ত প্রত্যয় সরান-উদাহরণস্বরূপ Jr., Sr., 2nd, 3rd, II, III, PHD, MD
  • উচ্চারণ মুছে ফেলবেন না —উদাহরণস্বরূপ, è, é, ê, বা ë
  • হ্যাশিং: বেস64 এনকোডেড SHA256

বৈধ: TO_BASE64(SHA256("délacruz"))

অবৈধ: TO_BASE64(SHA256("dé la Cruz, Jr."))

দেশ

  • আপনার সমস্ত গ্রাহক ডেটা একই দেশের হলেও দেশের কোড অন্তর্ভুক্ত করুন
  • দেশের ডেটা হ্যাশ করবেন না
  • ISO 3166-1 alpha-2 দেশের কোড ব্যবহার করুন
  • হ্যাশিং: কোনোটিই নয়

বৈধ: US

অবৈধ: United States of America বা USA

জিপ কোড

  • জিপ কোড ডেটা হ্যাশ করবেন না
  • মার্কিন এবং আন্তর্জাতিক উভয় জিপ এবং পোস্টাল কোড অনুমোদিত
  • মার্কিন যুক্তরাষ্ট্রের জন্য:
    • 5 সংখ্যার কোড অনুমোদিত—উদাহরণস্বরূপ, 94043
    • 5টি সংখ্যার পরে 4 সংখ্যার এক্সটেনশনও অনুমোদিত—উদাহরণস্বরূপ, 94043-1351 বা 940431351
  • অন্য সব দেশের জন্য:
    • কোন বিন্যাসের প্রয়োজন নেই (ছোট হাতের অক্ষর বা স্পেস এবং বিশেষ অক্ষর সরানোর দরকার নেই)
    • পোস্টাল কোড এক্সটেনশন ছেড়ে দিন
  • হ্যাশিং: কোনোটিই নয়

হ্যাশ যাচাইকরণ এবং ডেটা এনকোডিং

আপনার ডেটা সঠিকভাবে ফর্ম্যাট করা হয়েছে তা নিশ্চিত করতে আপনি নিম্নলিখিত হ্যাশ যাচাইকরণ স্ক্রিপ্টগুলি ব্যবহার করতে পারেন।

জাভাস্ক্রিপ্ট

  /**
   * @fileoverview Provides the hashing algorithm, as well as some valid hashes of
   * sample data for testing.
  */

  async function hash(token) {
    // Removes leading or trailing spaces and converts all characters to lowercase.
    const formattedToken = token.trim().toLowerCase();
    // Hashes the formatted string using the SHA-256 hashing algorithm.
    const hashBuffer = await crypto.subtle.digest(
        'SHA-256', (new TextEncoder()).encode(formattedToken));
    // Converts the hash buffer to a base64-encoded string and returns it.
    const base64Str = btoa(String.fromCharCode(...new Uint8Array(hashBuffer)));
    return base64Str;
  }

  function main() {
    // Expected hash for test@gmail.com:
    // h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
    hash('test@gmail.com').then(result => console.log(result));

    // Expected hash for +18005551212:
    // YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
    hash('+18005551212').then(result => console.log(result));

    // Expected hash for John: ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
    hash('John').then(result => console.log(result));

    // Expected hash for Doe: eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
    hash('Doe').then(result => console.log(result));
  }

  main()

পাইথন

  """Provides the hashing algorithm, as well as some valid hashes of sample data for testing.

  Supports: Python 2, Python 3

  Sample hashes:

    - Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
    - Phone '+18005551212':   YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
    - First name 'John':      ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
    - Last name 'Doe':        eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
  """

  import base64
  import hashlib

  def hash(token):
  # Generates a base64-encoded SHA-256 hash of a normalized input string.
    return base64.b64encode(
        hashlib.sha256(
            token.strip().lower().encode('utf-8')).digest()).decode('utf-8')

  def print_hash(token, expected=None):
  # Computes and displays the hash of a token, with optional validation.
    hashed = hash(token)

    if expected is not None and hashed != expected:
      print(
          'ERROR: Incorrect hash for token "{}". Expected "{}", got "{}"'.format(
              token, expected, hashed))
      return

    print('Hash: "{}"\t(Token: {})'.format(hashed, token))

  def main():
  # Tests the hash function with sample tokens and expected results.
    print_hash(
        'test@gmail.com', expected='h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=')
    print_hash(
        '+18005551212', expected='YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=')
    print_hash('John', expected='ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=')
    print_hash('Doe', expected='eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=')

  if __name__ == '__main__':
    main()

যাও

  /*
  Provides the hashing algorithm, as well as some valid hashes of sample data for testing.

  Sample hashes:

    - Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
    - Phone '+18005551212':   YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
    - First name 'John':      ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
    - Last name 'Doe':        eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
  */
  package main

  import (
    "crypto/sha256"
    "encoding/base64"
    "fmt"
    "strings"
  )

  // Hash hashes an email, phone, first name, or last name into the correct format.
  func Hash(token string) string {
    formatted := strings.TrimSpace(strings.ToLower(token))
    hashed := sha256.Sum256([]byte(formatted))
    encoded := base64.StdEncoding.EncodeToString(hashed[:])
    return encoded
  }

  // PrintHash prints the hash for a token.
  func PrintHash(token string) {
    fmt.Printf("Hash: \"%s\"\t(Token: %s)\n", Hash(token), token)

  }

  func main() {
    PrintHash("test@gmail.com")
    PrintHash("+18005551212")
    PrintHash("John")
    PrintHash("Doe")
  }

জাভা

  package updm.hashing;

  import static java.nio.charset.StandardCharsets.UTF_8;

  import java.security.MessageDigest;
  import java.security.NoSuchAlgorithmException;
  import java.util.Base64;

  /**
  * Example of the hashing algorithm.
  *
  * <p>Sample hashes:
  *
  * <ul>
  *   <li>Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
  *   <li>Phone '+18005551212': YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
  *   <li>First name 'John': ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
  *   <li>Last name 'Doe': eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
  * </ul>
  */
  public final class HashExample {

  private HashExample() {}

  public static String hash(String token) {
    // Normalizes and hashes the input token using SHA-256 and Base64 encoding.
    String formattedToken = token.toLowerCase().strip();

    byte[] hash;
    try {
      hash = MessageDigest.getInstance("SHA-256").digest(formattedToken.getBytes(UTF_8));
    } catch (NoSuchAlgorithmException e) {
      throw new IllegalStateException("SHA-256 not supported", e);
    }

    return Base64.getEncoder().encodeToString(hash);
  }

  public static void printHash(String token) {
    // Calculates and prints the hash for the given token.
    System.out.printf("Hash: \"%s\"\t(Token: %s)\n", hash(token), token);
  }

  public static void main(String[] args) {
    // Executes hash calculations and prints results for sample tokens.
    printHash("test@gmail.com");
    printHash("+18005551212");
    printHash("John");
    printHash("Doe");
  }
  }

এসকিউএল

  /*
  Provides the hashing algorithm, as well as some valid hashes of sample data for testing.

  The following code uses Google Standard SQL and can be run on BigQuery to generate match tables from unhashed data.

  Sample hashes:

    - Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
    - Phone '+18005551212':   YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
    - First name 'John':      ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
    - Last name 'Doe':        eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=

  The unhashed input table schema is assumed to be:

  - Column name: UserID, Type: String
  - Column name: Email, Type: String
  - Column name: Phone, Type: String
  - Column name: FirstName, Type: String
  - Column name: LastName, Type: String
  - Column name: PostalCode, Type: String
  - Column name: CountryCode, Type: String
  */

  -- Creates a new table with Base64-encoded SHA-256 hashes of specified columns.
  CREATE TABLE `your_project_name.your_dataset_name.output_hashed_table_name`
  AS
  SELECT
    UserID,
    TO_BASE64(SHA256(LOWER(Email))) AS Email,
    TO_BASE64(SHA256(Phone)) AS Phone,
    TO_BASE64(SHA256(LOWER(FirstName))) AS FirstName,
    TO_BASE64(SHA256(LOWER(LastName))) AS LastName,
    PostalCode,
    CountryCode,
  FROM
    `your_project_name.your_dataset_name.input_unhashed_table_name`;

কী যোগ দিন

ব্যবহারকারী-প্রদত্ত ডেটার কিছু সংমিশ্রণ অন্যদের তুলনায় শক্তিশালী। নিম্নে আপেক্ষিক শক্তি দ্বারা র‌্যাঙ্ক করা বিভিন্ন ব্যবহারকারী-প্রদত্ত ডেটা সংমিশ্রণের একটি তালিকা রয়েছে। আপনি যদি একটি ঠিকানা ব্যবহার করেন, তাহলে আপনাকে অবশ্যই অন্তর্ভুক্ত করতে হবে: প্রথম নাম, পদবি, দেশ এবং জিপ কোড৷

  1. ইমেল, ফোন, ঠিকানা (সবচেয়ে শক্তিশালী)
  2. ফোন, ঠিকানা
  3. ইমেইল, ঠিকানা
  4. ইমেইল, ফোন
  5. ঠিকানা
  6. ফোন
  7. ইমেল (সবচেয়ে দুর্বল)

একটি ম্যাচ টেবিল তৈরি করুন

  1. রিপোর্টে ক্লিক করুন > রিপোর্ট তৈরি করুন > ব্যক্তিগত ক্লাউড ম্যাচ টেবিল জেনারেশন > টেমপ্লেট ব্যবহার করুন ঐচ্ছিক: যদি আপনার ডেটা ইতিমধ্যে হ্যাশ না হয় তাহলে আপনি হ্যাশিং সহ ব্যক্তিগত ক্লাউড ম্যাচ টেবিল জেনারেশন নির্বাচন করতে পারেন।

    // Create a new match table using your first party data with this template.
    
    /* Parameters:
    Manually remove all the parameters tagged with @ prefix and replace them with
    column names from your first party table:
    *   @user_id
    *   @email
    *   @phone
    *   @first_name
    *   @last_name
    *   @country_code
    *   @postal_code
    
    And your BigQuery table information:
    *   @my_project: Your BigQuery project where the first party table is.
    *   @my_dataset: Your dataset where the first party table is.
    *   @my_first_party_table: Your first party table.
    */
    
    CREATE OR REPLACE TABLE adh.updm_match_table AS (
    SELECT CAST(@user_id AS BYTES) AS user_id,
          @email AS email,
          @phone AS phone,
          @first_name AS first_name,
          @last_name AS last_name,
          @country_code AS country,
          @postal_code AS zip_code
    FROM `@my_project.@my_dataset.@my_first_party_table`
    );
    
  2. সঠিক অ্যালিয়াসিং প্রদান করতে আপনার কলামের নামের সাথে প্যারামিটার নামগুলি প্রতিস্থাপন করুন।

  3. গোপনীয়তা গোলমাল সেটিং টগল করুন "ডিফ চেক ব্যবহার করুন"।

  4. আপনি কত ঘন ঘন আপনার ম্যাচ টেবিল রিফ্রেশ চান তার জন্য একটি ফ্রিকোয়েন্সি সেট করতে সময়সূচী সেট করুন ক্লিক করুন। প্রতিটি রান বর্তমান ম্যাচ টেবিল ওভাররাইট করবে।

ক্যোয়ারী মিলেছে ডেটা

ম্যাচ টেবিল জিজ্ঞাসা

যখন আপনার মিল টেবিলে গোপনীয়তা পরীক্ষাগুলি সন্তুষ্ট করার জন্য পর্যাপ্ত ডেটা থাকে, আপনি টেবিলের বিরুদ্ধে প্রশ্নগুলি চালানোর জন্য প্রস্তুত।

প্রথম পক্ষের ডেটার (1PD) মূল টেবিলটি my_data দ্বারা প্রতিনিধিত্ব করা হয়। এতে ব্যক্তিগতভাবে সনাক্তযোগ্য তথ্য (PII) এবং নন-PII ডেটা উভয়ই অন্তর্ভুক্ত রয়েছে। মূল সারণী ব্যবহার করে আপনার প্রতিবেদনগুলিকে আরও অন্তর্দৃষ্টি দিয়ে উন্নত করতে পারে, কারণ এটি একটি মিল টেবিলের সাথে তুলনা করলে স্কোপের সমস্ত 1PD ডেটা উপস্থাপন করে৷

একটি user_id ফিল্ড ধারণকারী বিজ্ঞাপন ডেটা হাব স্কিমার প্রতিটি টেবিলের সাথে একটি ম্যাচ টেবিল থাকে। উদাহরণস্বরূপ, adh.google_ads_impressions টেবিলের জন্য, Ads Data Hub এছাড়াও adh.google_ads_impressions_updm নামে একটি ম্যাচ টেবিল তৈরি করে যাতে আপনার ব্যবহারকারী আইডি রয়েছে। নীতি-বিচ্ছিন্ন টেবিলের জন্য আলাদা ম্যাচ টেবিল তৈরি করা হয়। উদাহরণ স্বরূপ, adh.google_ads_impressions_policy_isolated_youtube টেবিলের জন্য, বিজ্ঞাপন ডেটা হাব আপনার ব্যবহারকারী আইডি সমন্বিত adh.google_ads_impressions_policy_isolated_youtube_updm নামে একটি মিল টেবিল তৈরি করে।

এই সারণীগুলিতে মূল টেবিলে উপলব্ধ ব্যবহারকারীদের একটি উপসেট রয়েছে, যেখানে user_id এর সাথে একটি মিল রয়েছে। উদাহরণস্বরূপ, যদি মূল টেবিলে ব্যবহারকারী A এবং ব্যবহারকারী B এর ডেটা থাকে, কিন্তু শুধুমাত্র ব্যবহারকারী A মিলে যায়, তাহলে ব্যবহারকারী B ম্যাচ টেবিলে থাকবে না।

মিল টেবিলে customer_data_user_id নামে একটি অতিরিক্ত কলাম রয়েছে, যা ব্যবহারকারী শনাক্তকারীকে BYTES হিসাবে সংরক্ষণ করে।

আপনার প্রশ্ন লেখার সময় ক্ষেত্রের ধরন বিবেচনা করা গুরুত্বপূর্ণ। SQL তুলনা অপারেটররা আশা করে যে আপনি যে লিটারেলগুলি তুলনা করছেন তা একই ধরণের। আপনার প্রথম পক্ষের ডেটা টেবিলে user_id কীভাবে সংরক্ষিত হয় তার উপর নির্ভর করে, ডেটা মেলানোর আগে আপনাকে টেবিলের মানগুলিকে এনকোড করতে হতে পারে। সফল ম্যাচের জন্য আপনাকে BYTES-এ আপনার জয়েন কী কাস্ট করতে হবে:

JOIN ON
  adh.google_ads_impressions_updm.customer_data_user_id = CAST(my_data.user_id AS BYTES)

অতিরিক্তভাবে, SQL-এ স্ট্রিং তুলনাগুলি ক্যাপিটালাইজেশনের জন্য সংবেদনশীল, তাই আপনাকে আপনার তুলনার উভয় পাশে স্ট্রিংগুলিকে এনকোড করতে হতে পারে যাতে সেগুলি সঠিকভাবে তুলনা করা যায়।

নমুনা প্রশ্ন

মিলে যাওয়া ব্যবহারকারীদের গণনা করুন

এই কোয়েরিটি আপনার Google বিজ্ঞাপন ইম্প্রেশন টেবিলে মিলে যাওয়া ব্যবহারকারীর সংখ্যা গণনা করে।

/* Count matched users in Google Ads impressions table */

SELECT COUNT(DISTINCT user_id)
FROM adh.google_ads_impressions_updm

ম্যাচের হার গণনা করুন

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

/* Calculate the UPDM match rate */

CREATE TEMP TABLE total_events OPTIONS(privacy_checked_export=TRUE) AS
SELECT
  customer_id,
  COUNT(*) AS n
FROM adh.google_ads_impressions
WHERE is_updm_eligible
GROUP BY 1;

CREATE TEMP TABLE matched_events OPTIONS(privacy_checked_export=TRUE) AS
SELECT
  customer_id,
  COUNT(*) AS n
FROM adh.google_ads_impressions_updm
GROUP BY 1;

SELECT
  customer_id,
  SAFE_DIVIDE(matched_events.n, total_events.n) AS match_rate
FROM total_events
LEFT JOIN matched_events
  USING (customer_id)

প্রথম পক্ষ এবং Google বিজ্ঞাপন ডেটাতে যোগ দিন

এই ক্যোয়ারীটি দেখায় কিভাবে Google Ads ডেটার সাথে প্রথম পক্ষের ডেটাতে যোগ দিতে হয়:

/* Join first-party data with Google Ads data. The customer_data_user_id field
contains your ID as BYTES. You need to cast your join key into BYTES for
successful matches. */

SELECT
  inventory_type,
  COUNT(*) AS impressions
FROM
  adh.yt_reserve_impressions_updm AS google_data_imp
LEFT JOIN
  `my_data`
ON
  google_data_imp.customer_data_user_id = CAST(my_data.user_id AS BYTES)
GROUP BY
  inventory_type

UPDM FAQs

UPDM সম্পর্কিত প্রায়শই জিজ্ঞাসিত প্রশ্নগুলির একটি তালিকার জন্য, UPDM FAQs দেখুন৷

,

ব্যবহারকারী-প্রদত্ত ডেটা ম্যাচিং (UPDM) প্রথম-পক্ষের ডেটাতে যোগ দেয় যা আপনি কোনও ব্যবহারকারী সম্পর্কে সংগ্রহ করেছেন—যেমন আপনার ওয়েবসাইট, অ্যাপস বা ফিজিক্যাল স্টোর থেকে তথ্য—Google-এর মালিকানাধীন এবং পরিচালিত ডেটা সহ সমস্ত Google বিজ্ঞাপন ডেটা জুড়ে একই ব্যবহারকারীর সাইন-ইন করা কার্যকলাপের সাথে। এর মধ্যে রয়েছে Google Marketing Platform (GMP) পণ্যের মাধ্যমে কেনা ডেটা, উদাহরণস্বরূপ, YouTube Display & Video 360 ব্যবহার করে কেনা। অন্যান্য GMP পণ্য যা Google-এর মালিকানাধীন এবং পরিচালিত নয় তা সমর্থিত নয়।

ব্যবহারকারী-প্রদত্ত ডেটা ম্যাচিংয়ের জন্য যোগ্য হতে, বিজ্ঞাপন ইভেন্টটিকে অবশ্যই Google বিজ্ঞাপন ডেটাতে সাইন-ইন করা ব্যবহারকারীর সাথে লিঙ্ক করতে হবে।

এই দস্তাবেজটি ব্যবহারকারী-প্রদত্ত ডেটা ম্যাচিং বৈশিষ্ট্য বর্ণনা করে এবং সেটআপ এবং ব্যবহারের নির্দেশিকা প্রদান করে।

ব্যক্তিগত ক্লাউড ম্যাচ ওভারভিউ

মূল্যবান বিজ্ঞাপনের অন্তর্দৃষ্টি অর্জনের জন্য প্রায়ই একাধিক উত্স থেকে ডেটা একত্রিত করার প্রয়োজন হয়৷ এই ডেটা পাইপলাইন সমস্যার আপনার নিজস্ব সমাধান তৈরি করতে উল্লেখযোগ্য সময় বিনিয়োগ এবং প্রকৌশল বিনিয়োগ প্রয়োজন। বিজ্ঞাপন ডেটা হাব-এ ব্যক্তিগত ক্লাউড ম্যাচ BigQuery-এ একটি ম্যাচ টেবিল তৈরি করার জন্য একটি বিজ্ঞাপন ডেটা হাব কোয়েরি টেমপ্লেট প্রদান করে এই প্রক্রিয়াটিকে স্ট্রিমলাইন করে যা আপনার বিজ্ঞাপন ডেটা হাব কোয়েরিতে ব্যবহার করা যেতে পারে আপনার প্রথম পক্ষের ডেটার সাথে আপনার বিজ্ঞাপনের ডেটা মেলাতে। প্রথম-পক্ষের ডেটা দিয়ে আপনার প্রশ্নগুলিকে সমৃদ্ধ করা গ্রাহকদের আরও সমৃদ্ধ অভিজ্ঞতা প্রদান করতে পারে এবং শিল্প-ব্যাপী বিজ্ঞাপন-ট্র্যাকিং পরিবর্তনগুলির জন্য আরও প্রতিরোধী।

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

প্রক্রিয়া সারাংশ

  1. ডেটা ইনজেশন এবং ম্যাচিং এর সেটআপ
    • নিশ্চিত করুন যে আপনার প্রথম-পক্ষের ডেটা BigQuery-এ অবস্থিত এবং আপনার পরিষেবা অ্যাকাউন্টে এটি পড়ার অ্যাক্সেস রয়েছে। ডেটা ইনজেশন সেট আপ দেখুন।
  2. প্রথম পক্ষের ডেটা ইনজেশন এবং ম্যাচিং
    • আপনি আপনার BigQuery ডেটাসেটে আপনার প্রথম পক্ষের ডেটা ফর্ম্যাট এবং আপলোড করুন।
    • আপনি একটি ব্যক্তিগত ক্লাউড ম্যাচ বিশ্লেষণ ক্যোয়ারী তৈরি করে এবং একটি সময়সূচী সেট করে একটি ডেটা-মেলিংয়ের অনুরোধ শুরু করেন।
    • Google আপনার প্রোজেক্ট এবং Google-এর মালিকানাধীন ডেটার মধ্যে ডেটা যোগ করে যাতে Google-এর ইউজার আইডি থাকে এবং ম্যাচ টেবিল তৈরি এবং আপডেট করতে ব্যবহারকারী-প্রদত্ত ডেটা হ্যাশ করে।
    • প্রথম পক্ষের ডেটা ইনজেস্ট দেখুন
  3. বিজ্ঞাপন ডেটা হাবে চলমান প্রশ্ন, মিলে যাওয়া ডেটার উপর ভিত্তি করে
    • আপনি বিজ্ঞাপন ডেটা হাবে যেভাবে নিয়মিত কোয়েরি চালান ঠিক একইভাবে আপনি ম্যাচ টেবিলের বিরুদ্ধে কোয়েরি চালান। ক্যোয়ারী মিলে যাওয়া ডেটা দেখুন।

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

গ্রাহকের তথ্য সংগ্রহ করা হচ্ছে

ব্যবহারকারী-প্রদত্ত ডেটা ম্যাচিং ব্যবহার করার সময়, আপনাকে অবশ্যই প্রথম পক্ষের ডেটা আপলোড করতে হবে৷ এটি হতে পারে আপনার ওয়েবসাইট, অ্যাপস, ফিজিক্যাল স্টোর থেকে সংগ্রহ করা তথ্য অথবা একজন গ্রাহক সরাসরি আপনার সাথে শেয়ার করেছেন এমন কোনো তথ্য।

আপনাকে অবশ্যই:

  • নিশ্চিত করুন যে আপনার গোপনীয়তা নীতি প্রকাশ করে যে আপনি আপনার পক্ষ থেকে পরিষেবাগুলি সম্পাদন করার জন্য তৃতীয় পক্ষের সাথে গ্রাহকের ডেটা ভাগ করেন এবং যেখানে আইনিভাবে প্রয়োজন সেখানে আপনি এই ধরনের ভাগ করার জন্য সম্মতি পান
  • গ্রাহক ডেটা আপলোড করতে শুধুমাত্র Google-এর অনুমোদিত API বা ইন্টারফেস ব্যবহার করুন
  • প্রযোজ্য হতে পারে এমন যেকোন স্ব-নিয়ন্ত্রক বা শিল্প কোড সহ সমস্ত প্রযোজ্য আইন ও প্রবিধান মেনে চলুন

প্রথম পক্ষের সম্মতির স্বীকৃতি

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

নোট করুন যে একই গুগল পরিষেবা ক্যোয়ারী বিধিগুলি যা বিশ্লেষণ প্রশ্নের ক্ষেত্রে প্রযোজ্য তাও আপডেটম প্রশ্নের ক্ষেত্রেও প্রযোজ্য। উদাহরণস্বরূপ, আপনি যখন কোনও ম্যাচের টেবিল তৈরি করেন তখন আপনি EEA এর ব্যবহারকারীদের উপর ক্রস-পরিষেবা অনুসন্ধান চালাতে পারবেন না।

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

ডেটা সাইজ

শেষ ব্যবহারকারীর গোপনীয়তা রক্ষা করতে, ব্যবহারকারী-সরবরাহিত ডেটা ম্যাচিং আপনার ডেটার আকার সম্পর্কিত এই প্রয়োজনীয়তাগুলি কার্যকর করে:

  • আপনাকে অবশ্যই আপনার ব্যবহারকারীর তালিকায় কমপক্ষে 1000 রেকর্ড আপলোড করতে হবে।
  • আপনার তালিকা অবশ্যই সর্বাধিক সংখ্যক রেকর্ডের বেশি হবে না। সর্বাধিক ডেটা সীমা সম্পর্কে জানতে, আপনার গুগল প্রতিনিধির কাছে পৌঁছান।

ডেটা ইনজেশন সেট আপ করুন

আপনি শুরু করার আগে, নিশ্চিত করুন:

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

এর বাইরেও, প্রাইভেট ক্লাউড ম্যাচের কোনও অতিরিক্ত অন বোর্ডিং নেই। আপনি যদি বিশ্লেষণ ক্যোয়ারী চালাতে পারেন তবে আপনি একটি ব্যক্তিগত ক্লাউড ম্যাচের ক্যোয়ারী চালাতে পারেন।

প্রথম পক্ষের ডেটা ইনজেস্ট এবং মেলে

ইনপুট জন্য ফর্ম্যাট ডেটা

আপনার ডেটা অবশ্যই সঠিকভাবে মেলে এই ফর্ম্যাটিং প্রয়োজনীয়তা মেনে চলতে হবে:

  • নিম্নলিখিত ইনপুট ক্ষেত্রের বিবরণগুলিতে যেখানে নির্দেশিত হয়েছে, আপনাকে অবশ্যই SHA256 হ্যাশিং ব্যবহার করে আপলোড করতে হবে।
  • ইনপুট ক্ষেত্রগুলি অবশ্যই স্ট্রিং হিসাবে ফর্ম্যাট করা উচিত। উদাহরণস্বরূপ, আপনি যদি বেস 64 এনকোডিং ফাংশন ( to_base64 ) এর সাথে বিগকুইয়ের SHA256 হ্যাশ ফাংশন ব্যবহার করছেন তবে নিম্নলিখিত রূপান্তরটি ব্যবহার করুন: TO_BASE64(SHA256(user_data))
  • UDDM বেস 64 এনকোডিং সমর্থন করে। আপনার বিজ্ঞাপন ডেটা হাব ক্যোয়ারিতে ব্যবহৃত ডিকোডিংয়ের সাথে আপনাকে অবশ্যই আপনার প্রথম পক্ষের ডেটার এনকোডিং সারিবদ্ধ করতে হবে। আপনি যদি আপনার প্রথম পক্ষের ডেটা এনকোডিং পরিবর্তন করেন তবে আপনাকে অবশ্যই একই বেস থেকে ডিকোড করতে আপনার বিজ্ঞাপন ডেটা হাব ক্যোয়ারী আপডেট করতে হবে। নিম্নলিখিত উদাহরণগুলি বেস 64 এনকোডিং ব্যবহার করে।

ইউজার আইডি

  • সরল পাঠ্য
  • হ্যাশিং: কিছুই নেই

ইমেইল

  • শীর্ষস্থানীয় এবং ট্রেলিং হোয়াইটস্পেসগুলি সরান
  • সমস্ত অক্ষর ছোট
  • সমস্ত ইমেল ঠিকানার জন্য একটি ডোমেন নাম অন্তর্ভুক্ত করুন, যেমন Gmail.com বা hotmail.co.jp
  • অ্যাকসেন্টগুলি সরান - উদাহরণস্বরূপ, è, é, ê, বা ë থেকে ই পরিবর্তন করুন
  • gmail.com এবং googlemail.com ইমেল ঠিকানাগুলিতে ডোমেন নামের পূর্বে থাকা সমস্ত পিরিয়ড (।) সরান
  • হ্যাশিং: বেস 64 এনকোডেড SHA256

বৈধ: TO_BASE64(SHA256("jeffersonloveshiking@gmail.com"))

অবৈধ: TO_BASE64(SHA256(" Jéfferson.Lôves.Hiking@gmail.com "))

ফোন

  • স্ট্রিপ হোয়াইটস্পেস
  • E.164 ফর্ম্যাটে ফর্ম্যাট - মার্কিন উদাহরণ: +14155552671, যুক্তরাজ্যের উদাহরণ: +442071838750
  • দেশের কোডের আগে "+" ব্যতীত সমস্ত বিশেষ অক্ষর সরান
  • হ্যাশিং: বেস 64 এনকোডেড SHA256

বৈধ: TO_BASE64(SHA256("+18005550101"))

অবৈধ: TO_BASE64(SHA256("(800) 555-0101"))

প্রথম নাম

  • স্ট্রিপ হোয়াইটস্পেস
  • সমস্ত অক্ষর ছোট
  • সমস্ত উপসর্গগুলি সরান উদাহরণ-উদাহরণ মিসেস, মিঃ, মিসেস, ড।
  • অ্যাকসেন্টগুলি সরিয়ে ফেলবেন না - উদাহরণস্বরূপ, è, é, ê, বা ë
  • হ্যাশিং: বেস 64 এনকোডেড SHA256

বৈধ: TO_BASE64(SHA256("daní"))

অবৈধ: TO_BASE64(SHA256("Mrs. Daní"))

পদবি

  • স্ট্রিপ হোয়াইটস্পেস
  • সমস্ত অক্ষর ছোট
  • সমস্ত প্রত্যয় সরান, উদাহরণ জুনিয়র, সিনিয়র, ২ য়, তৃতীয়, II, III, পিএইচডি, এমডি
  • অ্যাকসেন্টগুলি সরিয়ে ফেলবেন না - উদাহরণস্বরূপ, è, é, ê, বা ë
  • হ্যাশিং: বেস 64 এনকোডেড SHA256

বৈধ: TO_BASE64(SHA256("délacruz"))

অবৈধ: TO_BASE64(SHA256("dé la Cruz, Jr."))

দেশ

  • আপনার গ্রাহকের সমস্ত ডেটা একই দেশ থেকে থাকলেও দেশ কোড অন্তর্ভুক্ত করুন
  • দেশের ডেটা হ্যাশ করবেন না
  • আইএসও 3166-1 আলফা -2 দেশ কোড ব্যবহার করুন
  • হ্যাশিং: কিছুই নেই

বৈধ: US

অবৈধ: United States of America বা USA

জিপ কোড

  • জিপ কোড ডেটা হ্যাশ করবেন না
  • মার্কিন যুক্তরাষ্ট্র এবং আন্তর্জাতিক জিপ এবং ডাক কোড উভয়ই অনুমোদিত
  • আমাদের জন্য:
    • 5 ডিজিট কোড অনুমোদিত - উদাহরণস্বরূপ, 94043
    • 4 অঙ্কের এক্সটেনশন অনুসরণ করে 5 টি অঙ্কেরও অনুমোদিত-উদাহরণস্বরূপ, 94043-1351 বা 940431351
  • অন্যান্য সমস্ত দেশের জন্য:
    • কোনও ফর্ম্যাটিংয়ের প্রয়োজন নেই (ছোট হাতের প্রয়োজন, বা স্পেস এবং বিশেষ অক্ষরগুলি অপসারণের প্রয়োজন নেই)
    • ডাক কোড এক্সটেনশনগুলি ছেড়ে দিন
  • হ্যাশিং: কিছুই নেই

হ্যাশ বৈধতা এবং ডেটা এনকোডিং

আপনার ডেটা সঠিকভাবে ফর্ম্যাট করা হয়েছে তা নিশ্চিত করতে আপনি নিম্নলিখিত হ্যাশ বৈধতা স্ক্রিপ্টগুলি ব্যবহার করতে পারেন।

জাভাস্ক্রিপ্ট

  /**
   * @fileoverview Provides the hashing algorithm, as well as some valid hashes of
   * sample data for testing.
  */

  async function hash(token) {
    // Removes leading or trailing spaces and converts all characters to lowercase.
    const formattedToken = token.trim().toLowerCase();
    // Hashes the formatted string using the SHA-256 hashing algorithm.
    const hashBuffer = await crypto.subtle.digest(
        'SHA-256', (new TextEncoder()).encode(formattedToken));
    // Converts the hash buffer to a base64-encoded string and returns it.
    const base64Str = btoa(String.fromCharCode(...new Uint8Array(hashBuffer)));
    return base64Str;
  }

  function main() {
    // Expected hash for test@gmail.com:
    // h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
    hash('test@gmail.com').then(result => console.log(result));

    // Expected hash for +18005551212:
    // YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
    hash('+18005551212').then(result => console.log(result));

    // Expected hash for John: ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
    hash('John').then(result => console.log(result));

    // Expected hash for Doe: eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
    hash('Doe').then(result => console.log(result));
  }

  main()

পাইথন

  """Provides the hashing algorithm, as well as some valid hashes of sample data for testing.

  Supports: Python 2, Python 3

  Sample hashes:

    - Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
    - Phone '+18005551212':   YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
    - First name 'John':      ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
    - Last name 'Doe':        eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
  """

  import base64
  import hashlib

  def hash(token):
  # Generates a base64-encoded SHA-256 hash of a normalized input string.
    return base64.b64encode(
        hashlib.sha256(
            token.strip().lower().encode('utf-8')).digest()).decode('utf-8')

  def print_hash(token, expected=None):
  # Computes and displays the hash of a token, with optional validation.
    hashed = hash(token)

    if expected is not None and hashed != expected:
      print(
          'ERROR: Incorrect hash for token "{}". Expected "{}", got "{}"'.format(
              token, expected, hashed))
      return

    print('Hash: "{}"\t(Token: {})'.format(hashed, token))

  def main():
  # Tests the hash function with sample tokens and expected results.
    print_hash(
        'test@gmail.com', expected='h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=')
    print_hash(
        '+18005551212', expected='YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=')
    print_hash('John', expected='ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=')
    print_hash('Doe', expected='eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=')

  if __name__ == '__main__':
    main()

যাও

  /*
  Provides the hashing algorithm, as well as some valid hashes of sample data for testing.

  Sample hashes:

    - Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
    - Phone '+18005551212':   YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
    - First name 'John':      ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
    - Last name 'Doe':        eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
  */
  package main

  import (
    "crypto/sha256"
    "encoding/base64"
    "fmt"
    "strings"
  )

  // Hash hashes an email, phone, first name, or last name into the correct format.
  func Hash(token string) string {
    formatted := strings.TrimSpace(strings.ToLower(token))
    hashed := sha256.Sum256([]byte(formatted))
    encoded := base64.StdEncoding.EncodeToString(hashed[:])
    return encoded
  }

  // PrintHash prints the hash for a token.
  func PrintHash(token string) {
    fmt.Printf("Hash: \"%s\"\t(Token: %s)\n", Hash(token), token)

  }

  func main() {
    PrintHash("test@gmail.com")
    PrintHash("+18005551212")
    PrintHash("John")
    PrintHash("Doe")
  }

জাভা

  package updm.hashing;

  import static java.nio.charset.StandardCharsets.UTF_8;

  import java.security.MessageDigest;
  import java.security.NoSuchAlgorithmException;
  import java.util.Base64;

  /**
  * Example of the hashing algorithm.
  *
  * <p>Sample hashes:
  *
  * <ul>
  *   <li>Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
  *   <li>Phone '+18005551212': YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
  *   <li>First name 'John': ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
  *   <li>Last name 'Doe': eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
  * </ul>
  */
  public final class HashExample {

  private HashExample() {}

  public static String hash(String token) {
    // Normalizes and hashes the input token using SHA-256 and Base64 encoding.
    String formattedToken = token.toLowerCase().strip();

    byte[] hash;
    try {
      hash = MessageDigest.getInstance("SHA-256").digest(formattedToken.getBytes(UTF_8));
    } catch (NoSuchAlgorithmException e) {
      throw new IllegalStateException("SHA-256 not supported", e);
    }

    return Base64.getEncoder().encodeToString(hash);
  }

  public static void printHash(String token) {
    // Calculates and prints the hash for the given token.
    System.out.printf("Hash: \"%s\"\t(Token: %s)\n", hash(token), token);
  }

  public static void main(String[] args) {
    // Executes hash calculations and prints results for sample tokens.
    printHash("test@gmail.com");
    printHash("+18005551212");
    printHash("John");
    printHash("Doe");
  }
  }

এসকিউএল

  /*
  Provides the hashing algorithm, as well as some valid hashes of sample data for testing.

  The following code uses Google Standard SQL and can be run on BigQuery to generate match tables from unhashed data.

  Sample hashes:

    - Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
    - Phone '+18005551212':   YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
    - First name 'John':      ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
    - Last name 'Doe':        eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=

  The unhashed input table schema is assumed to be:

  - Column name: UserID, Type: String
  - Column name: Email, Type: String
  - Column name: Phone, Type: String
  - Column name: FirstName, Type: String
  - Column name: LastName, Type: String
  - Column name: PostalCode, Type: String
  - Column name: CountryCode, Type: String
  */

  -- Creates a new table with Base64-encoded SHA-256 hashes of specified columns.
  CREATE TABLE `your_project_name.your_dataset_name.output_hashed_table_name`
  AS
  SELECT
    UserID,
    TO_BASE64(SHA256(LOWER(Email))) AS Email,
    TO_BASE64(SHA256(Phone)) AS Phone,
    TO_BASE64(SHA256(LOWER(FirstName))) AS FirstName,
    TO_BASE64(SHA256(LOWER(LastName))) AS LastName,
    PostalCode,
    CountryCode,
  FROM
    `your_project_name.your_dataset_name.input_unhashed_table_name`;

কীগুলিতে যোগদান করুন

ব্যবহারকারী-সরবরাহিত ডেটার কিছু সংমিশ্রণ অন্যদের চেয়ে শক্তিশালী। নিম্নলিখিতটি বিভিন্ন ব্যবহারকারী-সরবরাহিত ডেটা সংমিশ্রণের একটি তালিকা রয়েছে যা আপেক্ষিক শক্তি দ্বারা র‌্যাঙ্ক করা হয়েছে। আপনি যদি কোনও ঠিকানা ব্যবহার করেন তবে আপনাকে অবশ্যই অন্তর্ভুক্ত করতে হবে: প্রথম নাম, শেষ নাম, দেশ এবং জিপ কোড।

  1. ইমেল, ফোন, ঠিকানা (সবচেয়ে শক্তিশালী)
  2. ফোন, ঠিকানা
  3. ইমেল, ঠিকানা
  4. ইমেইল, ফোন
  5. ঠিকানা
  6. ফোন
  7. ইমেল (দুর্বল)

একটি ম্যাচ টেবিল তৈরি করুন

  1. প্রতিবেদনগুলি ক্লিক করুন> প্রতিবেদন তৈরি করুন> প্রাইভেট ক্লাউড ম্যাচ টেবিল জেনারেশন> টেম্পলেট ব্যবহার করুন option চ্ছিক: আপনার ডেটা ইতিমধ্যে হ্যাশ না থাকলে আপনি বেসরকারী ক্লাউড ম্যাচ টেবিল প্রজন্ম নির্বাচন করতে পারেন।

    // Create a new match table using your first party data with this template.
    
    /* Parameters:
    Manually remove all the parameters tagged with @ prefix and replace them with
    column names from your first party table:
    *   @user_id
    *   @email
    *   @phone
    *   @first_name
    *   @last_name
    *   @country_code
    *   @postal_code
    
    And your BigQuery table information:
    *   @my_project: Your BigQuery project where the first party table is.
    *   @my_dataset: Your dataset where the first party table is.
    *   @my_first_party_table: Your first party table.
    */
    
    CREATE OR REPLACE TABLE adh.updm_match_table AS (
    SELECT CAST(@user_id AS BYTES) AS user_id,
          @email AS email,
          @phone AS phone,
          @first_name AS first_name,
          @last_name AS last_name,
          @country_code AS country,
          @postal_code AS zip_code
    FROM `@my_project.@my_dataset.@my_first_party_table`
    );
    
  2. যথাযথ আলিয়াসিং সরবরাহ করতে আপনার কলামের নামগুলির সাথে প্যারামিটারের নামগুলি প্রতিস্থাপন করুন।

  3. "ডিফ চেকগুলি ব্যবহার করুন" এ গোপনীয়তার শব্দ সেটিংটি টগল করুন।

  4. আপনি কতবার আপনার ম্যাচের টেবিলটি রিফ্রেশ করতে চান তার জন্য একটি ফ্রিকোয়েন্সি সেট করতে সেট শিডিয়ুল ক্লিক করুন। প্রতিটি রান বর্তমান ম্যাচ টেবিলটি ওভাররাইট করবে।

ক্যোয়ারী ম্যাচড ডেটা

ম্যাচের টেবিলগুলি জিজ্ঞাসা করুন

যখন আপনার ম্যাচের টেবিলগুলিতে গোপনীয়তা চেকগুলি পূরণ করার জন্য পর্যাপ্ত ডেটা থাকে, আপনি টেবিলগুলির বিরুদ্ধে প্রশ্ন চালাতে প্রস্তুত।

প্রথম পক্ষের ডেটা (1 পিডি) এর মূল টেবিলটি my_data দ্বারা প্রতিনিধিত্ব করা হয়। এর মধ্যে ব্যক্তিগতভাবে সনাক্তযোগ্য তথ্য (পিআইআই) এবং নন-পিআইআই উভয় ডেটা অন্তর্ভুক্ত রয়েছে। মূল টেবিলটি ব্যবহার করা আরও অন্তর্দৃষ্টি দিয়ে আপনার প্রতিবেদনগুলিকে উন্নত করতে পারে, কারণ এটি কোনও ম্যাচের টেবিলের সাথে তুলনা করার সময় স্কোপের সমস্ত 1 পিডি ডেটা উপস্থাপন করে।

ADS ডেটা হাব স্কিমার প্রতিটি টেবিল একটি user_id ক্ষেত্রযুক্ত একটি ম্যাচ টেবিল সহ রয়েছে। উদাহরণস্বরূপ, adh.google_ads_impressions টেবিলের জন্য, এডিএস ডেটা হাব আপনার ব্যবহারকারীর আইডি সমন্বিত adh.google_ads_impressions_updm নামে একটি ম্যাচ টেবিলও তৈরি করে। নীতি-বিচ্ছিন্ন টেবিলগুলির জন্য পৃথক ম্যাচের টেবিলগুলি তৈরি করা হয়। উদাহরণস্বরূপ, adh.google_ads_impressions_policy_isolated_youtube টেবিলের জন্য, এডিএস ডেটা হাব এছাড়াও adh.google_ads_impressions_policy_isolated_youtube_updm আপনার ব্যবহারকারী আইডি সমন্বিত একটি ম্যাচ টেবিল তৈরি করে।

এই টেবিলগুলিতে মূল টেবিলগুলিতে উপলব্ধ ব্যবহারকারীদের একটি উপসেট রয়েছে, যেখানে user_id -তে একটি মিল রয়েছে। উদাহরণস্বরূপ, যদি মূল টেবিলটিতে ব্যবহারকারী এ এবং ব্যবহারকারী বি এর জন্য ডেটা থাকে তবে কেবল ব্যবহারকারী এ এর ​​সাথে মিলে যায়, তবে ব্যবহারকারী বি ম্যাচের টেবিলে থাকবে না।

ম্যাচের টেবিলগুলিতে customer_data_user_id নামে একটি অতিরিক্ত কলাম রয়েছে, যা ব্যবহারকারী সনাক্তকারীকে বাইট হিসাবে সঞ্চয় করে।

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

JOIN ON
  adh.google_ads_impressions_updm.customer_data_user_id = CAST(my_data.user_id AS BYTES)

অতিরিক্তভাবে, এসকিউএল -এ স্ট্রিং তুলনাগুলি মূলধনের প্রতি সংবেদনশীল, সুতরাং আপনার তুলনার উভয় পক্ষের স্ট্রিংগুলি এনকোড করতে হবে যাতে তারা সঠিকভাবে তুলনা করা যায় তা নিশ্চিত করতে পারে।

নমুনা প্রশ্ন

গণনা ম্যাচ ব্যবহারকারীদের

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

/* Count matched users in Google Ads impressions table */

SELECT COUNT(DISTINCT user_id)
FROM adh.google_ads_impressions_updm

ম্যাচের হার গণনা করুন

সমস্ত ব্যবহারকারী মিলের জন্য যোগ্য নয়। উদাহরণস্বরূপ, স্বাক্ষরিত ব্যবহারকারী, শিশু এবং অচেনা ব্যবহারকারীরা UDDM এর মাধ্যমে মেলে না। আপনি আরও সঠিক আপডেটম ম্যাচের হারগুলি গণনা করতে is_updm_eligible ফিল্ডটি ব্যবহার করতে পারেন। নোট করুন যে is_updm_eligible ক্ষেত্রটি 1 অক্টোবর, 2024 থেকে শুরু হয়েছিল you আপনি এই ক্ষেত্রটি সেই তারিখের আগে ম্যাচের হারগুলি গণনা করতে ব্যবহার করতে পারবেন না।

/* Calculate the UPDM match rate */

CREATE TEMP TABLE total_events OPTIONS(privacy_checked_export=TRUE) AS
SELECT
  customer_id,
  COUNT(*) AS n
FROM adh.google_ads_impressions
WHERE is_updm_eligible
GROUP BY 1;

CREATE TEMP TABLE matched_events OPTIONS(privacy_checked_export=TRUE) AS
SELECT
  customer_id,
  COUNT(*) AS n
FROM adh.google_ads_impressions_updm
GROUP BY 1;

SELECT
  customer_id,
  SAFE_DIVIDE(matched_events.n, total_events.n) AS match_rate
FROM total_events
LEFT JOIN matched_events
  USING (customer_id)

প্রথম পক্ষ এবং গুগল বিজ্ঞাপন ডেটা যোগদান করুন

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

/* Join first-party data with Google Ads data. The customer_data_user_id field
contains your ID as BYTES. You need to cast your join key into BYTES for
successful matches. */

SELECT
  inventory_type,
  COUNT(*) AS impressions
FROM
  adh.yt_reserve_impressions_updm AS google_data_imp
LEFT JOIN
  `my_data`
ON
  google_data_imp.customer_data_user_id = CAST(my_data.user_id AS BYTES)
GROUP BY
  inventory_type

UPDM FAQS

ইউপিডিএম সম্পর্কিত FAQগুলির তালিকার জন্য, UDDM FAQs দেখুন।