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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

حجم البيانات

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

  • يجب تحميل 1,000 سجلّ على الأقل في قائمة المستخدمين.

إعداد عملية استيعاب البيانات

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

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

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

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

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

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

  • يجب تحميل الملفات باستخدام تجزئة SHA256 في المواضع المحدّدة في أوصاف حقول الإدخال التالية.
  • يجب تنسيق حقول الإدخال كسلاسل. على سبيل المثال، إذا كنت تستخدم دالة التجزئة SHA256 في BigQuery مع دالة الترميز Base64 ‏(TO_BASE64)، استخدِم عملية التحويل التالية: TO_BASE64(SHA256(user_data)).
  • يتوافق UPDM مع ترميز Base64. يجب أن تتوافق عملية ترميز بيانات الطرف الأول مع عملية فك الترميز المستخدَمة في طلب البحث على Ads Data Hub. في حال تغيير ترميز بياناتك الخاصة، عليك تعديل طلب البحث في Ads Data Hub لفك الترميز من الأساس نفسه. تستخدِم الأمثلة التالية ترميز 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"))

الاسم الأول

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

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

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

اسم العائلة

  • إزالة المسافة البيضاء
  • يجب أن تكون كل الأحرف صغيرة
  • إزالة جميع اللاحقات، مثل Jr. Sr., 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()

Go

  /*
  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. انقر على ضبط الجدول الزمني لتحديد عدد المرات التي تريد فيها إعادة تحميل جدول مطابقة. سيؤدي كل تشغيل إلى استبدال جدول المطابقة الحالي.

البيانات المطابِقة لطلب البحث

طلب البحث في جداول المطابقة

عندما تحتوي جداول المطابقة على بيانات كافية لاستيفاء عمليات التحقّق من الخصوصية، تكون مستعدًا لتنفيذ طلبات بحث على الجداول.

يتم تمثيل الجدول الأصلي لبيانات الطرف الأول (1PD) بالرمز my_data. ويشمل ذلك كلاً من معلومات تحديد الهوية الشخصية والبيانات غير المرتبطة بتحديد الهوية الشخصية. يمكن أن يؤدي استخدام الجدول الأصلي إلى تحسين تقاريرك من خلال تقديم المزيد من الإحصاءات، لأنّه يمثّل جميع بيانات الطرف الأول التي تندرج ضمن النطاق، وذلك مقارنةً بجدول المطابقة.

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

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

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

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

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

بالإضافة إلى ذلك، تكون مقارنات السلاسل في SQL حساسة لحالة الأحرف، لذا قد تحتاج إلى ترميز السلاسل على كلا جانبي المقارنة لضمان إمكانية مقارنتها بدقة.

نماذج طلبات البحث

عدد المستخدمين المطابقين

يحسب طلب البحث هذا عدد المستخدمين المطابِقين في جدول مرّات الظهور على &quot;إعلانات Google&quot;.

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

SELECT COUNT(DISTINCT user_id)
FROM adh.google_ads_impressions_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":

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

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