התכונה 'התאמה לפרטים שהמשתמשים סיפקו' (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) לשאילתות יכולה לשפר את חוויית הלקוחות, והיא עמידה יותר לשינויים בתחום מעקב המודעות.
התאמה לפרטים שהמשתמשים סיפקו (UPDM) זמינה רק במלאי שטחי פרסום שנמצא בבעלות ובהפעלה של Google, עבור משתמשים מחוברים, ולכן היא לא מושפעת מהוצאה משימוש בעתיד של קובצי Cookie של צד שלישי. התכונה עמידה יותר לשינויים בתחום בהשוואה לנתונים מצד שלישי, ולכן היא יכולה לספק תובנות מקיפות יותר, שיכולות להוביל למעורבות גבוהה יותר מצד הלקוחות.
סיכום התהליך
- הגדרה של הטמעת נתונים והתאמה שלהם
- מוודאים שהנתונים מאינטראקציה ישירה (First-Party) נמצאים ב-BigQuery ושלחשבון השירות יש גישת קריאה אליהם. מידע נוסף זמין במאמר בנושא הגדרת הטמעת נתונים.
- הטמעה והתאמה של נתונים מאינטראקציה ישירה (First-Party)
- אתם מעצבים ומעלים את הנתונים מאינטראקציה ישירה למערך הנתונים ב-BigQuery.
- אתם יוצרים שאילתת ניתוח של התאמה בענן פרטי ומגדירים לוח זמנים כדי ליזום בקשה להתאמת נתונים.
- Google מצטרפת לנתונים בין הפרויקט שלכם לבין נתונים בבעלות Google שכוללים את מזהה המשתמש של Google ונתונים מגובבים שהמשתמשים סיפקו, כדי ליצור ולעדכן טבלאות התאמה.
- איך מעבירים נתונים מאינטראקציה ישירה
- שאילתות שמתבצעות באופן שוטף ב-Ads Data Hub, על סמך נתונים שתואמים
- אתם מריצים שאילתות על טבלאות ההתאמות באותו אופן שבו מריצים שאילתות רגילות ב-Ads Data Hub. איך שולפים נתונים תואמים
מידע על דרישות הפרטיות
איסוף נתוני לקוחות
כשמשתמשים בהתאמה לנתונים שהמשתמשים סיפקו, צריך להעלות נתונים מאינטראקציה ישירה (First-Party). למשל: מידע שאספתם מהאתרים, מהאפליקציות או מהחנויות הפיזיות שלכם, או מידע שהלקוחות שיתפו איתכם ישירות במצבים אחרים.
פעולות שצריך לבצע:
- לוודא שמדיניות הפרטיות שלכם כוללת גילוי נאות על כך שאתם משתפים את נתוני הלקוחות עם צדדים שלישיים כדי שיספקו שירותים מטעמכם, ולבקש את הסכמת הלקוחות לשיתופים האלה כנדרש על פי חוק
- להשתמש רק בממשק או ב-API שאושרו על ידי Google כדי להעלות נתוני לקוחות
- לפעול בהתאם לכל התקנות והחוקים החלים, כולל כללים לרגולציה עצמית או כללים הנהוגים בתחום, אם חלים כאלו
אישור הסכמה מאינטראקציה ישירה
כדי לוודא שתוכלו להשתמש בנתונים מאינטראקציה ישירה (First-Party) ב-Ads Data Hub, אתם צריכים לאשר שקיבלתם הסכמה מתאימה לשיתוף נתונים ממשתמשי קצה באזור הכלכלי האירופי (EEA) עם Google בהתאם למדיניות Google בנושא הסכמת משתמשים באיחוד האירופי ולמדיניות של Ads Data Hub. הדרישה הזו חלה על כל חשבון ב-Ads Data Hub, וצריך לעדכן את ההסכמה בכל פעם שמעלים נתונים חדשים מאינטראקציה ישירה. כל משתמש יכול לאשר את ההסכמה הזו בשם כל החשבון.
שימו לב שכללי השאילתות של שירות Google שחלים על שאילתות ניתוח חלים גם על שאילתות של UPDM. לדוגמה, אי אפשר להריץ שאילתות בין שירותים על משתמשים באזור הכלכלי האירופי כשיוצרים טבלת התאמה.
במאמר דרישות לקבלת הסכמה באזור הכלכלי האירופי מוסבר איך לציין את הסכמת המשתמשים ב-Ads Data Hub.
גודל הנתונים
כדי להגן על פרטיות משתמשי הקצה, התאמה של פרטים שהמשתמשים סיפקו מחייבת אתכם לעמוד בדרישות הבאות לגבי גודל הנתונים:
- צריך להעלות לפחות 1,000 רשומות לרשימת המשתמשים.
הגדרה של העברת נתונים
לפני שמתחילים, חשוב לוודא את הפרטים הבאים:
- הנתונים שלכם ממקור ראשון צריכים להיות ב-BigQuery. אם יש לכם היקף VPC-SC, הנתונים מאינטראקציה ישירה (First-Party) צריכים להיות ממוקמים בתוך ה-VPC-SC.
- לחשבון השירות שלכם ב-Ads Data Hub צריכה להיות גישת קריאה לנתונים מאינטראקציה ישירה (First-Party).
- הנתונים מאינטראקציה ישירה צריכים להיות בפורמט הנכון ולעבור גיבוב (hashing) בצורה תקינה. פרטים נוספים מופיעים בקטע הבא.
מעבר לכך, אין צורך בהטמעה נוספת של התכונה 'התאמה בענן פרטי'. אם אתם יכולים להריץ שאילתת ניתוח, אתם יכולים להריץ שאילתת התאמה בענן פרטי.
הטמעה והתאמה של נתונים מאינטראקציה ישירה (First-Party)
עיצוב נתונים לקלט
כדי שהנתונים יותאמו בצורה נכונה, הם צריכים לעמוד בדרישות הפורמט הבאות:
- במקומות שבהם מצוין בתיאורים של שדות הקלט הבאים, צריך להעלות באמצעות גיבוב SHA256.
- שדות הקלט צריכים להיות בפורמט של מחרוזות. לדוגמה, אם אתם משתמשים בפונקציית הגיבוב SHA256 של BigQuery עם פונקציית הקידוד Base64 (TO_BASE64), אתם צריכים להשתמש בטרנספורמציה הבאה:
TO_BASE64(SHA256(user_data))
. - UPDM תומך בקידוד Base64. צריך להתאים את הקידוד של הנתונים מאינטראקציה ישירה (First-Party) לקידוד שמשמש בשאילתה שלכם ב-Ads Data Hub. אם משנים את הקידוד של נתוני הצד הראשון, צריך לעדכן את השאילתה ב-Ads Data Hub כדי לבצע פענוח מאותו בסיס. בדוגמאות הבאות נעשה שימוש בקידוד Base64.
מזהה המשתמש
- טקסט רגיל
- גיבוב (hashing): ללא
אימייל
- הסרת רווחים לבנים בתחילת הטקסט ובסופו
- יש להשתמש באותיות קטנות בלבד
- כל כתובות האימייל צריכות לכלול שמות דומיינים, כמו gmail.com או hotmail.co.jp
- הסרת סימנים דיאקריטיים – לדוגמה, שינוי של è, é, ê או ë ל-e
- מסירים את כל הנקודות (.) שלפני שם הדומיין בכתובות אימייל עם הסיומות
gmail.com
ו-googlemail.com
. - גיבוב: SHA256 בקידוד Base64
בתוקף: TO_BASE64(SHA256("jeffersonloveshiking@gmail.com"))
לא תקין: TO_BASE64(SHA256(" Jéfferson.Lôves.Hiking@gmail.com "))
טלפון
- הסרת רווחים לבנים
- הפורמט צריך להיות E.164 – דוגמה בארה"ב: +14155552671, דוגמה בבריטניה: +442071838750
- מסירים את כל התווים המיוחדים חוץ מהסימן '+' לפני קידומת המדינה
- גיבוב: SHA256 בקידוד Base64
בתוקף: TO_BASE64(SHA256("+18005550101"))
לא תקין: TO_BASE64(SHA256("(800) 555-0101"))
שם פרטי
- הסרת רווחים לבנים
- יש להשתמש באותיות קטנות בלבד
- מסירים את כל התחיליות – למשל, Mrs., מר, גב', ד"ר
- אל תסירו סימנים דיאקריטיים – לדוגמה, è, é, ê או ë
- גיבוב: SHA256 בקידוד Base64
בתוקף: TO_BASE64(SHA256("daní"))
לא תקין: TO_BASE64(SHA256("Mrs. Daní"))
שם משפחה
- הסרת רווחים לבנים
- יש להשתמש באותיות קטנות בלבד
- הסרת כל הסיומות – למשל Jr., Sr., 2nd, 3rd, II, III, PHD, MD
- אל תסירו סימנים דיאקריטיים – לדוגמה, è, é, ê או ë
- גיבוב: SHA256 בקידוד Base64
בתוקף: TO_BASE64(SHA256("délacruz"))
לא תקין: TO_BASE64(SHA256("dé la Cruz, Jr."))
מדינה
- צריך לכלול את קוד המדינה גם אם כל נתוני הלקוחות הם מאותה מדינה.
- אין לבצע גיבוב (hash) של נתוני המדינה
- צריך להשתמש בקודי מדינה בפורמט ISO 3166-1 alpha-2
- גיבוב (hashing): ללא
בתוקף: US
לא תקין: United States of America
או USA
מיקוד
- אין לבצע גיבוב של נתוני המיקוד
- אפשר להזין מיקוד של ארה"ב וגם של מדינות אחרות
- בארה"ב:
- מותר להזין מיקוד בן 5 ספרות – לדוגמה, 94043
- מותר גם להזין מיקוד בן 5 ספרות עם תוספת של 4 ספרות – לדוגמה, 94043-1351 או 940431351
- בכל שאר המדינות:
- אין צורך בפורמט (אין צורך להשתמש באותיות קטנות או להסיר רווחים ותווים מיוחדים)
- אין לכלול תוספות למיקוד
- גיבוב (hashing): ללא
אימות גיבוב וקידוד נתונים
אפשר להשתמש בסקריפטים הבאים לאימות גיבוב כדי לוודא שהפורמט של הנתונים נכון.
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`;
מפתחות הצטרפות
יש שילובים של פרטים שהמשתמשים סיפקו שהם חזקים יותר מאחרים. בהמשך מופיעה רשימה של שילובים שונים של פרטים שהמשתמשים סיפקו, מדורגים לפי חוזק יחסי. אם אתם משתמשים בכתובת, אתם צריכים לכלול: שם פרטי, שם משפחה, מדינה ומיקוד.
- אימייל, טלפון, כתובת (הכי חזק)
- טלפון, כתובת
- אימייל, כתובת
- אימייל, טלפון
- כתובת
- טלפון
- אימייל (הכי חלש)
יצירת טבלת התאמות
לוחצים על דוחות > יצירת דוח > יצירת טבלת התאמה בענן פרטי > שימוש בתבנית. אופציונלי: אפשר לבחור באפשרות יצירת טבלת התאמה בענן פרטי עם גיבוב אם הנתונים שלכם עדיין לא עברו גיבוב.
// 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` );
כדי לספק כינוי מתאים, מחליפים את שמות הפרמטרים בשמות העמודות.
לוחצים על הגדרת לוח זמנים כדי להגדיר את התדירות שבה רוצים לרענן את טבלת ההתאמה. כל הפעלה תחליף את טבלת ההתאמות הנוכחית.
נתונים שתואמים לשאילתה
הרצת שאילתות על טבלאות של התאמות
אם טבלאות ההתאמה מכילות מספיק נתונים כדי לעבור את בדיקות הפרטיות, אפשר להריץ שאילתות על הטבלאות.
הטבלה המקורית של נתונים מאינטראקציה ישירה (1PD) מיוצגת על ידי my_data
.
הנתונים כוללים גם פרטים אישיים מזהים (PII) וגם נתונים שאינם פרטים אישיים מזהים.
שימוש בטבלה המקורית יכול לשפר את הדוחות שלכם ולספק תובנות נוספות, כי היא מייצגת את כל נתוני הצד הראשון שכלולים בהיקף, בהשוואה לטבלת התאמה.
לכל טבלה בסכימה של 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
שאלות נפוצות בנושא UPDM
רשימת שאלות נפוצות בנושא UPDM זמינה במאמר שאלות נפוצות בנושא UPDM.