Сопоставление данных, предоставляемых пользователем (UPDM), объединяет данные первой стороны, которые вы собрали о пользователе, например, информацию с ваших веб-сайтов, приложений или физических магазинов, с активностью того же пользователя, вошедшего в систему, во всех данных Google Ads , включая данные, принадлежащие и управляемые Google. Сюда входят данные, купленные через продукты Google Marketing Platform (GMP), например, YouTube, купленный с помощью Display & Video 360. Другие продукты GMP, которые не принадлежат и не управляются Google, не поддерживаются.
Чтобы соответствовать требованиям сопоставления данных, предоставленных пользователем, рекламное событие должно быть связано с зарегистрированным пользователем в данных рекламы Google.
В этом документе описывается функция сопоставления данных, предоставляемая пользователем, а также даются рекомендации по настройке и использованию.
Обзор вкладки «Подключения»
Получение ценных рекламных идей часто требует объединения данных из нескольких источников. Создание собственного решения этой проблемы конвейера данных требует значительных временных и инженерных вложений. Страница Connections в Ads Data Hub упрощает этот процесс, предоставляя пошаговый, управляемый интерфейс для импорта, преобразования и сопоставления ваших рекламных данных в BigQuery, чтобы вы могли использовать их в своих запросах Ads Data Hub или любом другом продукте, который считывает данные из BigQuery. Обогащение ваших запросов данными первой стороны может обеспечить более богатый опыт клиентов и более устойчиво к изменениям отслеживания рекламы в отрасли.
Страница Connections создана с помощью инструментов, которые позволяют вам шифровать и делиться персонально идентифицируемой информацией (PII) с партнерами с учетом конфиденциальности. После выбора столбцов, содержащих PII, Ads Data Hub шифрует данные, гарантируя, что ваши данные первой стороны могут быть экспортированы или прочитаны только теми, у кого есть разрешение на это. Узнать, какие данные первой стороны необходимы для вашего варианта использования измерения или активации, может быть сложно, поэтому Ads Data Hub предоставляет полный список предопределенных вариантов использования, а затем проводит вас через весь процесс извлечения, преобразования и загрузки ваших данных. Хотя можно создавать несколько типов соединений, в этом документе предполагается, что вы используете страницу Connections для сопоставления данных, предоставленных пользователем.
Поддерживаемые собственные источники данных
Вы можете импортировать данные из следующих источников данных:
- BigQuery
- Облачное хранилище
- Безопасный FTP (sFTP)
- Снежинка
- MySQL
- PostgreSQL
- Амазонка Редшифт
- Амазон S3
Поскольку сопоставление данных, предоставленных пользователем, доступно только для принадлежащих и управляемых Google ресурсов для зарегистрированных пользователей, на него не повлияет предстоящее прекращение поддержки сторонних файлов cookie . Поскольку оно более устойчиво к изменениям в отрасли, чем сторонние данные, оно может предоставить более полную информацию, что может привести к более высокому уровню вовлеченности клиентов.
Изучите терминологию
- Подключение данных, предоставляемых пользователем: настройте подключение данных, предоставляемых пользователем, для импорта и сопоставления ваших данных, планирования импорта данных, преобразования данных и сопоставления ваших рекламных данных с использованием идентификатора пользователя. Событие рекламы должно быть связано с зарегистрированным пользователем в данных рекламы 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. См. Запрос сопоставленных данных .
Узнайте о требованиях к конфиденциальности
Сбор данных о клиентах
При использовании сопоставления данных, предоставленных пользователем, вы должны загрузить данные первой стороны. Это может быть информация, собранная вами с ваших веб-сайтов, приложений, физических магазинов или любая информация, которой клиент поделился с вами напрямую.
Вы должны:
- Убедитесь, что ваша политика конфиденциальности раскрывает информацию о том, что вы передаете данные клиентов третьим лицам для оказания услуг от вашего имени, и что вы получили согласие на такой обмен, если это требуется по закону.
- Для загрузки данных клиентов используйте только одобренный Google API или интерфейс.
- Соблюдать все применимые законы и правила , включая любые саморегулирующиеся или отраслевые кодексы, которые могут применяться.
Подтверждение согласия первой стороны
Чтобы убедиться, что вы можете использовать свои данные первой стороны в Ads Data Hub, вы должны подтвердить, что получили надлежащее согласие на передачу данных от конечных пользователей ЕЭЗ в Google в соответствии с политикой согласия пользователей ЕС и политикой Ads Data Hub . Это требование применяется к каждой учетной записи Ads Data Hub и должно обновляться каждый раз, когда вы загружаете новые данные первой стороны. Любой пользователь может сделать это подтверждение от имени всей учетной записи.
Обратите внимание, что те же правила запросов служб Google, которые применяются к запросам анализа, применяются и к запросам UPDM. Например, вы не можете запускать запросы кросс-служб для пользователей в ЕЭЗ при создании таблицы соответствий.
Чтобы узнать, как подтвердить согласие в Ads Data Hub, ознакомьтесь с требованиями к согласию для Европейской экономической зоны .
Размер данных
Для защиты конфиденциальности конечного пользователя сопоставление предоставленных пользователем данных обеспечивает соблюдение следующих требований к размеру ваших данных:
- Вам необходимо загрузить не менее 1000 записей в свой список пользователей.
- Каждое успешное обновление вашей таблицы соответствия должно включать минимальное количество новых сопоставленных пользователей. Это поведение похоже на проверки различий .
- Ваш список не должен превышать максимальное количество записей. Чтобы узнать о максимальном лимите данных, обратитесь к своему представителю Google.
Настройте прием данных
Прежде чем начать, вам нужно настроить учетную запись Ads Data Hub для создания подключений к данным, что позволит вам установить конвейер сопоставления данных. Вам нужно выполнить эти шаги только один раз.
На странице «Подключения» нажмите «Начать настройку» , чтобы открыть мастер настройки учетной записи на этапе включения UPDM.
Какие разрешения предоставляются для BigQuery и Cloud Storage?
Если вы настроили UPDM для использования с BigQuery или Cloud Storage, воспользуйтесь этой ссылкой, чтобы понять разрешения, предоставляемые учетным записям службы Ads Data Hub.
BigQuery
Учетная запись службы Datafusion | |||||||||
Цель | Учетная запись службы datafusion используется для отображения списка исходных полей в пользовательском интерфейсе Ads Data Hub. | ||||||||
Формат | 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. | ||||||
Формат | 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.
- Поля ввода должны быть отформатированы как строки. Например, если вы используете хэш-функцию BigQuery SHA256 с функцией кодирования Base16 ( TO_HEX ), используйте следующее преобразование:
TO_HEX(SHA256(user_data))
. - UPDM поддерживает кодировку Base16 и Base64. Вам необходимо выровнять кодировку ваших данных первой стороны с декодированием, используемым в вашем запросе Ads Data Hub. Если вы измените кодировку данных первой стороны, вам необходимо обновить ваш запрос Ads Data Hub для декодирования из той же базы. В следующих примерах используется кодировка Base16.
ID пользователя
- Обычный текст
- Хеширование: нет
Электронная почта
- Удалить начальные и конечные пробелы
- Все символы строчные
- Включите доменное имя для всех адресов электронной почты, например gmail.com или hotmail.co.jp
- Удалите ударения — например, измените è, é, ê или ë на e
- Удалите все точки (.), предшествующие имени домена в адресах электронной почты
gmail.com
иgooglemail.com
- Хеширование: SHA256, закодированное в Base16
Действительный: TO_HEX(SHA256("jeffersonloveshiking@gmail.com"))
Неверно: TO_HEX(SHA256("JéffersonLôvesHiking@gmail.com"))
Телефон
- Убрать пробелы
- Формат в формате E.164 — например, пример для США: +14155552671, пример для Великобритании: +442071838750
- Удалите все специальные символы, кроме «+» перед кодом страны.
- Хеширование: SHA256, закодированное в Base16
Действительно: TO_HEX(SHA256("+18005550101"))
Неверно: TO_HEX(SHA256("(800) 555-0101"))
Имя
- Убрать пробелы
- Все символы строчные
- Удалите все префиксы, например, миссис, мистер, госпожа, доктор.
- Не удаляйте ударения, например, è, é, ê или ë.
- Хеширование: SHA256, закодированное в Base16
Допустимо: TO_HEX(SHA256("daní"))
Неверно: TO_HEX(SHA256("Daní"))
Фамилия
- Убрать пробелы
- Все символы строчные
- Удалите все суффиксы, например младший, старший, 2-й, 3-й, II, III, PHD, MD.
- Не удаляйте ударения, например, è, é, ê или ë.
- Хеширование: SHA256, закодированное в Base16
Действительный: TO_HEX(SHA256("delacruz"))
Неверно: TO_HEX(SHA256("de la Cruz, Jr."))
Страна
- Укажите код страны, даже если все данные ваших клиентов относятся к одной и той же стране.
- Не хешируйте данные о стране
- Используйте коды стран ISO 3166-1 alpha-2
- Хеширование: нет
Действительно: US
Недействительно: United States of America
или USA
Почтовый индекс
- Не хешируйте данные почтового индекса
- Разрешены как американские, так и международные почтовые индексы.
- Для США:
- Разрешены 5-значные коды, например, 94043.
- Также разрешены 5 цифр, за которыми следует 4-значное расширение, например, 94043-1351 или 940431351.
- Для всех остальных стран:
- Форматирование не требуется (не нужно переводить буквы в нижний регистр или удалять пробелы и специальные символы)
- Не указывайте расширения почтового индекса.
- Хеширование: нет
Проверка хэша и кодирование данных
Чтобы убедиться, что ваши данные отформатированы правильно, вы можете использовать следующие скрипты проверки хэша.
JavaScript
База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()
Base64
/**
* @fileoverview Provides the hashing algorithm, as well as some valid hashes of
* sample data for testing.
*/
async function hash(token) {
// Removes leading or trailing spaces and converts all characters to lowercase.
const formattedToken = token.trim().toLowerCase();
// Hashes the formatted string using the SHA-256 hashing algorithm.
const hashBuffer = await crypto.subtle.digest(
'SHA-256', (new TextEncoder()).encode(formattedToken));
// Converts the hash buffer to a base64-encoded string and returns it.
const base64Str = btoa(String.fromCharCode(...new Uint8Array(hashBuffer)));
return base64Str;
}
function main() {
// Expected hash for 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()
Base64
"""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")
}
Base64
/*
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");
}
}
Base64
package updm.hashing;
import static java.nio.charset.StandardCharsets.UTF_8;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
/**
* Example of the hashing algorithm.
*
* <p>Sample hashes:
*
* <ul>
* <li>Email '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`;
Base64
/*
Provides the hashing algorithm, as well as some valid hashes of sample data for testing.
The following code uses Google Standard SQL and can be run on BigQuery to generate match tables from unhashed data.
Sample hashes:
- Email '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`;
Присоединить ключи
Некоторые комбинации данных, предоставленных пользователем, сильнее других. Ниже приведен список различных комбинаций данных, предоставленных пользователем, ранжированных по относительной силе. Если вы используете адрес, вы должны включить: Имя, Фамилия, Страна и Почтовый индекс.
- Электронная почта, телефон, адрес (самый надежный)
- Телефон, адрес
- Адрес электронной почты
- Электронная почта, Телефон
- Адрес
- Телефон
- Электронная почта (самая слабая)
Создать таблицу соответствий
- Нажмите Подключения > Создать подключение > Сопоставление предоставленных пользователем данных .
- Выберите источник данных, затем нажмите « Подключить» .
- При необходимости выполните аутентификацию, затем нажмите «Далее» :
BigQuery
Нажмите «Применить», чтобы предоставить доступ к BigQuery.
Облачное хранилище
Нажмите «Применить», чтобы предоставить доступ к облачному хранилищу.
MySQL
Введите местоположение базы данных MySQL, порт, имя пользователя и пароль.
С3
Введите свой секретный ключ доступа Amazon S3.
PostgreSQL
Введите местоположение базы данных PostgreSQL, порт, имя пользователя, пароль и базу данных.
Красное смещение
Введите местоположение базы данных Redshift, порт, имя пользователя, пароль и базу данных.
sFTP
Введите местоположение вашего sFTP-сервера, имя пользователя и пароль.
Снежинка
Введите идентификатор вашей учетной записи Snowflake, имя пользователя и пароль.
- Настройте источник данных, затем нажмите «Далее» :
BigQuery
Выберите таблицу BigQuery для импорта.
Облачное хранилище
Введите путь gsutil, например
gs://my-bucket/folder/
и выберите форматирование файла.Если вы подключаете этот ресурс в первый раз, появится оповещение. Нажмите Apply, чтобы предоставить доступ, затем нажмите Next. Примечание: у вас должна быть роль с разрешением делегировать
storage.buckets.setIamPolicy
для соответствующего бакета.MySQL
Выберите базу данных MySQL и таблицу, которую вы хотите использовать.
С3
Введите URI файла, который вы хотите загрузить, относительно адреса хоста.
PostgreSQL
Введите схему PostgreSQL и имя таблицы (или представления).
Красное смещение
Введите схему Redshift и имя таблицы (или представления). По умолчанию Redshift использует URL-адреса расположения базы данных, которые следуют этому шаблону:
cluster-identifier.account-number.aws-region.redshift.amazonaws.com
.sFTP
Введите путь к файлу и его имя в формате
/ PATH / FILENAME .csv
Снежинка
Введите базу данных Snowflake, схему и таблицу (или представление), которые вы хотите использовать.
- Выберите набор данных BigQuery для использования в качестве промежуточного назначения , затем нажмите Далее . Этот шаг гарантирует, что ваши данные будут правильно отформатированы .
- Необязательно: Измените формат ваших данных. Преобразования включают вычисление хеша, форматирование нижнего/верхнего регистра и объединение/разделение полей.
- Нажмите Действие > > Преобразовать .
- В открывшейся панели нажмите Добавить преобразование или Добавить другое преобразование.
- Выберите тип преобразования из выпадающего меню и введите требования.
- Нажмите «Сохранить» .
- Выберите хотя бы один ключ соединения и сопоставьте поля, которые вы будете использовать. Ads Data Hub автоматически сопоставит поля с идентичными именами, обозначенными . Внесите необходимые изменения, затем нажмите Далее .
- Установите расписание:
- Дайте название вашему соединению.
- Установите частоту, определяющую, как часто данные будут импортироваться в набор данных, выбранный вами на предыдущем шаге. Каждый запуск будет перезаписывать данные в целевой таблице.
- Укажите, как вы хотите обрабатывать конфликты идентификаторов пользователей. Вы можете выбрать сохранение существующего соответствия или перезапись новыми данными.
- Нажмите Finish . Таблицы соответствий обычно готовы к запросам через 12 часов после их создания.
Посмотреть подробности подключения
Страница сведений о подключении дает вам информацию о последних запусках и ошибках данного подключения. Чтобы просмотреть сведения о конкретном подключении:
- Нажмите Подключения .
- Щелкните имя соединения, чтобы просмотреть его сведения.
- Теперь вы можете увидеть детали соединения и последние запуски. Каждый показывает два возможных типа ошибок: ошибки на уровне соединения (соединение не было запущено) и ошибки на уровне строк (строка не была импортирована).
- Статус «Не удалось» указывает на то, что все подключение не удалось запустить (например, проблема с разрешением учетной записи службы). Щелкните статус ошибки, чтобы увидеть, какие ошибки повлияли на подключение.
- Статус Completed указывает на то, что соединение прошло успешно. Однако все еще могут быть ошибки на уровне строк, на которые указывает ненулевое значение в столбце «Строки с ошибками». Щелкните значение, чтобы узнать больше о том, какие записи не удалось выполнить.
Изменить соединение
Следующие данные могут быть отредактированы:
- Имя соединения
- Расписание
- Таблица назначения
- Картографирование поля
Редактирование источника данных не поддерживается. Чтобы изменить источник данных, создайте новое подключение и удалите старое.
Чтобы изменить данные подключения:
- Нажмите Подключения .
- Щелкните имя соединения, которое вы хотите отредактировать.
- Отредактируйте данные, которые вы хотите изменить:
- Имя подключения: Нажмите «Изменить» , введите новое имя, затем нажмите «Ввод» .
- Расписание: Нажмите «Изменить» , установите новое расписание, затем нажмите «Сохранить» .
- Таблица назначения: нажмите «Изменить» , введите новое имя назначения, затем нажмите «Сохранить» .
- Сопоставление полей: нажмите , внесите изменения в поля, затем нажмите Сохранить .
- Нажмите .
Запрос соответствующих данных
Запрос таблиц соответствий
Когда ваши таблицы соответствий будут содержать достаточно данных для прохождения проверок конфиденциальности, вы будете готовы выполнять запросы к таблицам.
Исходная таблица для данных первой стороны (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_youtube
Ads Data Hub также генерирует таблицу соответствий adh.google_ads_impressions_policy_isolated_youtube_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 чувствительно к регистру букв, поэтому вам может потребоваться кодировать строки с обеих сторон сравнения, чтобы обеспечить их точное сравнение.
Примеры запросов
Количество соответствующих пользователей
Этот запрос подсчитывает количество соответствующих пользователей в таблице показов 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)
Объедините собственные данные и данные 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 .
,Сопоставление данных, предоставляемых пользователем (UPDM), объединяет данные первой стороны, которые вы собрали о пользователе, например, информацию с ваших веб-сайтов, приложений или физических магазинов, с активностью того же пользователя, вошедшего в систему, во всех данных Google Ads , включая данные, принадлежащие и управляемые Google. Сюда входят данные, купленные через продукты Google Marketing Platform (GMP), например, YouTube, купленный с помощью Display & Video 360. Другие продукты GMP, которые не принадлежат и не управляются Google, не поддерживаются.
Чтобы соответствовать требованиям сопоставления данных, предоставленных пользователем, рекламное событие должно быть связано с зарегистрированным пользователем в данных рекламы Google.
В этом документе описывается функция сопоставления данных, предоставляемая пользователем, а также даются рекомендации по настройке и использованию.
Обзор вкладки соединений
Получение ценных рекламных идей часто требует сшивания данных из нескольких источников. Создание собственного решения этой проблемы с трубопроводом данных требует значительных инвестиций в инвестиции и инвестиций. Страница подключений в ADS Data Hub упрощает этот процесс, предоставляя пошаговый интерфейс управляемого управляемого интерфейса для импорта, преобразования и сопоставления данных ваших рекламных объявлений в BigQuery, чтобы вы могли использовать его в запросах в центре данных рекламы или любого другого продукта, который считывается из BigQuery. Обогащение ваших запросов с помощью первых данных может обеспечить более богатый опыт клиентов и более устойчиво к общенациональным изменениям AD-отслеживания.
Страница подключений построена с инструментами, которые позволяют зашифровать и обмениваться личной информацией (PII) с партнерами в ориентированном на конфиденциальность. После выбора, какие столбцы содержат PII, ADS Data Hub шифрует данные, гарантируя, что ваши первые данные могут быть экспортированы или прочитаны только людьми, которые имеют разрешение на это. Знание того, какие первые данные необходимы для вашего измерения или варианта использования активации, может быть трудным, поэтому ADS Data Hub предоставляет полный список предопределенных вариантов использования, а затем направляет вас через весь опыт извлечения, преобразования и загрузки ваших данных. В то время как может создавать несколько типов подключений, этот документ предполагает, что вы используете страницу «Соединения» для соответствия данных, предоставленного пользователем.
Поддерживаемые первые источники данных
Вы можете импортировать данные из этих источников данных:
- BigQuery
- Облачное хранилище
- Безопасный FTP (SFTP)
- Снежинка
- MySQL
- PostgreSQL
- Амазонка Редшифт
- Амазон S3
Поскольку подготовка данных, предоставленные пользователем, доступна только в Google, принадлежащих и эксплуатируемой инвентаре для подписанных пользователей, на него не влияет предстоящая формирование сторонних файлов cookie . Поскольку он более устойчив к отраслевым изменениям, чем данные сторонних данных, он может предоставить более богатую информацию, что может привести к повышению вовлечения клиентов.
Узнайте терминологию
- Обеспечиваемое с пользователем подключение к данным: настроить предоставленное пользователем соединение данных для импорта и соответствовать вашим данным, запланировать импорт данных, преобразовать данные и сопоставить данные ваших рекламных объявлений с помощью идентификатора пользователя. Событие рекламы должно быть связано с подписанным пользователем в Google Ad Data. Требуется несколько облачных проектов Google.
- Первопартийное соединение данных: Настройка первого личного соединения для передачи данных в качестве инструмента подготовки данных, чтобы планировать импорт данных и преобразование данных без расширенных функций UPDM. Этот тип соединения требует только одного проекта Google Cloud.
- Источник данных: подключенный продукт, импортный файл или 3-сторонняя интеграция-например, BigQuery.
- Пункт назначения: вариант использования; Обычно активируется импортированные данные, где активируются импортированные данные-например, ADS Data Hub, предоставленное пользователем, сопоставление данных.
- Административный проект: Google Cloud Project, который содержит ваши запатентованные данные рекламы в своем необработанном формате.
- Выходной набор данных: набор данных BigQuery, который записывает концентратор данных. По умолчанию это набор данных в рамках вашего административного проекта. Чтобы изменить его на другой проект Google Cloud, см. Настройку учетных записей служб .
Краткое описание процесса
- Настройка приема данных и сопоставление
- Вы предоставляете необходимые разрешения на учетные записи услуг в вашем административном проекте. См. Настройка проглатывания данных .
- Партян
- Вы форматируете и загружаете свои первые данные в свой набор данных BigQuery. Для самой простой настройки используйте свой административный проект . Тем не менее, вы можете использовать любой набор данных BigQuery, который вам владеет.
- Вы инициируете запрос на сопоставление данных, создав соединение и установив график импорта.
- Google объединяет данные между вашим проектом и данными, принадлежащими Google, содержащим идентификатор пользователя Google и хэшированные данные, предоставленные пользователем, для создания и обновления таблиц соответствия.
- См .
- Постоянные запросы в центре данных ADS, на основе соответствующих данных
- Вы запускаете запросы против таблиц соответствия так же, как регулярные запросы в центре данных рекламы. См. Запрос, соответствующие данным .
Узнайте о требованиях к конфиденциальности
Сбор данных о клиентах
При использовании предоставленного пользователем данных вам необходимо загрузить первые данные. Это может быть информация, которую вы собрали с ваших веб -сайтов, приложений, физических магазинов или любой информации, которую клиент поделился с вами напрямую.
Вы должны:
- Убедитесь, что ваша политика конфиденциальности раскрывает, что вы делитесь данными клиентов с третьими лицами для выполнения услуг от вашего имени, и что вы получаете согласие на такое обмен, где юридически требуется
- Для загрузки данных клиентов используйте только одобренный Google API или интерфейс.
- Соблюдать все применимые законы и правила , включая любые саморегулирующиеся или отраслевые кодексы, которые могут применяться.
Первозависимое согласие подтверждение
Чтобы убедиться, что вы можете использовать свои первые данные в центре данных ADS, вы должны подтвердить, что вы получили надлежащее согласие на обмен данными от конечных пользователей EEA с Google в соответствии с Политикой согласия пользователя ЕС и политике ADS Data Hub . Это требование применяется к каждой учетной записи Data Hub и должно быть обновляется каждый раз, когда вы загружаете новые первые данные. Любой один пользователь может сделать это подтверждение от имени всей учетной записи.
Обратите внимание, что те же правила запроса службы Google, которые применяются к запросам анализа, также применяются к запросам UPDM. Например, вы не можете запустить запросы поперечного обслуживания на пользователях в ЕЭЗ, когда вы создаете таблицу сопоставления.
Чтобы узнать, как подтвердить согласие в центре данных рекламы, см. Требования согласия для Европейской экономической области .
Размер данных
Для защиты конфиденциальности конечного пользователя, предоставленное пользователем сопоставление данных обеспечивает соблюдение этих требований относительно размера ваших данных:
- Вы должны загрузить меньше 1000 записей в свой список пользователей.
- Каждое успешное обновление вашей таблицы соответствия должно включать минимальное количество недавно подходящих пользователей. Такое поведение похоже на проверки различий .
- Ваш список не должен превышать максимальное количество записей. Чтобы узнать о максимальном ограничении данных, обратитесь к своему представителю Google.
Настройка приема данных
Прежде чем начать, вам необходимо настроить учетную запись Hub Data Ads для создания подключений к данным, и именно так вы установите свой конвейер сопоставления данных. Вам нужно выполнить эти шаги только один раз.
На странице подключений нажмите «Настройка» , чтобы открыть мастер настройки учетной записи на этапе включения UPDM.
Какие разрешения предоставляются для BigQuery и облачного хранилища?
Если вы настраиваете UPDM для использования с BigQuery или облачным хранилищем, используйте эту ссылку, чтобы понять разрешения, предоставленные учетным записям служб ADS Data Hub.
BigQuery
Учетная запись службы данных | |||||||||
Цель | Учетная запись сервиса данных используется для отображения списка полей исходных источников в пользовательском интерфейсе ADS Data. | ||||||||
Формат | service- some-number @gcp-sa-datafusion.iam.gserviceaccount.com | ||||||||
Требуемый доступ |
| ||||||||
DataProc Service Account | |||||||||
Цель | Учетная запись службы DataProc отвечает за запуск конвейеров данных в фоновом режиме. | ||||||||
Формат | some-number -compute@developer.gserviceaccount.com | ||||||||
Требуемый доступ |
| ||||||||
Учетная запись сервиса UDDM | |||||||||
Цель | Учетная запись сервиса UDDM используется для запуска соответствующей задачи. | ||||||||
Формат | service- some-number @gcp-sa-adsdataconnector.iam.gserviceaccount.com | ||||||||
Требуемый доступ |
|
Облачное хранилище
Учетная запись службы данных | |||||||
Цель | Учетная запись сервиса данных используется для отображения списка полей исходных источников в пользовательском интерфейсе ADS Data. | ||||||
Формат | service- some-number @gcp-sa-datafusion.iam.gserviceaccount.com | ||||||
Требуемый доступ |
| ||||||
DataProc Service Account | |||||||
Цель | Учетная запись службы DataProc отвечает за запуск конвейеров данных в фоновом режиме. | ||||||
Формат | some-number -compute@developer.gserviceaccount.com | ||||||
Требуемый доступ |
| ||||||
Учетная запись сервиса UDDM | |||||||
Цель | Учетная запись сервиса UDDM используется для запуска соответствующей задачи. | ||||||
Формат | service- some-number @gcp-sa-adsdataconnector.iam.gserviceaccount.com | ||||||
Требуемый доступ |
|
Другие источники данных
Не необходимо для других источников данных
Проглатывание и сопоставление первых данных
Формат данных для ввода
Ваши данные должны придерживаться этих требований к форматированию, чтобы соответствовать правильному сопоставлению:
- Где указано в следующих описаниях поля ввода, вы должны загрузить, используя хэшинг SHA256.
- Поля ввода должны быть отформатированы как строки. Например, если вы используете хэш -функцию BigQuery SHA256 с функцией кодирования BASE16 ( TO_HEX ), используйте следующее преобразование:
TO_HEX(SHA256(user_data))
. - UPDM поддерживает кодирование Base16 и Base64. Вы должны согласовать кодирование ваших первых данных с декодированием, используемым в вашем центре данных ADS. Если вы измените кодирование первых данных, вы должны обновить запрос Hub Data Data, чтобы декодировать с той же базы. Следующие примеры используют кодирование BASE16.
ID пользователя
- Обычный текст
- ХАЗИНГ: Нет
Электронная почта
- Удалить ведущие и след
- Строчный все персонажи
- Включите доменное имя для всех адресов электронной почты, таких как gmail.com или hotmail.co.jp
- Удалить акценты - например, изменить è, é, ê или ë на E
- Удалить все периоды (.), Которые предшествуют доменному имени в
gmail.com
иgooglemail.com
Адреса электронной почты - ХАШИНГ: BASE16 Кодированный SHA256
Действительно: TO_HEX(SHA256("jeffersonloveshiking@gmail.com"))
Invalid: TO_HEX(SHA256("JéffersonLôvesHiking@gmail.com"))
Телефон
- Снимите пробел
- Формат в формате E.164 - например, пример США: +14155552671, Великобритания Пример: +442071838750
- Удалить все специальные символы, кроме «+» до кода страны
- ХАШИНГ: BASE16 Кодированный SHA256
Действительно: TO_HEX(SHA256("+18005550101"))
Invalid: TO_HEX(SHA256("(800) 555-0101"))
Имя
- Снимите пробел
- Строчный все персонажи
- Удалите все префиксы для примера миссис, мистер, миссис, доктор
- Не удаляйте акценты - например, è, é, ê или ë
- ХАШИНГ: BASE16 Кодированный SHA256
Действительно: TO_HEX(SHA256("daní"))
Invalid: TO_HEX(SHA256("Daní"))
Фамилия
- Снимите пробел
- Строчный все персонажи
- Снимите все суффиксы-пример Jr., Sr., 2-й, 3-й, II, III, PhD, MD
- Не удаляйте акценты - например, è, é, ê или ë
- ХАШИНГ: BASE16 Кодированный SHA256
Действительно: TO_HEX(SHA256("delacruz"))
Invalid: TO_HEX(SHA256("de la Cruz, Jr."))
Страна
- Включите код страны, даже если все данные ваших клиентов из одной и той же страны
- Не хлебьте данные о стране
- Использование ISO 3166-1 Альфа-2 коды страны
- ХАЗИНГ: Нет
Действительно: US
Неверно: United States of America
или USA
Почтовый индекс
- Не хлебьте данные почтового индекса
- Разрешены как США, так и международные почтовые коды
- Для нас:
- 5 -значные коды допускаются, например, 94043
- 5 цифр, за которыми следовали 4-значные расширения, также допускаются, например, 94043-1351 или 940431351
- Для всех остальных стран:
- Форматирование не требуется (нет необходимости строить или удалять пробелы и специальные символы)
- Опустите расширения почтового кода
- ХАЗИНГ: Нет
Валидация хеш и кодирование данных
Вы можете использовать следующие сценарии хэш -валидации, чтобы убедиться, что ваши данные правильно отформатированы.
JavaScript
База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()
Base64
/**
* @fileoverview Provides the hashing algorithm, as well as some valid hashes of
* sample data for testing.
*/
async function hash(token) {
// Removes leading or trailing spaces and converts all characters to lowercase.
const formattedToken = token.trim().toLowerCase();
// Hashes the formatted string using the SHA-256 hashing algorithm.
const hashBuffer = await crypto.subtle.digest(
'SHA-256', (new TextEncoder()).encode(formattedToken));
// Converts the hash buffer to a base64-encoded string and returns it.
const base64Str = btoa(String.fromCharCode(...new Uint8Array(hashBuffer)));
return base64Str;
}
function main() {
// Expected hash for 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()
Base64
"""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")
}
Base64
/*
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");
}
}
Base64
package updm.hashing;
import static java.nio.charset.StandardCharsets.UTF_8;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
/**
* Example of the hashing algorithm.
*
* <p>Sample hashes:
*
* <ul>
* <li>Email '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`;
Base64
/*
Provides the hashing algorithm, as well as some valid hashes of sample data for testing.
The following code uses Google Standard SQL and can be run on BigQuery to generate match tables from unhashed data.
Sample hashes:
- Email '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`;
Присоединяйтесь к ключам
Некоторые комбинации предоставленных пользователем данных сильнее других. Ниже приведен список различных комбинаций данных, предоставленных пользователем, ранжированными по относительной силе. Если вы используете адрес, вы должны включить: имя, фамилию, страну и почтовый индекс.
- Электронная почта, телефон, адрес (самый сильный)
- Телефон, адрес
- Адрес электронной почты
- Электронная почта, Телефон
- Адрес
- Телефон
- Электронная почта (самый слабый)
Создать таблицу соответствия
- Нажмите «Соединения»> «Соединение подключения»> «Сопоставление данных», предоставленное пользователем .
- Выберите источник данных, затем нажмите Connect .
- Аутентификация, если будет предложено, нажмите Далее :
BigQuery
Нажмите применить, чтобы предоставить доступ к BigQuery.
Облачное хранилище
Нажмите применить, чтобы предоставить доступ к облачному хранилищу.
MySQL
Введите местоположение базы данных MySQL, порт, имя пользователя и пароль.
С3
Введите свой ключ Amazon S3 Secret Access .
PostgreSQL
Введите местоположение базы данных PostgreSQL, порт, имя пользователя, пароль и база данных.
Красное смещение
Введите местоположение базы данных Redshift, порт, имя пользователя, пароль и базу данных.
sFTP
Введите местоположение сервера SFTP, имя пользователя и пароль.
Снежинка
Введите идентификатор своей учетной записи, имени пользователя и пароль.
- Настройте источник данных, затем нажмите Далее :
BigQuery
Выберите таблицу BigQuery для импорта.
Облачное хранилище
Введите путь GSUTIL, такой как
gs://my-bucket/folder/
и выберите форматирование вашего файла.Если вы впервые подключили этот ресурс, появляется предупреждение. Нажмите применить, чтобы предоставить доступ, затем нажмите Далее. Примечание. Вы должны играть роль с разрешения на делегирование
storage.buckets.setIamPolicy
для соответствующего ведра.MySQL
Выберите базу данных MySQL и таблицу, которую вы хотите использовать.
С3
Введите URI в файл, который вы хотите загрузить, по сравнению с адресом хоста.
PostgreSQL
Введите схему PostgreSQL и таблицу (или представление).
Красное смещение
Введите схему Redshift и таблицу (или представление). По умолчанию Redshift использует URL-адреса местоположения базы данных, которые следуют за этим шаблоном:
cluster-identifier.account-number.aws-region.redshift.amazonaws.com
.sFTP
Введите путь и имя файла, отформатированное как
/ PATH / FILENAME .csv
Снежинка
Введите базу данных, схемы и таблицы снежинки, схемы, которые вы хотите использовать.
- Выберите набор данных BigQuery для использования в качестве посредника , а затем нажмите «Далее» . Этот шаг гарантирует, что ваши данные правильно отформатированы .
- Необязательно: изменить формат ваших данных. Преобразования включают в себя вычислительный хэш, нижний/верхний форматирование корпуса и поля слияния/расщепления.
- Нажмите Действие > > Transform .
- На панели, которая появляется, нажмите «Добавить преобразование» или добавьте другое преобразование
- Выберите тип преобразования из раскрывающегося меню и введите требования.
- Нажмите «Сохранить» .
- Выберите хотя бы один ключ соединения и сопоставьте поля, которые вы будете использовать. ADS Data Hub будет автоматически отображать поля с одинаковыми именами, указанными . Сделайте любые необходимые изменения, затем нажмите Далее .
- Установите график:
- Назовите свое соединение.
- Установите частоту, диктуя, как часто данные будут импортироваться в набор данных, который вы выбрали на предыдущем этапе. Каждый запуск будет перезаписать данные в таблице назначения .
- Укажите, как вы хотите, чтобы столкновения идентификатора пользователя были обработаны. Вы можете выбрать между поддержанием существующего совпадения или перезапись новыми данными.
- Нажмите на отдел . Соответствующие таблицы, как правило, готовы к запросу через 12 часов после их создания.
Посмотреть подробности подключения
На странице сведений о подключении предоставлена информация о недавних запусках и ошибках данного подключения. Чтобы просмотреть детали для конкретного соединения:
- Нажмите подключения .
- Нажмите на имя подключения, чтобы просмотреть его данные.
- Теперь вы можете увидеть детали подключения и недавние пробеги. Каждый показывает два возможных типа ошибок: уровень соединения (соединение не запускалось) и ошибки на уровне строк (строка не была импортирована).
- Неудачный статус указывает на то, что все соединение не выполнило (например, проблема разрешения учетной записи службы). Нажмите на статус ошибки, чтобы увидеть, какие ошибки повлияли на соединение.
- Заполненный статус указывает, что соединение успешно выполнялось. Тем не менее, все еще могут быть ошибки на уровне строк, что связано с ненулевым значением в столбце «Строки с ошибками». Нажмите на значение, чтобы узнать больше о том, какие записи не удались.
Изменить соединение
Следующие детали могут быть отредактированы:
- Имя соединения
- Расписание
- Таблица назначения
- Картографирование поля
Редактирование источника данных не поддерживается. Чтобы изменить источник данных, создайте новое соединение и удалите старое.
Чтобы редактировать детали подключения:
- Нажмите подключения .
- Нажмите на имя подключения, которое вы хотите отредактировать.
- Отредактируйте детали, которые вы хотите изменить:
- Имя подключения: Нажмите 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_youtube
, ADS Data Hub также генерирует таблицу соответствия под названием adh.google_ads_impressions_policy_isolated_youtube_updm
, содержащий ваши идентификаторы пользователя.
Эти таблицы содержат подмножество пользователей, доступных в исходных таблицах, где есть совпадение на user_id
. Например, если исходная таблица содержит данные для пользователя A и пользователя B, но только пользователь A соответствует, тогда пользователь B не будет в таблице соответствия.
Таблицы соответствия содержат дополнительный столбец под названием customer_data_user_id
, который хранит идентификатор пользователя в качестве байтов.
Важно учитывать тип поля при написании ваших запросов. Операторы сравнения SQL ожидают, что литералы, которые вы сравниваете, имеют одинаковый тип. В зависимости от того, как user_id
хранится в вашей таблице первых данных, вам может потребоваться кодировать значения в таблице, прежде чем соответствовать данным. Вам нужно разыграть свой ключ Join в байты для успешных матчей:
JOIN ON
adh.google_ads_impressions_updm.customer_data_user_id = CAST(my_data.user_id AS BYTES)
Кроме того, сравнения строк в SQL чувствительны к капитализации, поэтому вам может потребоваться кодировать строки с обеих сторон вашего сравнения, чтобы убедиться, что их можно точно сравнить.
Примеры запросов
Count Satched пользователей
Этот запрос подсчитывает количество соответствующих пользователей в вашей таблице впечатлений от рекламы 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)
Присоединяйтесь к данным Ads 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 FAQS
Список часто задаваемых вопросов, связанных с UPDM, см. FAQ UPDM .