مطابقة البيانات المقدَّمة من المستخدم

تجمع ميزة "مطابقة البيانات المقدّمة من المستخدِم" (UPDM) بين بيانات الطرف الأول التي جمعتها عن مستخدِم معيّن، مثل المعلومات من مواقعك الإلكترونية أو تطبيقاتك أو متاجرك، ونشاط هذا المستخدِم نفسه أثناء تسجيل الدخول إلى البيانات في جميع بيانات إعلانات Google، بما في ذلك البيانات التي تملكها Google وتديرها. ويشمل ذلك البيانات التي تم شراؤها من خلال منتجات "منصّة Google للتسويق"، مثل YouTube التي تم شراؤها باستخدام "مساحة العرض والفيديو 360". لا تتوفّر منتجات "شبكة Google الإعلانية" الأخرى التي لا تملكها Google ولا تديرها.

لتصبح مؤهَّلاً لمطابقة البيانات المقدَّمة من المستخدِم، يجب ربط حدث الإعلان بأحد المستخدِمين الذين سجّلوا الدخول في بيانات إعلانات Google.

يوضّح هذا المستند ميزة مطابقة data المقدَّمة من المستخدِم، ويقدّم إرشادات حول الإعداد والاستخدام.

نظرة عامة على "مطابقة السحابة الإلكترونية الخاصة"

غالبًا ما يتطلّب الحصول على إحصاءات إعلانية قيّمة تجميع البيانات من مصادر متعددة. يتطلّب إنشاء حلّك الخاص لحلّ مشكلة مسار بياناتك تخصيص وقت كبير وجهود هندسية كبيرة. تعمل ميزة "مطابقة" في Ads Data Hub على تسهيل هذه العملية من خلال توفير نموذج طلب بحث في Ads Data Hub لإنشاء جدول مطابقة في BigQuery يمكن استخدامه بعد ذلك في طلبات البحث في Ads Data Hub لمطابقة بيانات إعلاناتك مع بيانات الطرف الأول. يمكن أن تؤدي إثراء طلبات البحث ببيانات الطرف الأول إلى تقديم تجارب أكثر ثراءً للعملاء، كما أنّها أكثر مقاومة للتغيُّرات في تتبُّع الإعلانات على مستوى المجال.

لا تتأثر هذه الميزة بالإيقاف النهائي القادم لملفّات تعريف الارتباط التابعة لجهات خارجية، لأنّها لا تتوفّر إلا في المستودع الذي تملكه وتديره Google للمستخدمين الذين سجّلوا الدخول، وذلك لأنّها لا تتوفّر إلا في المستودع الذي تملكه وتديره Google للمستخدمين الذين سجّلوا الدخول. وبما أنّها أكثر قدرة على مقاومة التغييرات في المجال مقارنةً بالبيانات التابعة لجهات خارجية، يمكن أن تقدّم إحصاءات أكثر تفصيلاً، مما يمكن أن يؤدي إلى زيادة تفاعل العملاء.

ملخّص العملية

  1. إعداد نقل البيانات ومطابقتها
    • تأكَّد من أنّ بيانات الطرف الأول متوفّرة في BigQuery وأنّ حساب الخدمة لديه إذن بالقراءة إليها. راجِع إعداد نقل البيانات.
  2. نقل بيانات الطرف الأول ومطابقتها
    • أنت تنشئ تنسيقًا لبيانات الطرف الأول وتحملها إلى مجموعة بيانات BigQuery.
    • أنت تبدأ طلب مطابقة البيانات من خلال إنشاء طلب بحث في تحليل "مطابقة" في "سحابة خاصة" وتحديد جدول زمني.
    • تدمج Google البيانات بين مشروعك والبيانات التي تملكها Google التي تحتوي على معرّف مستخدم Google والبيانات المقدَّمة من المستخدم والمجزّأة لإنشاء جداول المطابقة وتعديلها.
    • راجِع نقل بيانات الطرف الأول.
  3. طلبات البحث الجارية في Ads Data Hub، استنادًا إلى البيانات المطابقة

التعرّف على متطلبات الخصوصية

جمع بيانات العملاء

عند استخدام ميزة "مطابقة البيانات المقدَّمة من المستخدِم"، يجب تحميل بيانات الطرف الأول. ويمكن أن تكون هذه المعلومات التي جمعتها من مواقعك الإلكترونية أو تطبيقاتك أو متاجرك أو أي معلومات شاركها معك عميل مباشرةً.

يجب تنفيذ ما يلي:

  • التأكّد من أنّ سياسة الخصوصية لديك تكشف أنّك تشارك بيانات العملاء مع جهات خارجية لتقديم خدمات نيابةً عنك، وأنّك تحصل على موافقة لهذه المشاركة إذا كان ذلك مطلوبًا قانونًا
  • استخدام واجهة برمجة تطبيقات (API) أو واجهة وافقت Google عليها فقط لتحميل بيانات العملاء
  • الالتزام بكل القوانين واللوائح السارية، بما في ذلك أي قواعد ذاتية التنظيم أو قواعد متّبعة في المجال قد تنطبق

إقرار الموافقة من الطرف الأول

لضمان تمكّنك من استخدام بيانات الطرف الأول في Ads Data Hub، عليك تأكيد حصولك على الموافقة المناسبة لمشاركة البيانات من المستخدِمين النهائيين في المنطقة الاقتصادية الأوروبية مع Google وفقًا لسياسة موافقة المستخدِم في الاتحاد الأوروبي وسياسة Ads Data Hub. ينطبق هذا الشرط على كل حساب على Ads Data Hub، ويجب تعديله في كل مرة تحمِّل فيها بيانات جديدة للطرف الأول. يمكن لأي مستخدم واحد تقديم هذا الإقرار نيابةً عن الحساب بأكمله.

يُرجى العِلم أنّ قواعد طلبات البحث نفسها في خدمة Google التي تنطبق على طلبات البحث التحليلية تنطبق أيضًا على طلبات البحث في أداة تحسين الأداء من Urchin. على سبيل المثال، لا يمكنك إجراء طلبات بحث على مستوى الخدمات بشأن المستخدِمين في المنطقة الاقتصادية الأوروبية عند إنشاء جدول مطابقة.

للتعرّف على كيفية الموافقة على سياسة الخصوصية في Ads Data Hub، يُرجى الاطّلاع على متطلبات الموافقة في المنطقة الاقتصادية الأوروبية.

حجم البيانات

لحماية خصوصية المستخدم النهائي، تفرض ميزة مطابقة البيانات المقدَّمة من المستخدِم هذه المتطلّبات المتعلّقة بحجم بياناتك:

  • يجب تحميل 1,000 سجلّ على الأقل في قائمة المستخدمين.
  • يجب ألا تتجاوز قائمتك الحد الأقصى لعدد السجلات. للتعرّف على الحد الأقصى المسموح به للبيانات، يُرجى التواصل مع ممثل Google.

إعداد نقل البيانات

قبل البدء، تأكَّد مما يلي:

  • يجب أن تكون بيانات الطرف الأول في BigQuery. إذا كان لديك محيط "عناصر تحكّم خدمة VPC"، يجب أن تكون بيانات الطرف الأول هذه متوفّرة ضمن "عناصر تحكّم خدمة VPC".
  • يجب أن يكون لحساب الخدمة في Ads Data Hub إذن بالقراءة لبيانات الطرف الأول.
  • يجب تنسيق بيانات الطرف الأول وتجزئتها بشكلٍ صحيح. يُرجى الاطّلاع على القسم التالي لمزيد من التفاصيل.

بالإضافة إلى ذلك، لا تتطلب ميزة "مطابقة السحابة الإلكترونية الخاصة" عملية إعداد إضافية. إذا كان بإمكانك تنفيذ طلب بحث تحليلي، يمكنك تنفيذ طلب بحث مطابقة في السحابة الإلكترونية الخاصة.

نقل بيانات الطرف الأول ومطابقتها

تنسيق البيانات لإدخالها

يجب أن تلتزم بياناتك بمتطلبات التنسيق هذه لكي تتم مطابقتها بشكل صحيح:

  • يجب تحميل المحتوى باستخدام تجزئة SHA256 في الحالات الموضّحة في أوصاف حقول الإدخال التالية.
  • يجب تنسيق حقول الإدخال على أنّها سلاسل. على سبيل المثال، إذا كنت تستخدم دالة تجزئة SHA256 في BigQuery مع دالة ترميز Base64 (TO_BASE64)، استخدِم عملية التحويل التالية: TO_BASE64(SHA256(user_data)).
  • يتوافق UPDM مع ترميز Base64. يجب مواءمة ترميز بيانات الطرف الأول مع عملية فك التشفير المستخدَمة في طلب البحث في Ads Data Hub. إذا غيّرت قاعدة ترميز data التابعة للطرف الأول، عليك تعديل طلب البحث في Ads Data Hub لفك ترميز data من القاعدة نفسها. تستخدِم الأمثلة التالية ترميز Base64.

رقم تعريف المستخدم

  • نص عادي
  • التجزئة: ما مِن تجزئة

البريد الإلكتروني

  • إزالة المسافات البيضاء البادئة واللاحقة
  • يجب أن تكون كل الأحرف صغيرة
  • أدرِج اسم نطاق لجميع عناوين البريد الإلكتروني، مثل gmail.com أو hotmail.co.jp
  • إزالة علامات التشكيل، على سبيل المثال، تغيير è أو é أو ê أو ë إلى e
  • إزالة جميع النقاط (.) التي تسبق اسم النطاق في عناوين البريد الإلكتروني gmail.com وgooglemail.com
  • التجزئة: SHA256 بترميز Base64

صالح: TO_BASE64(SHA256("jeffersonloveshiking@gmail.com"))

غير صالح: TO_BASE64(SHA256(" Jéfferson.Lôves.Hiking@gmail.com "))

الهاتف

  • إزالة المسافات البيضاء
  • يجب أن يكون التنسيق بتنسيق E.164. على سبيل المثال، في الولايات المتحدة: ‎+14155552671، وفي المملكة المتحدة: ‎+442071838750.
  • إزالة جميع الأحرف الخاصة باستثناء "+" قبل رمز البلد
  • التجزئة: SHA256 بترميز Base64

صالح: TO_BASE64(SHA256("+18005550101"))

غير صالح: TO_BASE64(SHA256("(800) 555-0101"))

الاسم الأول

  • إزالة المسافات البيضاء
  • يجب أن تكون كل الأحرف صغيرة
  • أزِل جميع البادئات، مثل "السيدة". عزيزي، الآنسة الدكتور
  • لا تزيل علامات النبر، مثل è أو é أو ê أو ë.
  • التجزئة: SHA256 بترميز Base64

صالح: TO_BASE64(SHA256("daní"))

غير صالح: TO_BASE64(SHA256("Mrs. Daní"))

اسم العائلة

  • إزالة المسافات البيضاء
  • يجب أن تكون كل الأحرف صغيرة
  • أزِل جميع اللاحقات، مثل "صغير" أو "ابن". عزيز، 2nd, 3rd, II, III, PHD, MD
  • لا تزيل علامات النبر، مثل è أو é أو ê أو ë.
  • التجزئة: SHA256 بترميز Base64

صالح: 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.
  • بالنسبة إلى جميع البلدان الأخرى:
    • لا حاجة إلى تنسيق (لا حاجة إلى كتابة الكلمات بأحرف صغيرة أو إزالة المسافات والأحرف الخاصة)
    • استبعد إضافات الرموز البريدية
  • التجزئة: ما مِن تجزئة

التحقّق من التجزئة وترميز البيانات

يمكنك استخدام النصوص البرمجية التالية للتحقّق من صحة التجزئة لضمان تنسيق بياناتك بشكل صحيح.

JavaScript

  /**
   * @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()

Python

  """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")
  }

Java

  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");
  }
  }

SQL

  /*
  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) والبيانات غير المتعلّقة بتحديد الهوية الشخصية. يمكن أن يؤدي استخدام الجدول الأصلي إلى تحسين تقاريرك من خلال تقديم المزيد من الإحصاءات، لأنّه يمثّل جميع بيانات 1PD ضمن النطاق، مقارنةً بجدول المطابقة.

كل جدول في مخطّط Ads Data Hub يحتوي على حقل user_id يكون مصحوبًا بجدول مطابقة. على سبيل المثال، بالنسبة إلى جدول adh.google_ads_impressions، تُنشئ Ads Data Hub أيضًا جدول مطابقة يُسمى adh.google_ads_impressions_updm يحتوي على أرقام تعريف المستخدمين. يتم إنشاء جداول مطابقة منفصلة للجداول المعزولة عن السياسات. على سبيل المثال، بالنسبة إلى جدول adh.google_ads_impressions_policy_isolated_youtube، تنشئ Ads Data Hub أيضًا جدول مطابقة يُسمى adh.google_ads_impressions_policy_isolated_youtube_updm يحتوي على أرقام تعريف المستخدمين.

تحتوي هذه الجداول على مجموعة فرعية من المستخدمين المتاحين في الجداول الأصلية، حيث تتطابق user_id. على سبيل المثال، إذا كان الجدول الأصلي يحتوي على بيانات المستخدِم "أ" والمستخدِم "ب"، ولكن تمّت مطابقة المستخدِم "أ" فقط، لن يكون المستخدِم "ب" في جدول المطابقة.

تحتوي جداول المطابقة على عمود إضافي يُسمى customer_data_user_id، والذي يخزّن معرّف المستخدم بالتنسيق BYTES.

من المهم مراعاة نوع الحقل عند كتابة طلبات البحث. تتوقع عوامل تشغيل مقارنة SQL أن تكون القيم الثابتة التي تقارنها من النوع نفسه. استنادًا إلى كيفية تخزين user_id في جدول بيانات الطرف الأول، قد تحتاج إلى ترميز القيم في الجدول قبل مطابقة البيانات. يجب تحويل مفتاح الربط إلى وحدات باييت لإجراء عمليات مطابقة ناجحة:

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

احتساب نسبة المطابقة

ليس جميع المستخدِمين مؤهّلين للمطابقة. على سبيل المثال، لا تتم مطابقة بيانات المستخدمين الذين سجّلوا الخروج، والأطفال، والمستخدمين الذين لم يوافقوا على مشاركة بياناتهم من خلال ميزة "إدارة الموافقة". يمكنك استخدام الحقل 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":

/* 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

الأسئلة الشائعة حول ميزة "مطابقة البيانات المقدَّمة من المستخدم"

للحصول على قائمة بالأسئلة الشائعة حول مطابقة البيانات المقدَّمة من المستخدم، يُرجى الاطّلاع على الأسئلة الشائعة حول مطابقة البيانات المقدَّمة من المستخدم.