התכונה "התאמה לפרטים שהמשתמשים סיפקו" (UPDM) מאפשרת לצרף את הנתונים מאינטראקציה ישירה (First-Party) שנאספו לגבי משתמש – כמו מידע מהאתרים, מהאפליקציות או מהחנויות הפיזיות – לפעילות של אותו המשתמש המחובר, שנאספה בנתוני מודעות ממוצרי Google, כולל נתונים ממוצרים שבבעלות ובהפעלת Google. הנתונים האלה כוללים נתונים שנרכשו דרך מוצרי Google Marketing Platform (GMP), למשל, YouTube שנרכש באמצעות Display & Video 360. אין תמיכה במוצרים אחרים של GMP שלא נמצאים בבעלות ובהפעלה של Google.
כדי שאפשר יהיה להשתמש בהתאמה לפרטים שהמשתמשים סיפקו (UPDM), אירוע המודעה חייב להיות מקושר למשתמש מחובר בנתוני מודעות ממוצרי Google.
במאמר הזה מוסבר על התכונה "התאמה לפרטים שהמשתמשים סיפקו", ואיך להגדיר אותה ולהשתמש בה.
סקירה כללית על "התאמה בענן פרטי"
כדי לקבל תובנות חשובות לגבי פרסום, בדרך כלל צריך לאסוף נתונים ממקורות שונים. כדי לפתח פתרון משלכם לבעיה הזו בפייפליין, צריך להשקיע הרבה זמן ומשאבי הנדסה. התכונה "התאמה פרטית בענן" ב-Ads Data Hub מייעלת את התהליך הזה. היא מספקת תבנית שאילתה של Ads Data Hub ליצירת טבלת התאמה ב-BigQuery, שבה אפשר להשתמש בשאילתות של Ads Data Hub כדי להתאים בין נתוני המודעות לבין הנתונים מאינטראקציה ישירה (First-Party). העשרת השאילתות בנתונים מאינטראקציה ישירה (First-Party) יכולה לשפר את חוויית הלקוח (CX), והיא עמידה יותר בפני שינויים בתחום המעקב אחרי ביצועים של מודעות.
התכונה "התאמה לפרטים שהמשתמשים סיפקו" זמינה רק במלאי שטחי פרסום שנמצא בבעלות ובהפעלה של Google, עבור משתמשים מחוברים. לכן, היא לא מושפעת מההוצאה משימוש של קובצי Cookie של צד שלישי. התכונה עמידה יותר לשינויים בתחום בהשוואה לנתונים מצד שלישי, ולכן היא יכולה לספק תובנות מקיפות יותר שיכולות להוביל למעורבות גבוהה יותר מצד הלקוחות.
סיכום התהליך
- הגדרה של הטמעת נתונים והתאמת נתונים
- אתם מוודאים שהנתונים מאינטראקציה ישירה (First-Party) נמצאים ב-BigQuery, ושלחשבון השירות יש גישת קריאה לנתונים האלה. הגדרת הטמעת נתונים
- הטמעת נתונים מאינטראקציה ישירה (First-Party) והתאמה
- אתם מעצבים ומעלים את הנתונים מאינטראקציה ישירה (First-Party) למערך הנתונים ב-BigQuery.
- אתם יוזמים בקשה להתאמת נתונים על ידי יצירת, שאילתת ניתוח של Private Cloud Match והגדרת לוח זמנים.
- Google משלבת בין הנתונים מהפרויקט שלכם לבין נתונים בבעלות Google שמכילים את מזהה המשתמש של Google ופרטים מגובבים שהמשתמשים סיפקו, כדי ליצור ולעדכן טבלאות התאמה.
- הטמעת נתונים מאינטראקציה ישירה (First-Party)
- שאילתות מתמשכות ב-Ads Data Hub, על סמך נתונים תואמים
- אתם מריצים שאילתות על טבלאות ההתאמה באותו אופן שבו אתם מריצים שאילתות רגילות ב-Ads Data Hub. שאילתה על נתונים תואמים
מידע על הדרישות בנושא פרטיות
איסוף נתוני לקוחות
כשמשתמשים בהתאמה לפרטים שהמשתמשים מספקים (UPDM), צריך להעלות נתונים מאינטראקציה ישירה (First-Party). אלה יכולים להיות נתונים שאספתם מהאתרים, מהאפליקציות או מהחנויות הפיזיות שלכם, או כל מידע שהלקוחות שיתפו איתכם ישירות.
פעולות שצריך לבצע:
- לוודא שמדיניות הפרטיות שלכם כוללת הצהרה על שיתוף של נתוני הלקוחות עם גורמי צד שלישי לצורך מתן שירותים מטעמכם, ולבקש את הסכמת הלקוחות לשיתופים האלה כנדרש על פי חוק.
- להשתמש רק בממשק או ב-API שאושרו על ידי Google כדי להעלות נתוני לקוחות
- לפעול בהתאם לכל החוקים והתקנות החלים, כולל כללים לרגולציה עצמית או כללים שנהוגים בתחום, אם יש כאלה.
אישור הסכמה מאינטראקציה ישירה (First-Party)
כדי להבטיח שתוכלו להשתמש בנתונים מאינטראקציה ישירה (First-Party) ב-Ads Data Hub, אתם צריכים לאשר שקיבלתם הסכמה מתאימה לשיתוף נתונים משותפים של משתמשי קצה ב-EEA עם Google, בהתאם למדיניות Google בנושא הסכמת משתמשים באיחוד האירופי ולמדיניות של Ads Data Hub. הדרישה הזו חלה על כל חשבון Ads Data Hub, וצריך לעדכן אותה בכל פעם שמעלים נתונים מאינטראקציה ישירה (First-Party) חדשים. כל משתמש יכול לאשר את ההצהרה בשם החשבון כולו.
שימו לב שכללי השאילתות של שירות Google שחלים על שאילתות ניתוח חלים גם על שאילתות UPDM. לדוגמה, כשיוצרים טבלת התאמה, אי אפשר להריץ שאילתות בין שירותים על משתמשים ב-EEA.
במאמר הדרישות לקבלת הסכמה באזור הכלכלי האירופי מוסבר איך לאשר את קבלת ההסכמה ב-Ads Data Hub.
גודל הנתונים
כדי להגן על פרטיות משתמשי הקצה, התאמת הפרטים שהמשתמשים סיפקו אוכפת את הדרישות הבאות לגבי גודל הנתונים:
- צריך להעלות לפחות 1,000 רשומות לרשימת המשתמשים.
הגדרת הטמעת נתונים
לפני שמתחילים, חשוב לוודא:
- הנתונים מאינטראקציה ישירה (First-Party) צריכים להיות ב-BigQuery. אם יש לכם היקף VPC-SC, הנתונים מאינטראקציה ישירה צריכים להיות בתוך ה-VPC-SC.
- לחשבון השירות שלכם ב-Ads Data Hub צריכה להיות גישת קריאה לנתונים מאינטראקציה ישירה.
- הנתונים מאינטראקציה ישירה צריכים להיות בפורמט הנכון ולעבור גיבוב (hash) בצורה תקינה. פרטים נוספים מופיעים בקטע הבא.
מעבר לזה, אין תהליך נוסף להצטרפות ל-Private Cloud Match. אם אתם יכולים להריץ שאילתת ניתוח, אתם יכולים להריץ שאילתת Private Cloud Match.
הטמעה והתאמה של נתונים מאינטראקציה ישירה (First-Party)
הרשאות במקור ודרישות לחיבור
בקישורים של Ads Data Hub נעשה שימוש בחשבון השירות שמוצג בקטע Settings > Details > Service account (בדרך כלל service-<number>@gcp-sa-adsdatahub.iam.gserviceaccount.com). צריך להקצות לו את התפקידים הבאים:
- מקור BigQuery: התפקיד
roles/bigquery.dataViewer(צפייה בנתוני BigQuery) במערך הנתונים או בטבלה של המקור. - מקור ב-Cloud Storage: התפקיד
roles/storage.objectViewer(Storage Object Viewer) בקטגוריה או באובייקט של המקור. - יעד ייבוא נתונים מאינטראקציה ישירה (First-Party):
roles/bigquery.dataEditor(עריכת נתונים ב-BigQuery) במערך הנתונים של היעד, אם הטבלה לא נמצאת במערך הנתונים שמוגדר כברירת מחדל.
דרישות לגבי שדות וסוגי נתונים
- התאמה לפרטים שהמשתמשים סיפקו (UPDM):
- ממפים את השדה
user_idועוד שדה אחד לפחות של פרטים אישיים מזהים (email,phoneאו כתובת מלאה:first_name,last_name,country,zip_code). -
user_id,countryו-zip_code:STRINGבטקסט פשוט (ללא גיבוב). במקור של BigQuery, העמודות האלה כבר צריכות להיות מסוגSTRING. סוגים אחרים (למשלINT64) נכשלים כשהחיבור נוצר. החיבורים ממירים אתuser_idל-BYTESבטבלת ההתאמה.countryצריך להיות קוד בן 2 אותיות לפי תקן ISO 3166-1 alpha-2. -
email,phone,first_nameו-last_name:HASH– צריך לבצע גיבוב באמצעות SHA-256 וקידוד באמצעות Base64 (אפשר גם להשתמש בערך SHA-256 הקסדצימלי של 64 תווים). הכלי "חיבורים" לא מגבב נתונים. ערכי טקסט פשוט לא נתפסים כשהחיבור נוצר, וכל הפעלה נכשלת עם... must be encoded using TO_BASE64(SHA256(...)). - לחיבורים של התאמה לפרטים שהמשתמשים סיפקו אין טבלת יעד. כל השאילתות בחשבון, ושאילתות UPDM שמופעלות באופן ידני, כותבות לאותם נתוני התאמה, כך שכל הפעלה מחליפה את הקודמת. מספיק חיבור אחד של UPDM לכל חשבון.
- במאמר הכנת הנתונים להזנה מפורטים הכללים לכל שדה.
- ממפים את השדה
- ייבוא נתונים מאינטראקציה ישירה (First-Party):
- צריך להשתמש רק בסוגי הנתונים שמוצעים בממשק המשתמש:
INTEGER,STRING,HASH,DOUBLE,DATEו-TIMESTAMP. אין תמיכה בסוגים אחרים של BigQuery. - מקור BigQuery: הסוג הממופה לא מוחל. כל עמודת יעד שומרת על הסוג של עמודת המקור שלה.
- מקור Cloud Storage: העמודות נקראות כ-
STRINGומומרות לסוג הממופה. ערכים שלא ניתן להמיר הופכים ל-NULLבלי שההרצה תיכשל. - כל הפעלה מחליפה את כל טבלת היעד, ולא מוסיפה לה. אם במקור אין שורות, היעד יהיה ריק. אל תשתמשו בטבלת המקור או בטבלה שאתם צריכים לשמור את הנתונים שלה בתור טבלת היעד.
- צריך להשתמש רק בסוגי הנתונים שמוצעים בממשק המשתמש:
דרישות לגבי עמודות בקובץ CSV ב-Cloud Storage
- מוסיפים שורת כותרת. המערכת מדלגת על השורה הראשונה, ולא משתמשת בשמות העמודות שבה.
- הקובץ חייב להכיל בדיוק את עמודות המקור הממופות, לא יותר ולא פחות. עמודות מיותרות גורמות לכישלון ההפעלה.
- ייבוא נתונים מאינטראקציה ישירה (First-Party): העמודות צריכות להיות באותו סדר כמו מיפוי השדות.
- התאמה לפרטים שהמשתמשים סיפקו: העמודות צריכות להיות בסדר הזה, וצריך להשאיר רק את השדות שאתם ממפים:
user_id, email, phone, first_name,last_name, country, zip_code. אין חשיבות לסדר של שורות המיפוי. - אם סדר העמודות שונה, המערכת לא תזהה את זה: הערכים ייטענו בשדות הלא נכונים (או ששיעור הנתונים הזהים ירד) בלי שתוצג שגיאה.
מקורות נתונים נתמכים ומגבלות חיבור
- מקורות נתונים: אפשר להשתמש רק במקורות מ-BigQuery ומ-Cloud Storage.
- שמות של טבלאות ב-BigQuery: בטבלאות המקור והיעד ב-BigQuery צריך לציין את השם המלא של
project.dataset.table. - נתיבי קבצים ב-Cloud Storage: צריך לספק URI של קובץ אחד (כמו
gs://bucket/path/file.csv). אין תמיכה בנתיבים עם התווים הכלליים לחיפוש*או?. - שמות החיבורים: לכל חיבור בחשבון צריך להיות שם ייחודי.
הכנת הנתונים להזנה
כדי שהנתונים יותאמו בצורה נכונה, הם צריכים לעמוד בדרישות הפורמט הבאות:
- במקרים שבהם מצוין בתיאורים של שדות להזנת קלט הבאים, צריך להעלות באמצעות גיבוב SHA256.
- UPDM תומך בקידוד Base64. מידע נוסף זמין במאמר TO_BASE64.
- השדות להזנת קלט צריכים להיות בפורמט של מחרוזות. לדוגמה, אם אתם משתמשים בפונקציית הגיבוב SHA256 של BigQuery, השתמשו בטרנספורמציה הבאה:
TO_BASE64(SHA256(user_data)).
מזהה המשתמש
- סוג הנתונים:
BYTES - גיבוב (hashing): ללא
אימייל
- מסירים רווחים לבנים בתחילת הטקסט ובסופו.
- יש להשתמש באותיות קטנות בלבד
- יש לכלול שם דומיין בכל כתובות האימייל. למשל: gmail.com או hotmail.co.jp
- הסירו סימנים דיאקריטיים – לדוגמה, שנו את è, é, ê או ë ל-e
- מסירים את כל הנקודות (.) שלפני שם הדומיין בכתובות אימייל עם הסיומת
gmail.comו-googlemail.com. - גיבוב (hash): קידוד Base64 של SHA256
בתוקף: TO_BASE64(SHA256("jeffersonloveshiking@gmail.com"))
לא תקין: TO_BASE64(SHA256("JéffersonLôvesHiking@gmail.com"))
טלפון
- הסרת רווחים לבנים
- הפורמט צריך להיות E.164. לדוגמה, מספר בארה"ב: +14155552671, מספר בבריטניה: +442071838750
- מסירים את כל התווים המיוחדים, חוץ מהסימן "+" לפני קידומת המדינה.
- גיבוב (hash): קידוד Base64 של SHA256
בתוקף: TO_BASE64(SHA256("+18005550101"))
לא תקין: TO_BASE64(SHA256("(800) 555-0101"))
שם פרטי
- הסרת רווחים לבנים
- יש להשתמש באותיות קטנות בלבד
- מסירים את כל הקידומות, למשל: גב', מר, גב', ד"ר
- אל תסירו סימנים דיאקריטיים, כמו è, é, ê או ë.
- גיבוב (hash): קידוד Base64 של SHA256
בתוקף: TO_BASE64(SHA256("daní"))
לא תקין: TO_BASE64(SHA256("Daní"))
שם משפחה
- הסרת רווחים לבנים
- יש להשתמש באותיות קטנות בלבד
- הסירו את כל הסיומות, למשל: "הבן", Sr., 2nd, 3rd, II, III, PHD, MD
- אל תסירו סימנים דיאקריטיים, כמו è, é, ê או ë.
- גיבוב (hash): קידוד Base64 של SHA256
בתוקף: TO_BASE64(SHA256("délacruz"))
לא תקין: TO_BASE64(SHA256("dé la Cruz, Jr."))
מדינה
- צריך לכלול את קוד המדינה גם אם כל נתוני הלקוחות הם מאותה מדינה.
- אל תגבבו את נתוני המדינה.
- צריך להשתמש בקודי מדינה לפי תקן ISO 3166-1 alpha-2
- גיבוב (hashing): ללא
בתוקף: US
לא תקין: United States of America או USA
מיקוד
- אל תגבבו את נתוני המיקוד.
- אפשר להזין מיקוד של ארה"ב וגם של מדינות אחרות
- בארה"ב:
- אפשר להשתמש במיקוד בן 5 ספרות, למשל 94043
- מותר גם להזין מיקוד בן 5 ספרות עם תוספת של 4 ספרות, למשל 94043-1351 או 940431351
- בכל שאר המדינות:
- אין צורך בפורמט מסוים (לא צריך להשתמש באותיות קטנות או להסיר רווחים ותווים מיוחדים)
- אין לכלול תוספות למיקוד
- גיבוב (hashing): ללא
אימות גיבוב (hash) וקידוד נתונים
אתם יכולים להשתמש בסקריפטים הבאים לאימות הגיבוב כדי לוודא שהנתונים בפורמט הנכון.
JavaScript
/**
* @fileoverview Provides the hashing algorithm, as well as some valid hashes of
* sample data for testing.
*/
async function hash(token) {
// Removes leading or trailing spaces and converts all characters to lowercase.
const formattedToken = token.trim().toLowerCase();
// Hashes the formatted string using the SHA-256 hashing algorithm.
const hashBuffer = await crypto.subtle.digest(
'SHA-256', (new TextEncoder()).encode(formattedToken));
// Converts the hash buffer to a base64-encoded string and returns it.
const base64Str = btoa(String.fromCharCode(...new Uint8Array(hashBuffer)));
return base64Str;
}
function main() {
// Expected hash for test@gmail.com:
// h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
hash('test@gmail.com').then(result => console.log(result));
// Expected hash for +18005551212:
// YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
hash('+18005551212').then(result => console.log(result));
// Expected hash for John: ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
hash('John').then(result => console.log(result));
// Expected hash for Doe: eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
hash('Doe').then(result => console.log(result));
}
main()
Python
"""Provides the hashing algorithm, as well as some valid hashes of sample data for testing.
Supports: Python 2, Python 3
Sample hashes:
- Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
- Phone '+18005551212': YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
- First name 'John': ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
- Last name 'Doe': eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
"""
import base64
import hashlib
def hash(token):
# Generates a base64-encoded SHA-256 hash of a normalized input string.
return base64.b64encode(
hashlib.sha256(
token.strip().lower().encode('utf-8')).digest()).decode('utf-8')
def print_hash(token, expected=None):
# Computes and displays the hash of a token, with optional validation.
hashed = hash(token)
if expected is not None and hashed != expected:
print(
'ERROR: Incorrect hash for token "{}". Expected "{}", got "{}"'.format(
token, expected, hashed))
return
print('Hash: "{}"\t(Token: {})'.format(hashed, token))
def main():
# Tests the hash function with sample tokens and expected results.
print_hash(
'test@gmail.com', expected='h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=')
print_hash(
'+18005551212', expected='YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=')
print_hash('John', expected='ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=')
print_hash('Doe', expected='eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=')
if __name__ == '__main__':
main()
Go
/*
Provides the hashing algorithm, as well as some valid hashes of sample data for testing.
Sample hashes:
- Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
- Phone '+18005551212': YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
- First name 'John': ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
- Last name 'Doe': eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
*/
package main
import (
"crypto/sha256"
"encoding/base64"
"fmt"
"strings"
)
// Hash hashes an email, phone, first name, or last name into the correct format.
func Hash(token string) string {
formatted := strings.TrimSpace(strings.ToLower(token))
hashed := sha256.Sum256([]byte(formatted))
encoded := base64.StdEncoding.EncodeToString(hashed[:])
return encoded
}
// PrintHash prints the hash for a token.
func PrintHash(token string) {
fmt.Printf("Hash: \"%s\"\t(Token: %s)\n", Hash(token), token)
}
func main() {
PrintHash("test@gmail.com")
PrintHash("+18005551212")
PrintHash("John")
PrintHash("Doe")
}
Java
package updm.hashing;
import static java.nio.charset.StandardCharsets.UTF_8;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
/**
* Example of the hashing algorithm.
*
* <p>Sample hashes:
*
* <ul>
* <li>Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
* <li>Phone '+18005551212': YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
* <li>First name 'John': ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
* <li>Last name 'Doe': eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
* </ul>
*/
public final class HashExample {
private HashExample() {}
public static String hash(String token) {
// Normalizes and hashes the input token using SHA-256 and Base64 encoding.
String formattedToken = token.toLowerCase().strip();
byte[] hash;
try {
hash = MessageDigest.getInstance("SHA-256").digest(formattedToken.getBytes(UTF_8));
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException("SHA-256 not supported", e);
}
return Base64.getEncoder().encodeToString(hash);
}
public static void printHash(String token) {
// Calculates and prints the hash for the given token.
System.out.printf("Hash: \"%s\"\t(Token: %s)\n", hash(token), token);
}
public static void main(String[] args) {
// Executes hash calculations and prints results for sample tokens.
printHash("test@gmail.com");
printHash("+18005551212");
printHash("John");
printHash("Doe");
}
}
SQL
/*
Provides the hashing algorithm, as well as some valid hashes of sample data for testing.
The following code uses Google Standard SQL and can be run on BigQuery to generate match tables from unhashed data.
Sample hashes:
- Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
- Phone '+18005551212': YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
- First name 'John': ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
- Last name 'Doe': eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
The unhashed input table schema is assumed to be:
- Column name: UserID, Type: String
- Column name: Email, Type: String
- Column name: Phone, Type: String
- Column name: FirstName, Type: String
- Column name: LastName, Type: String
- Column name: PostalCode, Type: String
- Column name: CountryCode, Type: String
*/
-- Creates a new table with Base64-encoded SHA-256 hashes of specified columns.
CREATE TABLE `your_project_name.your_dataset_name.output_hashed_table_name`
AS
SELECT
UserID,
TO_BASE64(SHA256(LOWER(Email))) AS Email,
TO_BASE64(SHA256(Phone)) AS Phone,
TO_BASE64(SHA256(LOWER(FirstName))) AS FirstName,
TO_BASE64(SHA256(LOWER(LastName))) AS LastName,
PostalCode,
CountryCode,
FROM
`your_project_name.your_dataset_name.input_unhashed_table_name`;
מפתחות איחוד (join)
שילובים מסוימים של פרטים שהמשתמשים סיפקו הם חזקים יותר מאחרים. בהמשך מופיעה רשימה של שילובים שונים של פרטים שהמשתמשים מספקים, לפי דירוג החוזק היחסי שלהם. אם אתם משתמשים בכתובת, אתם צריכים לכלול: שם פרטי, שם משפחה, מדינה ומיקוד.
- כתובת אימייל, מספר טלפון, כתובת (הכי חזק)
- טלפון, כתובת
- כתובת אימייל, כתובת
- אימייל, טלפון
- כתובת
- טלפון
- אימייל (הכי פחות חזק)
יצירת טבלת התאמות
- לוחצים על add Create > Query.
מעתיקים את תבנית השאילתה Private cloud match table generation ומדביקים אותה בעורך השאילתות. אופציונלי: אם הנתונים עדיין לא מגובבים, אתם יכולים להשתמש בתבנית Private cloud match table generation (with hashing).
/* Private cloud match table generation Create a new match table using your first party data with this template. Parameters: Manually remove all the parameters tagged with @ prefix and replace them with column names from your first party table: * @user_id * @email * @phone * @first_name * @last_name * @country_code * @postal_code And your BigQuery table information: * @my_project: Your BigQuery project where the first party table is. * @my_dataset: Your dataset where the first party table is. * @my_first_party_table: Your first party table. */ CREATE OR REPLACE TABLE adh.updm_match_table AS ( SELECT CAST(@user_id AS BYTES) AS user_id, @email AS email, @phone AS phone, @first_name AS first_name, @last_name AS last_name, @country_code AS country, @postal_code AS zip_code FROM `@my_project.@my_dataset.@my_first_party_table` );/* Private cloud match table generation (with hashing) Create a new match table using your first party data with this template. Parameters: Manually remove all the parameters tagged with @ prefix and replace them with column names from your first party table: * @user_id * @email * @phone * @first_name * @last_name * @country_code * @postal_code And your BigQuery table information: * @my_project : Your BigQuery project where the first party table is. * @my_dataset : Your dataset where the first party table is. * @my_first_party_table : Your first party table. */ CREATE OR REPLACE TABLE adh.updm_match_table AS ( SELECT CAST(@user_id AS BYTES) AS user_id, TO_BASE64(SHA256(LOWER(@email))) AS email, TO_BASE64(SHA256(@phone)) AS phone, TO_BASE64(SHA256(LOWER(@first_name))) AS first_name, TO_BASE64(SHA256(LOWER(@last_name))) AS last_name, @country_code AS country, @postal_code AS zip_code FROM `@my_project.@my_dataset.@my_first_party_table` );כדי לספק כינוי מתאים, מחליפים את שמות הפרמטרים בשמות העמודות.
לוחצים על שמירה.
לוחצים על Run. כדי לרענן את טבלת ההתאמות, צריך להריץ את השאילתה הזו באופן ידני. כל הפעלה תחליף את טבלת ההתאמות הנוכחית.
העברת קישורים קיימים
הקישורים הקיימים בכרטיסייה Connections (קישורים) עוברים לממשק קישורים מעודכן, שמוטמע ישירות ב-Ads Data Hub. החיבורים המעודכנים קוראים מקורות וכותבים יעדים באמצעות חשבון השירות שמוצג בקטע Settings > Details > Service account (בדרך כלל service-<number>@gcp-sa-adsdatahub.iam.gserviceaccount.com), במקום חשבונות השירות הקודמים של Data Fusion, Dataproc ו-UPDM.
לפני שהחיבורים שלכם יועברו, השלימו את הפעולות לביצוע הבאות:
- הענקת הרשאות לחשבון השירות: מעניקים לחשבון השירות שמופיע בקטע Settings > Details > Service account (בדרך כלל
service-<number>@gcp-sa-adsdatahub.iam.gserviceaccount.com) את התפקידים הנדרשים במקור וביעד (roles/bigquery.dataViewer,roles/storage.objectViewerו-roles/bigquery.dataEditorבקבוצות נתונים ביעד שהן לא ברירת המחדל). יכול להיות שקישורים עם מקורות לא קריאים, שנמחקו או שהשתנו עדיין יועברו (במיוחד מקורות ב-Cloud Storage, שלא מאומתים בזמן ההעברה), אבל ההפעלות ייכשלו עד שתעניקו גישה או תתקנו את המקור. - המרת חיבורים לא נתמכים: חיבורים עם ההגדרות הבאות לא יועברו. צריך להמיר אותם לחיבורים נתמכים של BigQuery או Cloud Storage:
- מקורות נתונים אחרים (Amazon S3, Snowflake, MySQL, PostgreSQL, Amazon Redshift, sFTP או Salesforce): קודם מעבירים את הנתונים ל-BigQuery או ל-Cloud Storage, ואז יוצרים חיבור ל-BigQuery או ל-Cloud Storage.
- מיפויי שדות או סוגי נתונים שלא נתמכים: מעדכנים או יוצרים מחדש את החיבור כדי לעמוד בדרישות לגבי השדות וסוגי הנתונים.
- נתיבים עם תווים כלליים לחיפוש ב-Cloud Storage (
*או?): מחליפים את ה-URI של התו הכללי לחיפוש ב-URI של קובץ יחיד, או טוענים קודם את הקבצים ל-BigQuery. - שמות חיבורים כפולים: משנים את השם של החיבורים הכפולים או מוחקים אותם, כדי שלכל חיבור בחשבון יהיה שם ייחודי.
- מחיקת חיבורים שלא בשימוש: מחקו חיבורים מיושנים שאתם לא צריכים יותר.
נתונים תואמים לשאילתה
הרצת שאילתות על טבלאות ההתאמות
כשטבלאות ההתאמה מכילות מספיק נתונים כדי לעמוד בדרישות של בדיקות הפרטיות, אפשר להריץ שאילתות על הטבלאות.
הטבלה המקורית של נתונים מאינטראקציה ישירה (1PD) מיוצגת על ידי my_data.
הנתונים האלה כוללים גם פרטים אישיים מזהים (PII) וגם מידע שלא מאפשר זיהוי אישי.
שימוש בטבלה המקורית יכול לשפר את הדוחות שלכם עם תובנות נוספות, כי היא מייצגת את כל נתוני ה-1PD הרלוונטיים, בהשוואה לטבלת התאמה.
לכל טבלה בסכימה של Ads Data Hub שמכילה שדה user_id יש טבלת התאמות. לדוגמה, בטבלה adh.google_ads_impressions, מערכת Ads Data Hub יוצרת גם טבלת התאמה בשם adh.google_ads_impressions_updm שמכילה את מזהי המשתמשים שלכם.
טבלאות התאמה נפרדות נוצרות לטבלאות רשת שמבודדות לפי מדיניות. לדוגמה, בטבלה adh.google_ads_impressions_policy_isolated_network, המערכת של Ads Data Hub יוצרת גם טבלת התאמות בשם adh.google_ads_impressions_policy_isolated_network_updm שמכילה את מזהי המשתמשים שלכם.
הטבלאות האלה מכילות קבוצת משנה של המשתמשים שזמינים בטבלאות המקוריות, שבהן יש התאמה ב-user_id. לדוגמה, אם הטבלה המקורית מכילה נתונים של משתמש א' ומשתמש ב', אבל רק משתמש א' תואם, משתמש ב' לא יופיע בטבלת ההתאמה.
טבלאות ההתאמה מכילות עמודה נוספת בשם 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 Ads.
/* 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)
איחוד נתונים מאינטראקציה ישירה (First-Party) עם נתוני מודעות מ-Google Ads
השאילתה הזו מדגימה איך לאחד נתונים מאינטראקציה ישירה (First-Party) עם נתוני 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