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

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

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

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

نظرة عامة على علامة التبويب "عمليات الربط"

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

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

مصادر بيانات الطرف الأول المتوافقة

يمكنك استيراد البيانات من مصادر البيانات التالية:

  • BigQuery
  • تخزين في السحابة الإلكترونية
  • بروتوكول النقل الآمن للملفات (SFTP)
  • Snowflake
  • MySQL
  • PostgreSQL
  • Amazon Redshift
  • Amazon S3

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

التعرُّف على المصطلحات

  • ربط البيانات المقدَّمة من المستخدِم: يمكنك إعداد عملية ربط البيانات المقدَّمة من المستخدِم ل استيراد بياناتك ومطابقتها، وجدولة عمليات استيراد البيانات، وتحويل البيانات، ومطابقة بيانات إعلاناتك باستخدام رقم تعريف المستخدِم. يجب ربط حدث الإعلان بأحد المستخدِمين الذين سجّلوا الدخول في بيانات إعلانات Google. تتطلّب هذه الميزة مشاريع متعددة على Google Cloud.
  • ربط بيانات الطرف الأول: يمكنك إعداد ربط بيانات الطرف الأول كأحد أدوات إعداد البيانات، لجدولة عمليات استيراد البيانات وتحويلها بدون استخدام الميزات المتقدّمة لخدمة "إدارة البيانات التسويقية". لا يتطلّب هذا النوع من الربط سوى مشروع واحد على Google Cloud.
  • مصدر البيانات: منتج مرتبط أو ملف مستورَد أو عملية دمج مع منتج خارجي، مثل BigQuery
  • الوجهة: حالة استخدام، وهي عادةً عبارة عن منتج من Google أو ميزة في منتج، تم فيها تفعيل خاصية استيراد البيانات، مثل مطابقة البيانات المقدَّمة من المستخدِم في "مركز بيانات إعلانات Google".
  • مشروع المشرف: مشروع Google Cloud الذي يحتوي على بياناتك الإعلانية الملكية بتنسيقها الأوّلي.
  • مجموعة بيانات الإخراج: مجموعة بيانات BigQuery التي تُسجِّل "مركز بيانات الإعلانات" بياناتها فيها. بشكلٍ تلقائي، تكون هذه مجموعة بيانات ضمن مشروع المشرف. ولتغييره إلى مشروع Google Cloud آخر، يُرجى الاطّلاع على ضبط حسابات الخدمة.

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

  1. إعداد نقل البيانات ومطابقتها
  2. نقل بيانات الطرف الأول ومطابقتها
    • أنت تنشئ تنسيقًا لبيانات الطرف الأول وتحملها إلى مجموعة بيانات BigQuery. لإجراء الإعداد بسهولة، استخدِم مشروع المشرف. ومع ذلك، يمكنك استخدام أيّ مجموعة بيانات تملكها في 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.

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

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

من صفحة Connections (الاتصالات)، انقر على Begin setup (بدء الإعداد) لفتح معالج إعداد الحساب في مرحلة تفعيل UPDM.

الانتقال إلى الاتصالات

ما هي الأذونات التي يتم منحها لـ BigQuery وCloud Storage؟

في حال إعداد ميزة "مطابقة البيانات المقدَّمة من المستخدِم" لاستخدامها مع BigQuery أو Cloud Storage، استخدِم هذا المرجع للتعرّف على الأذونات التي يتم منحها لحسابات خدمة Ads Data Hub.

BigQuery

حساب خدمة Datafusion
الغرض يُستخدَم حساب خدمة Data Fusion لعرض قائمة بحقول المصادر في واجهة مستخدم Ads Data Hub.
التنسيق service-some-number@gcp-sa-datafusion.iam.gserviceaccount.com
أذونات الوصول المطلوبة
BigQuery Data Viewer
roles/bigquery.dataViewer
لمجموعات بيانات معيّنة في مشروعَي مصدر البيانات والوجهة
Storage Admin
roles/storage.admin
لمشروع مصدر البيانات أو حزمة تخزين مخصّصة
حساب خدمة Dataproc
الغرض يكون حساب خدمة معالجة البيانات مسؤولاً عن تشغيل مسارات التعلّم الخاصة بالبيانات في الخلفية.
التنسيق some-number[email protected]
أذونات الوصول المطلوبة
BigQuery Data Viewer
roles/bigquery.dataViewer
لمجموعات بيانات معيّنة في مشروعَي مصدر البيانات والوجهة
BigQuery Data Editor
roles/bigquery.dataEditor
لمجموعات بيانات معيّنة في مشروع الوجهة
BigQuery Job User
roles/bigquery.jobUser
لكلٍّ من مشروعَي مصدر البيانات والوجهة
Storage Admin
roles/storage.admin
لكلٍّ من مشروعَي مصدر البيانات والوجهة، أو حزمة تخزين مخصّصة
حساب خدمة UPDM
الغرض يتم استخدام حساب خدمة UPDM لتشغيل مهمة المطابقة.
التنسيق service-some-number@gcp-sa-adsdataconnector.iam.gserviceaccount.com
أذونات الوصول المطلوبة
BigQuery Data Viewer
roles/bigquery.dataViewer
لمشروع Destination
BigQuery Job User
roles/bigquery.jobUser
لمشروع Destination

تخزين في السحابة الإلكترونية

حساب خدمة Datafusion
الغرض يُستخدَم حساب خدمة Data Fusion لعرض قائمة بحقول المصادر في واجهة مستخدم Ads Data Hub.
التنسيق service-some-number@gcp-sa-datafusion.iam.gserviceaccount.com
أذونات الوصول المطلوبة
Storage Object Viewer
roles/storage.objectViewer
لحِزم تخزين محدّدة في مشروع مصدر البيانات
BigQuery Data Viewer
roles/bigquery.dataViewer
لمشروع مصدر البيانات أو حزمة تخزين مخصّصة
Storage Admin
roles/storage.admin
لمشروع مصدر البيانات أو حزمة تخزين مخصّصة
حساب خدمة Dataproc
الغرض يكون حساب خدمة معالجة البيانات مسؤولاً عن تشغيل مسارات التعلّم الخاصة بالبيانات في الخلفية.
التنسيق some-number[email protected]
أذونات الوصول المطلوبة
Storage Admin
roles/storage.admin
لكلٍّ من مشروعَي مصدر البيانات والوجهة، أو حزمة تخزين مخصّصة
BigQuery Job User
roles/bigquery.jobUser
لمشروع Destination
حساب خدمة UPDM
الغرض يتم استخدام حساب خدمة UPDM لتشغيل مهمة المطابقة.
التنسيق service-some-number@gcp-sa-adsdataconnector.iam.gserviceaccount.com
أذونات الوصول المطلوبة
BigQuery Data Viewer
roles/bigquery.dataViewer
لمشروع Destination
BigQuery Job User
roles/bigquery.jobUser
لمشروع Destination

مصادر البيانات الأخرى

غير ضروري لمصادر البيانات الأخرى

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

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

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

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

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

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

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

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

صالح: TO_HEX(SHA256("[email protected]"))

غير صالح: TO_HEX(SHA256("JéffersonLô[email protected]"))

الهاتف

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

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

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

الاسم الأول

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

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

غير صالح: TO_HEX(SHA256("Daní"))

اسم العائلة

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

صالح: TO_HEX(SHA256("delacruz"))

غير صالح: TO_HEX(SHA256("de la Cruz, Jr."))

البلد

  • أدرِج رمز البلد حتى إذا كانت كل بيانات العملاء واردة من البلد نفسه.
  • يجب عدم تجزئة بيانات البلد.
  • استخدِم رموز البلدان وفقًا لمعيار ISO 3166-1 alpha-2.
  • التجزئة: ما مِن تجزئة

صالح: US

غير صالح: United States of America أو USA

الرمز البريدي

  • عدم تجزئة بيانات الرمز البريدي
  • مسموح باستخدام الرموز البريدية الأمريكية والدولية
  • بالنسبة إلى الولايات المتحدة:
    • يُسمح باستخدام الرموز المكوّنة من 5 أرقام، مثل 94043.
    • يُسمح أيضًا باستخدام 5 أرقام متبوعة بإضافة مكوّنة من 4 أرقام، على سبيل المثال 94043-1351 أو 940431351.
  • بالنسبة إلى جميع البلدان الأخرى:
    • لا حاجة إلى تنسيق (لا حاجة إلى كتابة الكلمات بأحرف صغيرة أو إزالة المسافات والأحرف الخاصة)
    • استبعد إضافات الرموز البريدية
  • التجزئة: ما مِن تجزئة

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

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

JavaScript

Base16

/**
 * @fileoverview Provides the hashing algorithm for User-Provided Data Match, 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 hashArrayBuffer = await crypto.subtle.digest(
      'SHA-256', (new TextEncoder()).encode(formattedToken));
  // Converts the hash buffer to a hexadecimal string.
  return Array.from(new Uint8Array(hashArrayBuffer))
      .map((b) => b.toString(16).padStart(2, '0'))
      .join('');
}

function main() {
  // Expected hash for [email protected]:
  // 87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674
  hash('[email protected]').then(result => console.log(result));

  // Expected hash for +18005551212:
  // 61d9111bed3e6d9cfc1bc3b5cb35a402687c4f1546bee061a2bd444fbdd64c44
  hash('+18005551212').then(result => console.log(result));

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

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

main()

Base64

/**
 * @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 [email protected]:
  // h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
  hash('[email protected]').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

Base16

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

Supports: Python 2, Python 3

Sample hashes:

  - Email '[email protected]': 87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674
  - Phone '+18005551212':   61d9111bed3e6d9cfc1bc3b5cb35a402687c4f1546bee061a2bd444fbdd64c44
  - First name 'John':      96d9632f363564cc3032521409cf22a852f2032eec099ed5967c0d000cec607a
  - Last name 'Doe':        799ef92a11af918e3fb741df42934f3b568ed2d93ac1df74f1b8d41a27932a6f
"""

import base64
import hashlib

def updm_hash(token):
# Generates a SHA-256 hash of the input token after normalization.
  return hashlib.sha256(token.strip().lower().encode('utf-8')).hexdigest()

def print_updm_hash(token):
# Prints the SHA-256 hash and the original token.
  print('Hash: "{}"\t(Token: {})'.format(updm_hash(token), token))

def main():
# Hashes and prints sample tokens.
  print_updm_hash('[email protected]')
  print_updm_hash('+18005551212')
  print_updm_hash('John')
  print_updm_hash('Doe')

if __name__ == '__main__':
  main()

Base64

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

Supports: Python 2, Python 3

Sample hashes:

  - Email '[email protected]': 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(
      '[email protected]', expected='h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=')
  print_hash(
      '+18005551212', expected='YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=')
  print_hash('John', expected='ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=')
  print_hash('Doe', expected='eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=')

if __name__ == '__main__':
  main()

انتقال

Base16

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

Sample hashes:

  - Email '[email protected]': 87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674
  - Phone '+18005551212':   61d9111bed3e6d9cfc1bc3b5cb35a402687c4f1546bee061a2bd444fbdd64c44
  - First name 'John':      96d9632f363564cc3032521409cf22a852f2032eec099ed5967c0d000cec607a
  - Last name 'Doe':        799ef92a11af918e3fb741df42934f3b568ed2d93ac1df74f1b8d41a27932a6f
*/
package main

import (
  "crypto/sha256"
  "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 := fmt.Sprintf("%x", 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("[email protected]")
  PrintHash("+18005551212")
  PrintHash("John")
  PrintHash("Doe")
}

Base64

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

Sample hashes:

  - Email '[email protected]': 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("[email protected]")
  PrintHash("+18005551212")
  PrintHash("John")
  PrintHash("Doe")
}

Java

Base16

package updm.hashing;

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

import com.google.common.base.Ascii;
import com.google.common.hash.Hashing;

/**
 * Example of the UPDM hashing algorithm using hex-encoded SHA-256.
*
* <p>This uses the Guava Hashing to generate the hash: https://github.com/google/guava
*
* <p>Sample valid hashes:
*
* <ul>
*   <li>Email "[email protected]": "87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674"
*   <li>Phone "+18005551212": "61d9111bed3e6d9cfc1bc3b5cb35a402687c4f1546bee061a2bd444fbdd64c44"
*   <li>First name "John": "96d9632f363564cc3032521409cf22a852f2032eec099ed5967c0d000cec607a"
*   <li>Last name "Doe": "799ef92a11af918e3fb741df42934f3b568ed2d93ac1df74f1b8d41a27932a6f"
* </ul>
*/
public final class HashExample {

  private HashExample() {}

  public static String hash(String token) {
    // Normalizes and hashes the input token.
    String formattedToken = Ascii.toLowerCase(token).strip();
    return Hashing.sha256().hashString(formattedToken, UTF_8).toString();
  }

  public static void printHash(String token) {
    // Calculates and prints the token's hash.
    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("[email protected]");
    printHash("+18005551212");
    printHash("John");
    printHash("Doe");
  }
}

Base64

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 '[email protected]': 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("[email protected]");
  printHash("+18005551212");
  printHash("John");
  printHash("Doe");
}
}

SQL

Base16

/*
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 '[email protected]': 87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674
  - Phone '+18005551212':   61d9111bed3e6d9cfc1bc3b5cb35a402687c4f1546bee061a2bd444fbdd64c44
  - First name 'John':      96d9632f363564cc3032521409cf22a852f2032eec099ed5967c0d000cec607a
  - Last name 'Doe':        799ef92a11af918e3fb741df42934f3b568ed2d93ac1df74f1b8d41a27932a6f

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 hashed versions of specified columns from the input table.
CREATE TABLE `your_project_name.your_dataset_name.output_hashed_table_name`
AS
SELECT
  UserID,
  TO_HEX(SHA256(LOWER(Email))) AS Email,
  TO_HEX(SHA256(Phone)) AS Phone,
  TO_HEX(SHA256(LOWER(FirstName))) AS FirstName,
  TO_HEX(SHA256(LOWER(LastName))) AS LastName,
  PostalCode,
  CountryCode,
FROM
  `your_project_name.your_dataset_name.input_unhashed_table_name`;

Base64

/*
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 '[email protected]': 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. انقر على عمليات الربط > إنشاء عملية ربط > مطابقة البيانات المقدَّمة من المستخدِم.
  2. اختَر مصدر بيانات، ثم انقر على ربط.
  3. أكمِل عملية المصادقة، إذا طُلب منك ذلك، ثم انقر على التالي:

    BigQuery

    انقر على "تطبيق" لمنح إذن الوصول إلى BigQuery.

    تخزين في السحابة الإلكترونية

    انقر على "تطبيق" لمنح إذن الوصول إلى Cloud Storage.

    MySQL

    أدخِل موقع قاعدة بيانات MySQL والمنفذ واسم المستخدم وكلمة المرور.

    S3

    أدخِل مفتاح الوصول السري الخاص بخدمة Amazon S3.

    PostgreSQL

    أدخِل موقع قاعدة بيانات PostgreSQL والمنفذ واسم المستخدم وكلمة المرور وقاعدة البيانات.

    Redshift

    أدخِل موقع قاعدة بيانات Redshift والمنفذ واسم المستخدم وكلمة المرور وقاعدة البيانات.

    sFTP

    أدخِل الموقع الجغرافي لخادم بروتوكول النقل الآمن للملفات (SFTP) واسم المستخدم وكلمة المرور.

    Snowflake

    أدخِل معرّف حسابك واسم المستخدم وكلمة المرور على Snowflake.

  4. اضبط مصدر البيانات، ثم انقر على التالي:

    BigQuery

    اختَر جدول BigQuery الذي تريد استيراده.

    تخزين في السحابة الإلكترونية

    أدخِل مسار gsutil، مثل gs://my-bucket/folder/ و اختَر تنسيق ملفك.

    إذا كانت هذه هي المرة الأولى التي تربط فيها هذا المورد، سيظهر تنبيه. انقر على "تطبيق" لمنح إذن الوصول، ثم انقر على "التالي". ملاحظة: يجب أن يكون لديك دور يملك الإذن بتفويض storage.buckets.setIamPolicy للحزمة ذات الصلة.

    MySQL

    اختَر الجدول وقاعدة بيانات MySQL اللذين تريد استخدامهما.

    S3

    أدخِل معرِّف الموارد المنتظم (URI) الخاص بالملف الذي تريد تحميله، وفقًا لعنوان المضيف.

    PostgreSQL

    أدخِل مخطّط PostgreSQL واسم الجدول (أو طريقة العرض).

    Redshift

    أدخِل مخطّط Redshift واسم الجدول (أو طريقة العرض). بشكلٍ تلقائي، يستخدم Redshift عناوين URL لمواقع قاعدة البيانات التي تتبع هذا النموذج: cluster-identifier.account-number.aws-region.redshift.amazonaws.com .

    sFTP

    أدخِل مسار الملف واسمه بالتنسيق التالي: /PATH/FILENAME.csv

    Snowflake

    أدخِل قاعدة بيانات وجدول (أو طريقة عرض) Snowflake المُراد استخدامهما.

  5. اختَر مجموعة بيانات في BigQuery لاستخدامها كأحد الوجهات الوسيطة، ثم انقر على التالي. تضمن هذه الخطوة تنسيق بياناتك بشكل صحيح.
  6. اختياري: يمكنك تعديل تنسيق بياناتك. تشمل عمليات التحويل احتساب علامة التشفير، وتنسيق الأحرف الصغيرة/الكبيرة، ودمج الحقول أو تقسيمها.
    1. انقر على الإجراء > > التحويل.
    2. في اللوحة المنبثقة، انقر على إضافة عملية تحويل أو إضافة عملية تحويل أخرى.
    3. اختَر نوع تحويل من القائمة المنسدلة وأدخِل المتطلبات.
    4. انقر على حفظ.
  7. اختَر مفتاح ربط واحدًا على الأقل وربط الحقول التي ستستخدمها. ستربط Ads Data Hub تلقائيًا الحقول التي تحمل أسماء متطابقة، ويُشار إليها برمز . أدخِل أي تعديلات ضرورية، ثم انقر على التالي.
  8. ضبط جدول زمني:
    1. أدخِل اسمًا لعملية الربط.
    2. اضبط معدّل تكرار يحدّد عدد المرات التي سيتم فيها استيراد البيانات إلى مجموعة البيانات التي اخترتها في الخطوة السابقة. سيؤدي كلّ تشغيل إلى استبدال البيانات في جدول الوجهة.
    3. حدِّد الطريقة التي تريد من خلالها التعامل مع حالات تعارض أرقام تعريف المستخدمين. يمكنك الاختيار بين الاحتفاظ بالمطابقة الحالية أو استبدالها ببيانات جديدة.
  9. انقر على إنهاء. تكون جداول المطابقة جاهزة بشكل عام للاستعلام عنها بعد 12 ساعة من إنشائها.

عرض تفاصيل الاتصال

تقدّم لك صفحة "تفاصيل الربط" معلومات عن عمليات التنفيذ والأخطاء الأخيرة لعملية ربط معيّنة. للاطّلاع على تفاصيل اتصال معيّن:

  1. انقر على Connections (عمليات الربط).
  2. انقر على اسم الاتصال لعرض تفاصيله.
  3. يمكنك الآن الاطّلاع على تفاصيل عملية الربط وعمليات التشغيل الأخيرة. يعرض كلّ منها نوعَين محتمَلَين من الأخطاء: أخطاء على مستوى عملية الربط (لم يتم إجراء عملية الربط) وأخطاء على مستوى الصف (لم يتم استيراد صف).
    1. تشير الحالة تعذّر إلى تعذّر تنفيذ عملية الاتصال بالكامل (مثل مشكلة في إذن حساب الخدمة). انقر على حالة الخطأ لتحديد الأخطاء التي أثّرت في عملية الربط.
    2. تشير الحالة مكتمل إلى أنّ عملية الربط قد تمت بنجاح. ومع ذلك، قد تظل هناك أخطاء على مستوى الصف، ويُشار إليها بقيمة غير صفرية في عمود "الصفوف التي تحتوي على أخطاء". انقر على القيمة لمعرفة المزيد عن السجلات التي تعذّر نقلها.

تعديل عملية ربط

يمكن تعديل التفاصيل التالية:

  • اسم عملية الربط
  • الجدولة
  • جدول الوجهة
  • ربط الحقول

لا يمكن تعديل مصدر البيانات. لتغيير مصدر بيانات، أنشئ عملية ربط جديدة وحذِف العملية القديمة.

لتعديل تفاصيل عملية الربط:

  1. انقر على Connections (عمليات الربط).
  2. انقر على اسم الربط الذي تريد تعديله.
  3. عدِّل التفاصيل التي تريد تغييرها:
    • اسم الاتصال: انقر على تعديل، وأدخِل الاسم الجديد، ثم اضغط على Enter.
    • الجدول الزمني: انقر على تعديل، واضبط الجدول الزمني الجديد، ثم انقر على حفظ.
    • جدول الوجهة: انقر على تعديل، وأدخِل اسم الوجهة الجديد، ثم انقر على حفظ.
    • ربط الحقول: انقر على ، وأدخِل تغييرات على الحقول، ثم انقر على حفظ.
  4. انقر على .

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

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

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

يُمثّل الجدول الأصلي لبيانات الطرف الأول بالرمز 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

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

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