تطبیق دادههای ارائهشده توسط کاربر (UPDM) به دادههای شخص اولی که درباره یک کاربر جمعآوری کردهاید - مانند اطلاعات از وبسایتها، برنامهها یا فروشگاههای فیزیکی خود - با فعالیت ورود به سیستم همان کاربر در همه دادههای تبلیغات Google ، از جمله دادههای متعلق به Google و دادههای ادارهشده، میپیوندد. این شامل دادههایی میشود که از طریق محصولات Google Marketing Platform (GMP) خریداری شدهاند، برای مثال، YouTube با استفاده از Display & Video 360 خریداری شده است. سایر محصولات GMP که متعلق به Google و اداره نمیشوند، پشتیبانی نمیشوند.
برای واجد شرایط بودن برای مطابقت دادههای ارائهشده توسط کاربر، رویداد تبلیغاتی باید به کاربر واردشده در دادههای آگهی Google پیوند داده شود.
این سند ویژگی تطبیق دادههای ارائهشده توسط کاربر را توصیف میکند و راهنمایی در مورد راهاندازی و استفاده ارائه میدهد.
نمای کلی برگه اتصالات
به دست آوردن بینش تبلیغاتی ارزشمند اغلب مستلزم پیوند داده ها از منابع متعدد است. ایجاد راه حل خود برای این مشکل خط لوله داده ها نیازمند سرمایه گذاری زمانی قابل توجه و سرمایه گذاری مهندسی است. صفحه اتصالات در Ads Data Hub این فرآیند را با ارائه یک رابط گام به گام و هدایتشده برای وارد کردن، تبدیل و مطابقت دادههای تبلیغات خود در BigQuery ساده میکند تا بتوانید از آن در جستارهای Ads Data Hub یا هر محصول دیگری که از BigQuery خوانده میشود استفاده کنید. غنیسازی پرسشهای شما با دادههای شخص اول میتواند تجربیات غنیتری برای مشتری ارائه دهد و در برابر تغییرات ردیابی تبلیغات در سطح صنعت مقاومتر است.
صفحه اتصالات با ابزارهایی ساخته شده است که به شما امکان می دهد اطلاعات شناسایی شخصی (PII) را رمزگذاری کنید و به روشی حفظ حریم خصوصی با شرکا به اشتراک بگذارید. پس از انتخاب ستونهایی که حاوی PII هستند، Ads Data Hub دادهها را رمزگذاری میکند و اطمینان حاصل میکند که دادههای شخص اول شما فقط میتوانند توسط افرادی که مجوز انجام این کار را دارند صادر یا خوانده شوند. دانستن اینکه کدام دادههای شخص اول برای اندازهگیری یا مورد استفاده فعالسازی شما مورد نیاز است میتواند دشوار باشد، بنابراین Ads Data Hub فهرستی جامع از موارد استفاده از پیش تعریفشده را ارائه میکند، سپس شما را در کل تجربه استخراج، تبدیل، و بارگیری دادههایتان راهنمایی میکند. در حالی که می تواند چندین نوع اتصال ایجاد کند، این سند فرض می کند که از صفحه اتصالات برای تطبیق داده های ارائه شده توسط کاربر استفاده می کنید.
پشتیبانی از منابع داده شخص اول
می توانید داده ها را از این منابع داده وارد کنید:
- BigQuery
- فضای ذخیره سازی ابری
- FTP امن (sFTP)
- دانه برف
- MySQL
- PostgreSQL
- آمازون Redshift
- آمازون S3
از آنجایی که تطبیق دادههای ارائهشده توسط کاربر فقط در موجودی متعلق به Google و برای کاربرانی که به سیستم وارد شدهاند در دسترس است، تحت تأثیر از بین رفتن آتی کوکیهای شخص ثالث قرار نمیگیرد. از آنجایی که نسبت به دادههای شخص ثالث در برابر تغییرات صنعت مقاومتر است، میتواند بینش غنیتری ارائه دهد که میتواند منجر به تعامل بیشتر مشتری شود.
اصطلاحات را یاد بگیرید
- اتصال داده ارائه شده توسط کاربر: یک اتصال داده ارائه شده توسط کاربر را برای وارد کردن و مطابقت با داده های خود، برنامه ریزی وارد کردن داده ها، تبدیل داده ها و مطابقت داده های تبلیغات خود با استفاده از شناسه کاربری تنظیم کنید. رویداد تبلیغاتی باید به یک کاربر وارد شده در داده های تبلیغات Google پیوند داده شود. به چندین پروژه Google Cloud نیاز دارد.
- اتصال داده شخص اول: یک اتصال داده شخص اول را به عنوان ابزار آماده سازی داده، برای برنامه ریزی واردات داده ها و تبدیل داده ها بدون ویژگی های پیشرفته UPDM تنظیم کنید. این نوع اتصال تنها به یک پروژه Google Cloud نیاز دارد.
- منبع داده: یک محصول متصل، فایل وارد شده، یا یکپارچه سازی شخص ثالث – به عنوان مثال، BigQuery.
- مقصد: مورد استفاده؛ معمولاً یک محصول یا ویژگی محصول Google است که در آن دادههای وارد شده فعال میشود - برای مثال، تطبیق دادههای ارائهشده توسط Ads Data Hub.
- پروژه مدیریت: پروژه Google Cloud که حاوی داده های تبلیغاتی اختصاصی شما در قالب خام است.
- مجموعه داده خروجی: مجموعه داده BigQuery که Ads Data Hub روی آن می نویسد. به طور پیش فرض، این مجموعه داده تحت پروژه مدیریت شما است. برای تغییر آن به پروژه Google Cloud دیگری، به پیکربندی حسابهای سرویس مراجعه کنید.
خلاصه فرآیند
- تنظیم هضم و تطبیق داده ها
- شما مجوزهای مورد نیاز را به حساب های سرویس در پروژه مدیریت خود اعطا می کنید. به تنظیم انتقال داده مراجعه کنید.
- دریافت و تطبیق داده های شخص اول
- شما داده های شخص اول خود را در مجموعه داده BigQuery خود قالب بندی و آپلود می کنید. برای ساده ترین راه اندازی، از پروژه مدیریت خود استفاده کنید. با این حال، میتوانید از هر مجموعه داده BigQuery که دارید استفاده کنید.
- شما با ایجاد یک اتصال و تنظیم زمانبندی واردات، درخواست تطبیق دادهها را آغاز میکنید.
- Google دادهها را بین پروژه شما و دادههای متعلق به Google حاوی شناسه کاربری Google و دادههای ارائهشده توسط کاربر هششده برای ساخت و بهروزرسانی جداول مطابقت میپیوندد.
- به دریافت داده های شخص اول مراجعه کنید
- جستارهای در حال انجام در Ads Data Hub، بر اساس داده های منطبق
- شما پرس و جوها را در مقابل جداول مطابقت اجرا می کنید به همان روشی که پرس و جوهای معمولی را در Ads Data Hub اجرا می کنید. به داده های مطابقت پرس و جو مراجعه کنید.
در مورد الزامات حفظ حریم خصوصی اطلاعات کسب کنید
جمع آوری داده های مشتری
هنگام استفاده از تطابق داده های ارائه شده توسط کاربر، باید داده های شخص اول را آپلود کنید. این میتواند اطلاعاتی باشد که از وبسایتها، برنامهها، فروشگاههای فیزیکی یا هر اطلاعاتی که مشتری مستقیماً با شما به اشتراک گذاشته است جمعآوری کردهاید.
شما باید:
- اطمینان حاصل کنید که خطمشی رازداری شما فاش میکند که دادههای مشتری را با اشخاص ثالث به اشتراک میگذارید تا خدمات را از طرف شما انجام دهند، و در صورت لزوم رضایت شما برای چنین اشتراکگذاریهایی را در صورت لزوم دریافت میکند.
- فقط از API یا رابط تایید شده Google برای آپلود داده های مشتری استفاده کنید
- از تمام قوانین و مقررات قابل اجرا ، از جمله هر کد خود تنظیمی یا صنعتی که ممکن است اعمال شود، پیروی کنید
تایید رضایت شخص اول
برای اطمینان از اینکه میتوانید از دادههای شخص اول خود در Ads Data Hub استفاده کنید، باید تأیید کنید که طبق خطمشی رضایت کاربر اتحادیه اروپا و خطمشی Ads Data Hub رضایت مناسبی برای اشتراکگذاری دادهها از کاربران نهایی EEA با Google دریافت کردهاید. این الزام برای هر حساب Ads Data Hub اعمال میشود و هر بار که دادههای شخص اول جدید را آپلود میکنید باید بهروزرسانی شود. هر کاربر می تواند از طرف کل حساب این تایید را انجام دهد.
توجه داشته باشید که همان قوانین پرس و جو سرویس Google که برای جستارهای تجزیه و تحلیل اعمال می شود در مورد جستارهای UPDM نیز اعمال می شود. به عنوان مثال، هنگام ایجاد جدول تطبیق، نمی توانید پرس و جوهای سرویس متقابل را روی کاربران در EEA اجرا کنید.
برای آشنایی با نحوه تأیید رضایت در Ads Data Hub، به الزامات رضایت برای منطقه اقتصادی اروپا مراجعه کنید.
اندازه داده ها
برای محافظت از حریم خصوصی کاربر نهایی، تطبیق داده های ارائه شده توسط کاربر این الزامات را در مورد اندازه داده های شما اعمال می کند:
- شما باید حداقل 1000 رکورد را در لیست کاربران خود آپلود کنید.
- هر بهروزرسانی موفقیتآمیز جدول مطابقت شما باید شامل حداقل تعداد کاربرانی باشد که به تازگی مطابقت داده شدهاند. این رفتار شبیه به بررسی تفاوت است.
- لیست شما نباید از حداکثر تعداد رکوردها تجاوز کند. برای اطلاع از حداکثر محدودیت داده، با نماینده Google خود تماس بگیرید.
انتقال داده را تنظیم کنید
قبل از شروع، باید حساب Ads Data Hub خود را برای ایجاد اتصالات داده پیکربندی کنید، به این ترتیب خط لوله تطبیق داده خود را ایجاد خواهید کرد. این مراحل را فقط یک بار باید انجام دهید.
از صفحه اتصالات ، روی Begin setup کلیک کنید تا جادوگر تنظیم حساب در مرحله فعال سازی UPDM باز شود.
چه مجوزهایی برای BigQuery و Cloud Storage اعطا می شود؟
اگر UPDM را برای استفاده با BigQuery یا Cloud Storage راهاندازی کردهاید، از این مرجع برای درک مجوزهایی که به حسابهای سرویس Ads Data Hub اعطا میشود، استفاده کنید.
BigQuery
حساب سرویس Datafusion | |||||||||
هدف | حساب سرویس datafusion برای نمایش لیستی از فیلدهای منبع در Ads Data Hub UI استفاده می شود. | ||||||||
قالب | service- some-number @gcp-sa-datafusion.iam.gserviceaccount.com | ||||||||
دسترسی مورد نیاز |
| ||||||||
حساب سرویس Dataproc | |||||||||
هدف | حساب سرویس dataproc مسئول اجرای خطوط لوله داده در پس زمینه است. | ||||||||
قالب | some-number -compute@developer.gserviceaccount.com | ||||||||
دسترسی مورد نیاز |
| ||||||||
حساب سرویس UPDM | |||||||||
هدف | حساب سرویس UPDM برای اجرای کار منطبق استفاده می شود. | ||||||||
قالب | service- some-number @gcp-sa-adsdataconnector.iam.gserviceaccount.com | ||||||||
دسترسی مورد نیاز |
|
فضای ذخیره سازی ابری
حساب سرویس Datafusion | |||||||
هدف | حساب سرویس datafusion برای نمایش لیستی از فیلدهای منبع در Ads Data Hub UI استفاده می شود. | ||||||
قالب | service- some-number @gcp-sa-datafusion.iam.gserviceaccount.com | ||||||
دسترسی مورد نیاز |
| ||||||
حساب سرویس Dataproc | |||||||
هدف | حساب سرویس dataproc مسئول اجرای خطوط لوله داده در پس زمینه است. | ||||||
قالب | some-number -compute@developer.gserviceaccount.com | ||||||
دسترسی مورد نیاز |
| ||||||
حساب سرویس UPDM | |||||||
هدف | حساب سرویس UPDM برای اجرای کار منطبق استفاده می شود. | ||||||
قالب | service- some-number @gcp-sa-adsdataconnector.iam.gserviceaccount.com | ||||||
دسترسی مورد نیاز |
|
سایر منابع داده
برای سایر منابع داده ضروری نیست
داده های شخص اول را بلع و مطابقت دهید
فرمت داده ها برای ورودی
داده های شما باید به این الزامات قالب بندی مطابقت داشته باشند تا به درستی مطابقت داشته باشند:
- در جایی که در توضیحات فیلد ورودی زیر مشخص شده است، باید با استفاده از هش 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
قرار دارند را حذف کنید. - هش کردن: 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"))
نام کوچک
- فضای خالی را بردارید
- حروف کوچک همه کاراکترها
- همه پیشوندها را حذف کنید - به عنوان مثال Mrs., Mr., Ms., Dr.
- لهجهها را حذف نکنید - برای مثال، è، é، ê یا ë
- هش کردن: 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
کد پستی
- داده های کد پستی را هش نکنید
- کد پستی و پستی ایالات متحده و بین المللی مجاز است
- برای ایالات متحده:
- کدهای 5 رقمی مجاز هستند - به عنوان مثال، 94043
- 5 رقم به دنبال پسوند 4 رقمی نیز مجاز است - برای مثال، 94043-1351 یا 940431351
- برای همه کشورهای دیگر:
- بدون نیاز به قالب بندی (بدون نیاز به حروف کوچک یا حذف فاصله و کاراکترهای خاص)
- پسوند کد پستی را کنار بگذارید
- هش کردن: ندارد
اعتبار سنجی هش و رمزگذاری داده ها
میتوانید از اسکریپتهای اعتبارسنجی هش زیر استفاده کنید تا مطمئن شوید که دادههایتان به درستی قالببندی شدهاند.
جاوا اسکریپت
پایه 16
/**
* @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()
پایتون
پایه 16
"""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()
برو
پایه 16
/*
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")
}
جاوا
پایه 16
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
پایه 16
/*
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`;
کلیدهای پیوستن
برخی از ترکیبات داده های ارائه شده توسط کاربر قوی تر از سایرین هستند. در زیر لیستی از ترکیبات مختلف داده های ارائه شده توسط کاربر ارائه شده است که بر اساس قدرت نسبی رتبه بندی شده اند. اگر از آدرسی استفاده می کنید، باید موارد زیر را وارد کنید: نام، نام خانوادگی، کشور و کد پستی.
- ایمیل، تلفن، آدرس (قوی ترین)
- تلفن، آدرس
- ایمیل، آدرس
- ایمیل، تلفن
- آدرس
- تلفن
- ایمیل (ضعیف ترین)
یک جدول مسابقه ایجاد کنید
- روی اتصالات > ایجاد اتصال > تطبیق داده های ارائه شده توسط کاربر کلیک کنید.
- یک منبع داده را انتخاب کنید، سپس روی اتصال کلیک کنید.
- اگر از شما خواسته شد احراز هویت کنید، سپس روی Next کلیک کنید:
BigQuery
برای اعطای دسترسی به BigQuery روی Apply کلیک کنید.
فضای ذخیره سازی ابری
برای اعطای دسترسی به فضای ذخیرهسازی ابری روی Apply کلیک کنید.
MySQL
محل پایگاه داده MySQL، پورت، نام کاربری و رمز عبور خود را وارد کنید.
S3
کلید دسترسی مخفی آمازون S3 خود را وارد کنید.
PostgreSQL
محل پایگاه داده، پورت، نام کاربری، رمز عبور و پایگاه داده PostgreSQL خود را وارد کنید.
انتقال به قرمز
محل پایگاه داده Redshift، پورت، نام کاربری، رمز عبور و پایگاه داده خود را وارد کنید.
sFTP
مکان سرور sFTP، نام کاربری و رمز عبور خود را وارد کنید.
دانه برف
شناسه حساب Snowflake، نام کاربری و رمز عبور خود را وارد کنید.
- منبع داده خود را پیکربندی کنید، سپس روی Next کلیک کنید:
BigQuery
جدول BigQuery را برای وارد کردن انتخاب کنید.
فضای ذخیره سازی ابری
مسیر gsutil را وارد کنید، مانند
gs://my-bucket/folder/
و قالب بندی فایل خود را انتخاب کنید.اگر برای اولین بار است که این منبع را متصل می کنید، یک هشدار ظاهر می شود. برای اعطای دسترسی روی Apply کلیک کنید، سپس روی Next کلیک کنید. توجه: شما باید نقشی با اجازه واگذاری
storage.buckets.setIamPolicy
برای سطل مربوطه داشته باشید.MySQL
پایگاه داده و جدول MySQL را که می خواهید استفاده کنید انتخاب کنید.
S3
URI فایلی را که می خواهید آپلود کنید، نسبت به آدرس میزبان وارد کنید.
PostgreSQL
طرح و نام جدول (یا مشاهده) PostgreSQL را وارد کنید.
انتقال به قرمز
طرحواره Redshift و نام جدول (یا مشاهده) را وارد کنید. بهطور پیشفرض، Redshift از نشانیهای اینترنتی مکان پایگاه داده استفاده میکند که از این الگو پیروی میکنند:
cluster-identifier.account-number.aws-region.redshift.amazonaws.com
.sFTP
مسیر و نام فایل را با فرمت
/ PATH / FILENAME .csv
وارد کنیددانه برف
پایگاه داده Snowflake، طرحواره و جدول (یا نمای) مورد نظر خود را وارد کنید.
- یک مجموعه داده BigQuery را برای استفاده به عنوان مقصد واسطه انتخاب کنید، سپس روی Next کلیک کنید. این مرحله تضمین می کند که داده های شما به درستی قالب بندی شده اند.
- اختیاری: قالب داده های خود را تغییر دهید. تبدیلها شامل هش محاسباتی، قالببندی حروف کوچک/ بزرگ و فیلدهای ادغام/تقسیم میشود.
- روی Action > > Transform کلیک کنید.
- در پانلی که ظاهر می شود، روی افزودن تبدیل یا افزودن یک تبدیل دیگر کلیک کنید
- یک نوع تبدیل را از منوی کشویی انتخاب کنید و شرایط مورد نیاز را وارد کنید.
- روی ذخیره کلیک کنید.
- حداقل یک کلید پیوستن را انتخاب کنید و فیلدهایی را که استفاده خواهید کرد نقشه برداری کنید. Ads Data Hub به طور خودکار فیلدهایی را با نامهای یکسان ترسیم میکند که با علامت نشان داده شده است. هر گونه ویرایش لازم را انجام دهید، سپس روی Next کلیک کنید.
- تنظیم برنامه:
- اتصال خود را نام ببرید
- یک فرکانس را تنظیم کنید و تعیین کنید که چقدر داده ها به مجموعه داده ای که در مرحله قبل انتخاب کردید وارد شوند. هر اجرا داده ها را در جدول مقصد بازنویسی می کند.
- نحوه رسیدگی به برخوردهای شناسه کاربری را مشخص کنید. میتوانید بین حفظ مطابقت موجود یا بازنویسی با دادههای جدید یکی را انتخاب کنید.
- روی Finish کلیک کنید. جداول تطبیق معمولاً 12 ساعت پس از ایجاد آنها آماده استعلام هستند.
مشاهده جزئیات اتصال
صفحه جزئیات اتصال اطلاعاتی در مورد اجراها و خطاهای اخیر یک اتصال داده شده به شما می دهد. برای مشاهده جزئیات یک اتصال خاص:
- روی Connections کلیک کنید.
- روی نام اتصال کلیک کنید تا جزئیات آن را مشاهده کنید.
- اکنون می توانید جزئیات اتصال و اجرای اخیر را مشاهده کنید. هر کدام دو نوع خطای ممکن را نشان میدهند: سطح اتصال (اتصال اجرا نشد) و خطاهای سطح ردیف (یک ردیف وارد نشده است).
- وضعیت ناموفق نشان می دهد که کل اتصال اجرا نشد (مثلاً مشکل مجوز حساب سرویس). روی وضعیت خطا کلیک کنید تا ببینید کدام خطاها بر اتصال تأثیر گذاشته است.
- وضعیت تکمیل شده نشان می دهد که اتصال با موفقیت انجام شد. با این حال، ممکن است همچنان خطاهای سطح ردیف وجود داشته باشد - که با یک مقدار غیر صفر در ستون "ردیف های دارای خطا" نشان داده شده است. برای کسب اطلاعات بیشتر در مورد اینکه کدام رکوردها ناموفق هستند، روی مقدار کلیک کنید.
یک اتصال را ویرایش کنید
جزئیات زیر قابل ویرایش است:
- نام اتصال
- برنامه ریزی کنید
- جدول مقصد
- نقشه برداری میدانی
ویرایش منبع داده پشتیبانی نمی شود. برای تغییر منبع داده، یک اتصال جدید ایجاد کنید و قدیمی را حذف کنید.
برای ویرایش جزئیات اتصال:
- روی Connections کلیک کنید.
- روی نام اتصالی که میخواهید ویرایش کنید کلیک کنید.
- جزئیاتی را که می خواهید تغییر دهید ویرایش کنید:
- نام اتصال: روی Edit کلیک کنید، نام جدید را وارد کنید، سپس Enter را فشار دهید.
- زمانبندی: روی ویرایش کلیک کنید، زمانبندی جدید را تنظیم کنید، سپس روی ذخیره کلیک کنید.
- جدول مقصد: روی ویرایش کلیک کنید، نام مقصد جدید را وارد کنید، سپس روی ذخیره کلیک کنید.
- نقشهبرداری فیلد: روی کلیک کنید، تغییراتی در فیلدها ایجاد کنید، سپس روی ذخیره کلیک کنید.
- کلیک کنید.
داده های منطبق را جستجو کنید
جداول مسابقه را استعلام کنید
وقتی جداول تطبیق شما حاوی داده های کافی برای بررسی حریم خصوصی باشد، شما آماده اجرای پرس و جوها در برابر جداول هستید.
جدول اصلی برای داده های شخص اول (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
است که شناسه کاربر را به عنوان BYTES ذخیره می کند.
مهم است که هنگام نوشتن پرس و جوهای خود، نوع فیلد را در نظر بگیرید. عملگرهای مقایسه SQL انتظار دارند که لفظ هایی که شما مقایسه می کنید از یک نوع باشند. بسته به اینکه user_id
چگونه در جدول داده های شخص اول شما ذخیره می شود، ممکن است لازم باشد مقادیر موجود در جدول را قبل از تطبیق داده ها رمزگذاری کنید. برای تطابق موفق، باید کلید پیوستن خود را به BYTES بریزید:
JOIN ON
adh.google_ads_impressions_updm.customer_data_user_id = CAST(my_data.user_id AS BYTES)
علاوه بر این، مقایسه رشتهها در SQL به بزرگنویسی حساس هستند، بنابراین ممکن است لازم باشد رشتهها را در دو طرف مقایسه خود رمزگذاری کنید تا اطمینان حاصل کنید که میتوان آنها را به دقت مقایسه کرد.
نمونه پرس و جو
شمارش کاربران همسان
این پرس و جو تعداد کاربران منطبق را در جدول نمایش تبلیغات Google شما می شمارد.
/* Count matched users in Google Ads impressions table */
SELECT COUNT(DISTINCT user_id)
FROM adh.google_ads_impressions_updm
محاسبه نرخ تطابق
همه کاربران واجد شرایط تطبیق نیستند. به عنوان مثال، کاربران خارج از سیستم، کودکان و کاربران بدون رضایت از طریق UPDM مطابقت ندارند. میتوانید از فیلد is_updm_eligible
برای محاسبه دقیقتر نرخهای مطابقت UPDM استفاده کنید. توجه داشته باشید که فیلد 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 Ads بپیوندید
این جستار نحوه پیوستن به داده های شخص اول را با داده های Google Ads نشان می دهد:
/* Join first-party data with Google Ads data. The customer_data_user_id field
contains your ID as BYTES. You need to cast your join key into BYTES for
successful matches. */
SELECT
inventory_type,
COUNT(*) AS impressions
FROM
adh.yt_reserve_impressions_updm AS google_data_imp
LEFT JOIN
`my_data`
ON
google_data_imp.customer_data_user_id = CAST(my_data.user_id AS BYTES)
GROUP BY
inventory_type
سوالات متداول UPDM
برای فهرستی از سؤالات متداول مربوط به UPDM، سؤالات متداول UPDM را ببینید.