تطبیق داده های ارائه شده توسط کاربر

تطبیق داده‌های ارائه شده توسط کاربر (UPDM) داده‌های شخص ثالثی را که شما در مورد یک کاربر جمع‌آوری کرده‌اید - مانند اطلاعات وب‌سایت‌ها، برنامه‌ها یا فروشگاه‌های فیزیکی شما - با فعالیت ورود همان کاربر در تمام داده‌های تبلیغات گوگل ، از جمله داده‌های متعلق به و تحت مدیریت گوگل، ترکیب می‌کند. این شامل داده‌های خریداری شده از طریق محصولات پلتفرم بازاریابی گوگل (GMP)، به عنوان مثال، یوتیوب خریداری شده با استفاده از Display & Video 360 می‌شود. سایر محصولات GMP که متعلق به و تحت مدیریت گوگل نیستند، پشتیبانی نمی‌شوند.

برای واجد شرایط بودن برای تطبیق داده‌های ارائه شده توسط کاربر، رویداد تبلیغ باید به یک کاربر وارد شده در داده‌های تبلیغ گوگل مرتبط باشد.

این سند، ویژگی تطبیق داده‌های ارائه شده توسط کاربر را شرح می‌دهد و راهنمایی‌هایی در مورد راه‌اندازی و استفاده از آن ارائه می‌دهد.

مرور کلی تب اتصالات

کسب بینش‌های ارزشمند در مورد تبلیغات اغلب نیازمند جمع‌آوری داده‌ها از منابع مختلف است. ایجاد راه‌حل شخصی برای این مشکل خط لوله داده، نیازمند سرمایه‌گذاری زمانی و مهندسی قابل توجهی است. صفحه Connections در Ads Data Hub با ارائه یک رابط کاربری گام به گام و هدایت‌شده برای وارد کردن، تبدیل و تطبیق داده‌های تبلیغات شما در BigQuery، این فرآیند را ساده می‌کند تا بتوانید از آن در جستجوهای Ads Data Hub یا هر محصول دیگری که از BigQuery استفاده می‌کند، استفاده کنید. غنی‌سازی جستجوهای شما با داده‌های شخص ثالث می‌تواند تجربیات غنی‌تری برای مشتری ارائه دهد و در برابر تغییرات ردیابی تبلیغات در سطح صنعت مقاوم‌تر باشد.

صفحه Connections با ابزارهایی ساخته شده است که به شما امکان می‌دهد اطلاعات شخصی قابل شناسایی (PII) را با شرکا به شیوه‌ای متمرکز بر حریم خصوصی رمزگذاری و به اشتراک بگذارید. پس از انتخاب ستون‌هایی که حاوی PII هستند، Ads Data Hub داده‌ها را رمزگذاری می‌کند و اطمینان حاصل می‌کند که داده‌های شخص اول شما فقط توسط افرادی که مجوز انجام این کار را دارند، قابل استخراج یا خواندن هستند. دانستن اینکه کدام داده‌های شخص اول برای مورد استفاده اندازه‌گیری یا فعال‌سازی شما مورد نیاز است، می‌تواند دشوار باشد، بنابراین Ads Data Hub فهرستی جامع از موارد استفاده از پیش تعریف شده ارائه می‌دهد، سپس شما را در کل تجربه استخراج، تبدیل و بارگذاری داده‌هایتان راهنمایی می‌کند. اگرچه می‌تواند انواع مختلفی از اتصالات ایجاد کند، این سند فرض می‌کند که شما از صفحه Connections برای تطبیق داده‌های ارائه شده توسط کاربر استفاده می‌کنید.

منابع داده شخص ثالث پشتیبانی شده

شما می‌توانید داده‌ها را از این منابع داده وارد کنید:

  • بیگ‌کوئری
  • فضای ذخیره‌سازی ابری
  • FTP امن (sFTP)
  • دانه برف
  • خروجی زیر
  • پستگراسکیو‌ال
  • آمازون ردشیفت
  • آمازون S3

از آنجا که تطبیق داده‌های ارائه شده توسط کاربر فقط در موجودی متعلق به گوگل و برای کاربران وارد شده در دسترس است، تحت تأثیر منسوخ شدن کوکی‌های شخص ثالث قرار نمی‌گیرد. از آنجایی که در مقایسه با داده‌های شخص ثالث در برابر تغییرات صنعت مقاوم‌تر است، می‌تواند بینش غنی‌تری ارائه دهد که می‌تواند منجر به تعامل بیشتر مشتری شود.

اصطلاحات را یاد بگیرید

  • اتصال داده ارائه شده توسط کاربر: یک اتصال داده ارائه شده توسط کاربر تنظیم کنید تا داده‌های شما را وارد و مطابقت دهد، واردات داده‌ها را زمان‌بندی کند، داده‌ها را تبدیل کند و داده‌های تبلیغات شما را با استفاده از شناسه کاربری مطابقت دهد. رویداد تبلیغ باید به یک کاربر وارد شده در داده‌های تبلیغ گوگل مرتبط شود. به چندین پروژه Google Cloud نیاز دارد.
  • اتصال داده شخص ثالث: یک اتصال داده شخص ثالث را به عنوان ابزاری برای آماده‌سازی داده‌ها تنظیم کنید تا بتوانید بدون ویژگی‌های پیشرفته UPDM، واردات داده‌ها را زمان‌بندی کرده و داده‌ها را تبدیل کنید. این نوع اتصال فقط به یک پروژه Google Cloud نیاز دارد.
  • منبع داده: یک محصول متصل، فایل وارد شده یا یکپارچه‌سازی شخص ثالث - برای مثال، BigQuery.
  • مقصد: یک مورد استفاده؛ معمولاً یک محصول یا ویژگی محصول گوگل، که در آن داده‌های وارد شده فعال می‌شوند - برای مثال، تطبیق داده‌های ارائه شده توسط کاربر در Ads Data Hub.
  • پروژه مدیریت: پروژه گوگل کلود که شامل داده‌های تبلیغاتی اختصاصی شما در قالب خام است.
  • مجموعه داده خروجی: مجموعه داده BigQuery که Ads Data Hub روی آن می‌نویسد. به طور پیش‌فرض، این یک مجموعه داده تحت پروژه ادمین شما است. برای تغییر آن به یک پروژه Google Cloud دیگر، به پیکربندی حساب‌های سرویس مراجعه کنید.

خلاصه فرآیند

  1. راه‌اندازی دریافت و تطبیق داده‌ها
  2. دریافت و تطبیق داده‌های شخص ثالث
    • شما داده‌های شخص ثالث خود را قالب‌بندی و در مجموعه داده‌های BigQuery خود بارگذاری می‌کنید. برای ساده‌ترین تنظیمات، از پروژه ادمین خود استفاده کنید. با این حال، می‌توانید از هر مجموعه داده BigQuery که در اختیار دارید استفاده کنید.
    • شما با ایجاد یک اتصال و تنظیم یک برنامه واردات، یک درخواست تطبیق داده را آغاز می‌کنید.
    • گوگل داده‌های بین پروژه شما و داده‌های متعلق به گوگل که شامل شناسه کاربری گوگل و داده‌های هش شده ارائه شده توسط کاربر است را برای ساخت و به‌روزرسانی جداول تطابق، به هم متصل می‌کند.
    • به دریافت داده‌های شخص ثالث مراجعه کنید
  3. جستجوهای مداوم در مرکز داده‌های تبلیغات، بر اساس داده‌های منطبق

آشنایی با الزامات حفظ حریم خصوصی

جمع‌آوری داده‌های مشتری

هنگام استفاده از تطبیق داده‌های ارائه شده توسط کاربر، باید داده‌های شخص ثالث را بارگذاری کنید. این می‌تواند اطلاعاتی باشد که شما از وب‌سایت‌ها، برنامه‌ها، فروشگاه‌های فیزیکی یا هرگونه اطلاعاتی که مشتری مستقیماً با شما به اشتراک گذاشته است، جمع‌آوری کرده‌اید.

شما باید:

  • اطمینان حاصل کنید که سیاست حفظ حریم خصوصی شما فاش می‌کند که شما داده‌های مشتری را با اشخاص ثالث برای انجام خدمات از طرف خود به اشتراک می‌گذارید، و در صورت لزوم قانونی، رضایت چنین اشتراک‌گذاری را کسب می‌کنید.
  • فقط از API یا رابط کاربری تأیید شده گوگل برای آپلود داده‌های مشتری استفاده کنید
  • رعایت کلیه قوانین و مقررات مربوطه ، از جمله هرگونه آیین‌نامه خودتنظیمی یا آیین‌نامه‌های صنعتی که ممکن است اعمال شوند

تأیید رضایت شخص اول

برای اطمینان از اینکه می‌توانید از داده‌های شخص اول خود در Ads Data Hub استفاده کنید، باید تأیید کنید که رضایت لازم را برای اشتراک‌گذاری داده‌ها از کاربران نهایی منطقه اقتصادی اروپا با گوگل، طبق سیاست رضایت کاربر اتحادیه اروپا و سیاست Ads Data Hub ، دریافت کرده‌اید. این الزام برای هر حساب Ads Data Hub اعمال می‌شود و باید هر بار که داده‌های شخص اول جدید را آپلود می‌کنید، به‌روزرسانی شود. هر کاربر می‌تواند این تأیید را از طرف کل حساب انجام دهد.

توجه داشته باشید که همان قوانین پرس‌وجوی سرویس گوگل که برای پرس‌وجوهای تحلیلی اعمال می‌شود، برای پرس‌وجوهای UPDM نیز اعمال می‌شود. برای مثال، هنگام ایجاد جدول تطبیق، نمی‌توانید پرس‌وجوهای بین سرویسی را روی کاربران در منطقه اقتصادی اروپا (EEA) اجرا کنید.

برای آشنایی با نحوه‌ی اعلام رضایت در Ads Data Hub، به الزامات رضایت برای منطقه‌ی اقتصادی اروپا مراجعه کنید.

اندازه داده

برای محافظت از حریم خصوصی کاربر نهایی، تطبیق داده‌های ارائه شده توسط کاربر، الزامات زیر را در مورد اندازه داده‌های شما اعمال می‌کند:

  • شما باید حداقل ۱۰۰۰ رکورد در لیست کاربران خود آپلود کنید.
  • هر به‌روزرسانی موفقیت‌آمیز جدول تطابق شما باید شامل حداقل تعداد کاربران جدید تطبیق‌یافته باشد. این رفتار مشابه بررسی‌های تفاوت است.
  • لیست شما نباید از حداکثر تعداد رکوردها تجاوز کند. برای اطلاع از حداکثر محدودیت داده، با نماینده گوگل خود تماس بگیرید.

تنظیم دریافت داده

قبل از شروع، باید حساب کاربری Ads Data Hub خود را برای ایجاد اتصالات داده پیکربندی کنید، که به این ترتیب می‌توانید خط لوله تطبیق داده خود را ایجاد کنید. فقط باید یک بار این مراحل را انجام دهید.

از صفحه Connections ، روی Begin setup کلیک کنید تا ویزارد تنظیم حساب کاربری در مرحله فعال‌سازی UPDM باز شود.

به اتصالات بروید

چه مجوزهایی برای BigQuery و Cloud Storage اعطا شده است؟

اگر UPDM را برای استفاده با BigQuery یا Cloud Storage تنظیم کرده‌اید، از این مرجع برای درک مجوزهایی که به حساب‌های سرویس Ads Data Hub اعطا می‌شود، استفاده کنید.

بیگ‌کوئری

حساب کاربری سرویس دیتافیوژن
هدف حساب سرویس datafusion برای نمایش لیستی از فیلدهای منبع در رابط کاربری Ads Data Hub استفاده می‌شود.
قالب service- some-number @gcp-sa-datafusion.iam.gserviceaccount.com
دسترسی‌های مورد نیاز
BigQuery Data Viewer
roles/bigquery.dataViewer
برای مجموعه داده‌های خاص در پروژه‌های منبع داده و مقصد
Storage Admin
roles/storage.admin
برای پروژه منبع داده یا یک مخزن ذخیره‌سازی اختصاصی
حساب کاربری سرویس Dataproc
هدف حساب کاربری سرویس dataproc مسئول اجرای خطوط لوله داده در پس‌زمینه است.
قالب some-number -compute@developer.gserviceaccount.com
دسترسی‌های مورد نیاز
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
برای پروژه مقصد
BigQuery Job User
roles/bigquery.jobUser
برای پروژه مقصد

فضای ذخیره‌سازی ابری

حساب کاربری سرویس دیتافیوژن
هدف حساب سرویس datafusion برای نمایش لیستی از فیلدهای منبع در رابط کاربری 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
هدف حساب کاربری سرویس dataproc مسئول اجرای خطوط لوله داده در پس‌زمینه است.
قالب some-number -compute@developer.gserviceaccount.com
دسترسی‌های مورد نیاز
Storage Admin
roles/storage.admin
برای هر دو پروژه منبع داده و مقصد ، یا یک مخزن ذخیره‌سازی اختصاصی
BigQuery Job User
roles/bigquery.jobUser
برای پروژه مقصد
حساب سرویس UPDM
هدف حساب کاربری سرویس UPDM برای اجرای کار تطبیق استفاده می‌شود.
قالب service- some-number @gcp-sa-adsdataconnector.iam.gserviceaccount.com
دسترسی‌های مورد نیاز
BigQuery Data Viewer
roles/bigquery.dataViewer
برای پروژه مقصد
BigQuery Job User
roles/bigquery.jobUser
برای پروژه مقصد

سایر منابع داده

برای سایر منابع داده لازم نیست

داده‌های شخص ثالث را دریافت و تطبیق دهید

قالب‌بندی داده‌ها برای ورودی

داده‌های شما برای مطابقت صحیح باید از این الزامات قالب‌بندی پیروی کنند:

  • در مواردی که در توضیحات فیلد ورودی زیر مشخص شده است، باید با استفاده از هشینگ SHA256 آپلود کنید.
  • فیلدهای ورودی باید به صورت رشته قالب‌بندی شوند. برای مثال، اگر از تابع هش SHA256 در BigQuery با تابع کدگذاری Base16 ( TO_HEX ) استفاده می‌کنید، از تبدیل زیر استفاده کنید: TO_HEX(SHA256(user_data)) .
  • UPDM از هر دو کدگذاری Base16 و Base64 پشتیبانی می‌کند. شما باید کدگذاری داده‌های شخص اول خود را با رمزگشایی مورد استفاده در پرس‌وجوی Ads Data Hub خود هم‌تراز کنید. اگر کدگذاری داده‌های شخص اول خود را تغییر دهید، باید پرس‌وجوی Ads Data Hub خود را برای رمزگشایی از همان پایه به‌روزرسانی کنید. مثال‌های زیر از کدگذاری Base16 استفاده می‌کنند.

شناسه کاربری

  • متن ساده
  • هش: هیچکدام

ایمیل

  • حذف فاصله‌های خالی (whitespace) در ابتدا و انتهای متن
  • تمام کاراکترها با حروف کوچک نوشته شوند
  • برای همه آدرس‌های ایمیل، یک نام دامنه مانند gmail.com یا hotmail.co.jp وارد کنید
  • لهجه‌ها را حذف کنید - برای مثال، è، é، ê یا ë را به e تغییر دهید
  • تمام نقطه‌ها (.) که قبل از نام دامنه در آدرس‌های ایمیل gmail.com و googlemail.com قرار دارند را حذف کنید.
  • هشینگ: کدگذاری شده با Base16 و SHA256

معتبر: TO_HEX(SHA256("jeffersonloveshiking@gmail.com"))

نامعتبر: TO_HEX(SHA256("JéffersonLôvesHiking@gmail.com"))

تلفن

  • فضای سفید را حذف کنید
  • قالب‌بندی در قالب E.164 - برای مثال، مثال ایالات متحده: +14155552671، مثال بریتانیا: +442071838750
  • تمام کاراکترهای ویژه به جز "+" قبل از کد کشور را حذف کنید
  • هشینگ: کدگذاری شده با Base16 و SHA256

معتبر: TO_HEX(SHA256("+18005550101"))

نامعتبر: TO_HEX(SHA256("(800) 555-0101"))

نام کوچک

  • فضای سفید را حذف کنید
  • تمام کاراکترها با حروف کوچک نوشته شوند
  • تمام پیشوندها را حذف کنید - برای مثال خانم، آقا، خانم، دکتر.
  • لهجه‌ها را حذف نکنید - برای مثال، è، é، ê یا ë
  • هشینگ: کدگذاری شده با Base16 و SHA256

معتبر: TO_HEX(SHA256("daní"))

نامعتبر: TO_HEX(SHA256("Daní"))

نام خانوادگی

  • فضای سفید را حذف کنید
  • تمام کاراکترها با حروف کوچک نوشته شوند
  • تمام پسوندها را حذف کنید - برای مثال Jr., Sr., 2nd, 3rd, II, III, PHD, MD
  • لهجه‌ها را حذف نکنید - برای مثال، è، é، ê یا ë
  • هشینگ: کدگذاری شده با Base16 و SHA256

معتبر: TO_HEX(SHA256("delacruz"))

نامعتبر: TO_HEX(SHA256("de la Cruz, Jr."))

کشور

  • حتی اگر تمام اطلاعات مشتریان شما مربوط به یک کشور است، کد کشور را نیز وارد کنید.
  • داده‌های کشور را هش نکنید
  • از کدهای کشور ISO 3166-1 alpha-2 استفاده کنید
  • هش: هیچکدام

معتبر: US

نامعتبر: United States of America یا USA

کد پستی

  • داده‌های کد پستی را هش نکنید
  • کد پستی و پستی ایالات متحده و بین‌المللی هر دو مجاز هستند
  • برای ایالات متحده:
    • کدهای ۵ رقمی مجاز هستند—برای مثال، ۹۴۰۴۳
    • ۵ رقم و به دنبال آن یک کد داخلی ۴ رقمی نیز مجاز است - برای مثال، ۹۴۰۴۳-۱۳۵۱ یا ۹۴۰۴۳۱۳۵۱
  • برای همه کشورهای دیگر:
    • بدون نیاز به قالب‌بندی (نیازی به حروف کوچک یا حذف فاصله‌ها و کاراکترهای ویژه نیست)
    • پسوندهای کد پستی را حذف کنید
  • هش: هیچکدام

اعتبارسنجی هش و رمزگذاری داده‌ها

شما می‌توانید از اسکریپت‌های اعتبارسنجی هش زیر برای اطمینان از قالب‌بندی صحیح داده‌هایتان استفاده کنید.

جاوا اسکریپت

پایه۱۶

/**
 * @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 test@gmail.com:
  // 87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674
  hash('test@gmail.com').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()

پایه64

/**
 * @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': 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('test@gmail.com')
  print_updm_hash('+18005551212')
  print_updm_hash('John')
  print_updm_hash('Doe')

if __name__ == '__main__':
  main()

پایه64

"""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': 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("test@gmail.com")
  PrintHash("+18005551212")
  PrintHash("John")
  PrintHash("Doe")
}

پایه64

/*
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 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 "test@gmail.com": "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("test@gmail.com");
    printHash("+18005551212");
    printHash("John");
    printHash("Doe");
  }
}

پایه64

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': 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`;

پایه64

/*
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. روی اتصالات > ایجاد اتصال > تطبیق داده‌های ارائه شده توسط کاربر کلیک کنید.
  2. یک منبع داده انتخاب کنید، سپس روی «اتصال» کلیک کنید.
  3. در صورت درخواست، احراز هویت کنید، سپس روی بعدی کلیک کنید:

    بیگ‌کوئری

    برای اعطای دسترسی به BigQuery، روی Apply کلیک کنید.

    فضای ذخیره‌سازی ابری

    برای دسترسی به فضای ذخیره‌سازی ابری، روی «اعمال» کلیک کنید.

    خروجی زیر

    مکان پایگاه داده MySQL، پورت، نام کاربری و رمز عبور خود را وارد کنید.

    اس۳

    کلید دسترسی مخفی Amazon S3 خود را وارد کنید.

    پستگراسکیو‌ال

    مکان پایگاه داده PostgreSQL، پورت، نام کاربری، رمز عبور و پایگاه داده خود را وارد کنید.

    انتقال به سرخ

    مکان پایگاه داده Redshift، پورت، نام کاربری، رمز عبور و پایگاه داده خود را وارد کنید.

    sFTP

    مکان سرور sFTP، نام کاربری و رمز عبور خود را وارد کنید.

    دانه برف

    شناسه، نام کاربری و رمز عبور حساب کاربری Snowflake خود را وارد کنید.

  4. منبع داده خود را پیکربندی کنید، سپس روی Next کلیک کنید:

    بیگ‌کوئری

    جدول BigQuery را برای وارد کردن انتخاب کنید.

    فضای ذخیره‌سازی ابری

    مسیر gsutil، مانند gs://my-bucket/folder/ را وارد کنید و قالب‌بندی فایل خود را انتخاب کنید.

    اگر این اولین باری است که این منبع را متصل می‌کنید، یک هشدار ظاهر می‌شود. برای اعطای دسترسی، روی Apply کلیک کنید، سپس روی Next کلیک کنید. توجه: شما باید نقشی با مجوز واگذاری storage.buckets.setIamPolicy برای باکت مربوطه داشته باشید.

    خروجی زیر

    پایگاه داده MySQL و جدولی که می‌خواهید استفاده کنید را انتخاب کنید.

    اس۳

    آدرس فایلی که می‌خواهید آپلود کنید را نسبت به آدرس میزبان وارد کنید.

    پستگراسکیو‌ال

    طرحواره PostgreSQL و نام جدول (یا نمای) را وارد کنید.

    انتقال به سرخ

    طرحواره و نام جدول (یا نمای) Redshift را وارد کنید. به طور پیش‌فرض، Redshift از URL های مکان پایگاه داده که از این الگو پیروی می‌کنند استفاده می‌کند: cluster-identifier.account-number.aws-region.redshift.amazonaws.com .

    sFTP

    مسیر و نام فایل را وارد کنید، با / PATH / FILENAME .csv

    دانه برف

    پایگاه داده، طرحواره و جدول (یا نمای) مورد نظر خود را در Snowflake وارد کنید.

  5. یک مجموعه داده BigQuery را برای استفاده به عنوان مقصد واسطه انتخاب کنید، سپس روی Next کلیک کنید. این مرحله تضمین می‌کند که داده‌های شما به درستی قالب‌بندی شده‌اند .
  6. اختیاری: قالب داده‌های خود را تغییر دهید. تبدیلات شامل محاسبه هش، قالب‌بندی حروف کوچک/بزرگ و ادغام/تقسیم فیلدها می‌شود.
    1. روی اکشن > > تبدیل کلیک کنید.
    2. در پنلی که ظاهر می‌شود، روی «افزودن تغییر شکل» یا «افزودن تغییر شکل دیگر» کلیک کنید.
    3. از منوی کشویی، نوع تبدیل را انتخاب کنید و الزامات را وارد کنید.
    4. روی ذخیره کلیک کنید.
  7. حداقل یک کلید اتصال انتخاب کنید و فیلدهایی را که استفاده خواهید کرد، نگاشت کنید. مرکز داده‌های تبلیغات (Ads Data Hub) به طور خودکار فیلدهایی با نام‌های یکسان را که با مشخص شده‌اند، نگاشت می‌کند. ویرایش‌های لازم را انجام دهید، سپس روی بعدی (Next) کلیک کنید.
  8. برنامه زمانی تعیین کنید:
    1. نام اتصال خود را بنویسید.
    2. یک فرکانس تنظیم کنید، که مشخص می‌کند داده‌ها چند وقت یکبار به مجموعه داده‌ای که در مرحله قبل انتخاب کرده‌اید وارد می‌شوند. هر اجرا، داده‌ها را در جدول مقصد بازنویسی می‌کند.
    3. نحوه برخورد با تداخل شناسه‌های کاربری را مشخص کنید. می‌توانید بین حفظ تطابق موجود یا بازنویسی با داده‌های جدید یکی را انتخاب کنید.
  9. روی Finish کلیک کنید. جداول منطبق معمولاً ۱۲ ساعت پس از ایجاد، آماده‌ی پرس‌وجو هستند.

مشاهده جزئیات اتصال

صفحه جزئیات اتصال، اطلاعاتی در مورد اجراها و خطاهای اخیر یک اتصال مشخص به شما ارائه می‌دهد. برای مشاهده جزئیات یک اتصال خاص:

  1. روی اتصالات کلیک کنید.
  2. برای مشاهده جزئیات اتصال، روی نام آن کلیک کنید.
  3. اکنون می‌توانید جزئیات اتصال و اجراهای اخیر را مشاهده کنید. هر کدام دو نوع خطای ممکن را نشان می‌دهند: خطاهای سطح اتصال (اتصال اجرا نشد) و خطاهای سطح ردیف (ردیفی وارد نشد).
    1. وضعیت ناموفق (Failed status) نشان می‌دهد که کل اتصال اجرا نشده است (مثلاً مشکل مجوز حساب سرویس). برای مشاهده خطاهایی که بر اتصال تأثیر گذاشته‌اند، روی وضعیت خطا کلیک کنید.
    2. وضعیت «تکمیل‌شده» نشان می‌دهد که اتصال با موفقیت اجرا شده است. با این حال، ممکن است هنوز خطاهای سطح ردیف وجود داشته باشد - که با مقداری غیر صفر در ستون «ردیف‌های دارای خطا» نشان داده می‌شود. برای کسب اطلاعات بیشتر در مورد رکوردهای ناموفق، روی مقدار کلیک کنید.

ویرایش یک اتصال

جزئیات زیر قابل ویرایش هستند:

  • نام اتصال
  • برنامه
  • جدول مقصد
  • نقشه برداری میدانی

ویرایش منبع داده پشتیبانی نمی‌شود. برای تغییر منبع داده، یک اتصال جدید ایجاد کنید و اتصال قدیمی را حذف کنید.

برای ویرایش جزئیات اتصال:

  1. روی اتصالات کلیک کنید.
  2. روی نام اتصالی که می‌خواهید ویرایش کنید کلیک کنید.
  3. جزئیاتی را که می‌خواهید تغییر دهید ویرایش کنید:
    • نام اتصال: روی ویرایش کلیک کنید، نام جدید را وارد کنید، سپس Enter را فشار دهید.
    • برنامه: روی ویرایش کلیک کنید، برنامه جدید را تنظیم کنید، سپس روی ذخیره کلیک کنید.
    • جدول مقصد: روی ویرایش کلیک کنید، نام مقصد جدید را وارد کنید، سپس روی ذخیره کلیک کنید.
    • نگاشت فیلد: روی کلیک کنید، تغییرات را در فیلدها اعمال کنید، سپس روی ذخیره کلیک کنید.
  4. کلیک کنید.

داده‌های منطبق با پرس‌وجو

پرس و جو در جداول تطابق

وقتی جداول تطابق شما حاوی داده‌های کافی برای برآورده کردن بررسی‌های حریم خصوصی باشند، آماده اجرای پرس‌وجوها در جداول هستید.

جدول اصلی برای داده‌های شخص اول (1PD) با my_data نمایش داده می‌شود. این شامل اطلاعات شخصی قابل شناسایی (PII) و داده‌های غیر 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_network ، Ads Data Hub همچنین یک جدول تطبیق به نام adh.google_ads_impressions_policy_isolated_network_updm ایجاد می‌کند که شامل شناسه‌های کاربری شما است.

این جداول شامل زیرمجموعه‌ای از کاربران موجود در جداول اصلی هستند که در آن‌ها یک تطابق روی user_id وجود دارد. برای مثال، اگر جدول اصلی شامل داده‌های کاربر A و کاربر B باشد، اما فقط کاربر A تطبیق داده شده باشد، آنگاه کاربر B در جدول تطبیق وجود نخواهد داشت.

جداول تطبیق شامل یک ستون اضافی به نام 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 به حروف بزرگ و کوچک حساس است، بنابراین ممکن است لازم باشد رشته‌ها را در هر دو طرف مقایسه خود کدگذاری کنید تا از مقایسه دقیق آنها اطمینان حاصل شود.

نمونه سوالات

تعداد کاربران تطبیق یافته

این کوئری تعداد کاربران منطبق در جدول نمایش تبلیغات گوگل شما را شمارش می‌کند.

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

SELECT COUNT(DISTINCT user_id)
FROM adh.google_ads_impressions_updm

محاسبه نرخ تطابق

همه کاربران واجد شرایط تطبیق نیستند. به عنوان مثال، کاربران خارج از سیستم، کودکان و کاربران بدون رضایت از طریق UPDM تطبیق داده نمی‌شوند. می‌توانید از فیلد is_updm_eligible برای محاسبه دقیق‌تر نرخ تطبیق UPDM استفاده کنید. توجه داشته باشید که فیلد is_updm_eligible از اول اکتبر ۲۰۲۴ در دسترس بوده است. شما نمی‌توانید از این فیلد برای محاسبه نرخ تطبیق قبل از آن تاریخ استفاده کنید.

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

برای فهرستی از سوالات متداول مربوط به UPDM، به سوالات متداول UPDM مراجعه کنید.