Сопоставление данных, предоставленных пользователями

Сопоставление данных, предоставляемых пользователем (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, см. раздел Настройка учетных записей служб .

Краткое описание процесса

  1. Настройка приема и сопоставления данных
    • Вы предоставляете необходимые разрешения учетным записям служб в вашем проекте администратора. См. Настройка приема данных .
  2. Прием и сопоставление данных первой стороны
    • Вы форматируете и загружаете свои собственные данные в свой набор данных BigQuery. Для простейшей настройки используйте свой проект администратора . Однако вы можете использовать любой набор данных BigQuery, которым владеете.
    • Вы инициируете запрос на сопоставление данных, создавая соединение и устанавливая расписание импорта.
    • Google объединяет данные вашего проекта и данные Google, содержащие идентификатор пользователя Google и хешированные данные, предоставленные пользователями, для создания и обновления таблиц соответствий.
    • См. раздел «Прием данных первой стороны»
  3. Текущие запросы в 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
Требуемый доступ
BigQuery Data Viewer
roles/bigquery.dataViewer
для определенных наборов данных в проектах «Источник данных» и «Назначение»
Storage Admin
roles/storage.admin
для проекта источника данных или выделенного хранилища
Учетная запись службы Dataproc
Цель Учетная запись службы dataproc отвечает за работу конвейеров данных в фоновом режиме.
Формат some-number -compute@developer.gserviceaccount.com
Требуемый доступ
BigQuery Data Viewer
roles/bigquery.dataViewer
для определенных наборов данных в проектах «Источник данных» и «Назначение»
BigQuery Data Editor
roles/bigquery.dataEditor
для определенных наборов данных в проекте Destination
BigQuery Job User
roles/bigquery.jobUser
для проектов «Источник данных» и «Назначение»
Storage Admin
roles/storage.admin
для проектов «Источник данных» и «Назначение» или выделенного хранилища
Учетная запись службы UPDM
Цель Для запуска задания сопоставления используется учетная запись службы UPDM.
Формат service- some-number @gcp-sa-adsdataconnector.iam.gserviceaccount.com
Требуемый доступ
BigQuery Data Viewer
roles/bigquery.dataViewer
для проекта «Пункт назначения»
BigQuery Job User
roles/bigquery.jobUser
для проекта «Пункт назначения»

Облачное хранилище

Учетная запись службы Datafusion
Цель Учетная запись службы datafusion используется для отображения списка исходных полей в пользовательском интерфейсе Ads Data Hub.
Формат service- some-number @gcp-sa-datafusion.iam.gserviceaccount.com
Требуемый доступ
Storage Object Viewer
roles/storage.objectViewer
для определенных сегментов хранения в проекте источника данных
BigQuery Data Viewer
roles/bigquery.dataViewer
для проекта источника данных или выделенного хранилища
Storage Admin
roles/storage.admin
для проекта источника данных или выделенного хранилища
Учетная запись службы Dataproc
Цель Учетная запись службы dataproc отвечает за работу конвейеров данных в фоновом режиме.
Формат some-number -compute@developer.gserviceaccount.com
Требуемый доступ
Storage Admin
roles/storage.admin
для проектов «Источник данных» и «Назначение» или выделенного хранилища
BigQuery Job User
roles/bigquery.jobUser
для проекта «Пункт назначения»
Учетная запись службы UPDM
Цель Для запуска задания сопоставления используется учетная запись службы UPDM.
Формат service- some-number @gcp-sa-adsdataconnector.iam.gserviceaccount.com
Требуемый доступ
BigQuery Data Viewer
roles/bigquery.dataViewer
для проекта «Пункт назначения»
BigQuery Job User
roles/bigquery.jobUser
для проекта «Пункт назначения»

Другие источники данных

Не требуется для других источников данных.

Прием и сопоставление собственных данных

Форматировать данные для ввода

Для корректного сопоставления ваши данные должны соответствовать следующим требованиям к форматированию:

  • Если указано в следующих описаниях полей ввода, необходимо выполнить загрузку с использованием хеширования SHA256.
  • Поля ввода должны быть отформатированы как строки. Например, если вы используете хэш-функцию 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`;

Присоединить ключи

Некоторые комбинации данных, предоставленных пользователем, сильнее других. Ниже приведен список различных комбинаций данных, предоставленных пользователем, ранжированных по относительной силе. Если вы используете адрес, вы должны включить: Имя, Фамилия, Страна и Почтовый индекс.

  1. Электронная почта, телефон, адрес (самый надежный)
  2. Телефон, адрес
  3. Адрес электронной почты
  4. Электронная почта, Телефон
  5. Адрес
  6. Телефон
  7. Электронная почта (самая слабая)

Создать таблицу соответствий

  1. Нажмите Подключения > Создать подключение > Сопоставление предоставленных пользователем данных .
  2. Выберите источник данных, затем нажмите « Подключить» .
  3. При необходимости выполните аутентификацию, затем нажмите «Далее» :

    BigQuery

    Нажмите «Применить», чтобы предоставить доступ к BigQuery.

    Облачное хранилище

    Нажмите «Применить», чтобы предоставить доступ к облачному хранилищу.

    MySQL

    Введите местоположение базы данных MySQL, порт, имя пользователя и пароль.

    С3

    Введите свой секретный ключ доступа Amazon S3.

    PostgreSQL

    Введите местоположение базы данных PostgreSQL, порт, имя пользователя, пароль и базу данных.

    Красное смещение

    Введите местоположение базы данных Redshift, порт, имя пользователя, пароль и базу данных.

    sFTP

    Введите местоположение вашего sFTP-сервера, имя пользователя и пароль.

    Снежинка

    Введите идентификатор вашей учетной записи Snowflake, имя пользователя и пароль.

  4. Настройте источник данных, затем нажмите «Далее» :

    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, схему и таблицу (или представление), которые вы хотите использовать.

  5. Выберите набор данных BigQuery для использования в качестве промежуточного назначения , затем нажмите Далее . Этот шаг гарантирует, что ваши данные будут правильно отформатированы .
  6. Необязательно: Измените формат ваших данных. Преобразования включают вычисление хеша, форматирование нижнего/верхнего регистра и объединение/разделение полей.
    1. Нажмите Действие > > Преобразовать .
    2. В открывшейся панели нажмите Добавить преобразование или Добавить другое преобразование.
    3. Выберите тип преобразования из выпадающего меню и введите требования.
    4. Нажмите «Сохранить» .
  7. Выберите хотя бы один ключ соединения и сопоставьте поля, которые вы будете использовать. Ads Data Hub автоматически сопоставит поля с идентичными именами, обозначенными . Внесите необходимые изменения, затем нажмите Далее .
  8. Установите расписание:
    1. Дайте название вашему соединению.
    2. Установите частоту, определяющую, как часто данные будут импортироваться в набор данных, выбранный вами на предыдущем шаге. Каждый запуск будет перезаписывать данные в целевой таблице.
    3. Укажите, как вы хотите обрабатывать конфликты идентификаторов пользователей. Вы можете выбрать сохранение существующего соответствия или перезапись новыми данными.
  9. Нажмите Finish . Таблицы соответствий обычно готовы к запросам через 12 часов после их создания.

Посмотреть подробности подключения

Страница сведений о подключении дает вам информацию о последних запусках и ошибках данного подключения. Чтобы просмотреть сведения о конкретном подключении:

  1. Нажмите Подключения .
  2. Щелкните имя соединения, чтобы просмотреть его сведения.
  3. Теперь вы можете увидеть детали соединения и последние запуски. Каждый показывает два возможных типа ошибок: ошибки на уровне соединения (соединение не было запущено) и ошибки на уровне строк (строка не была импортирована).
    1. Статус «Не удалось» указывает на то, что все подключение не удалось запустить (например, проблема с разрешением учетной записи службы). Щелкните статус ошибки, чтобы увидеть, какие ошибки повлияли на подключение.
    2. Статус Completed указывает на то, что соединение прошло успешно. Однако все еще могут быть ошибки на уровне строк, на которые указывает ненулевое значение в столбце «Строки с ошибками». Щелкните значение, чтобы узнать больше о том, какие записи не удалось выполнить.

Изменить соединение

Следующие данные могут быть отредактированы:

  • Имя соединения
  • Расписание
  • Таблица назначения
  • Картографирование поля

Редактирование источника данных не поддерживается. Чтобы изменить источник данных, создайте новое подключение и удалите старое.

Чтобы изменить данные подключения:

  1. Нажмите Подключения .
  2. Щелкните имя соединения, которое вы хотите отредактировать.
  3. Отредактируйте данные, которые вы хотите изменить:
    • Имя подключения: Нажмите «Изменить» , введите новое имя, затем нажмите «Ввод» .
    • Расписание: Нажмите «Изменить» , установите новое расписание, затем нажмите «Сохранить» .
    • Таблица назначения: нажмите «Изменить» , введите новое имя назначения, затем нажмите «Сохранить» .
    • Сопоставление полей: нажмите , внесите изменения в поля, затем нажмите Сохранить .
  4. Нажмите .

Запрос соответствующих данных

Запрос таблиц соответствий

Когда ваши таблицы соответствий будут содержать достаточно данных для прохождения проверок конфиденциальности, вы будете готовы выполнять запросы к таблицам.

Исходная таблица для данных первой стороны (1PD) представлена my_data . Она включает как персонально идентифицируемую информацию (PII), так и данные, не являющиеся PII. Использование исходной таблицы может улучшить ваши отчеты за счет большего количества информации, поскольку она представляет все данные 1PD в области действия по сравнению с таблицей соответствий.

Каждая таблица в схеме Ads Data Hub, содержащая поле user_id , сопровождается таблицей соответствий. Например, для таблицы adh.google_ads_impressions Ads Data Hub также генерирует таблицу соответствий adh.google_ads_impressions_updm , содержащую ваши идентификаторы пользователей. Отдельные таблицы соответствий создаются для политико-изолированных таблиц. Например, для таблицы adh.google_ads_impressions_policy_isolated_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, см. Настройку учетных записей служб .

Краткое описание процесса

  1. Настройка приема данных и сопоставление
  2. Партян
    • Вы форматируете и загружаете свои первые данные в свой набор данных BigQuery. Для самой простой настройки используйте свой административный проект . Тем не менее, вы можете использовать любой набор данных BigQuery, который вам владеет.
    • Вы инициируете запрос на сопоставление данных, создав соединение и установив график импорта.
    • Google объединяет данные между вашим проектом и данными, принадлежащими Google, содержащим идентификатор пользователя Google и хэшированные данные, предоставленные пользователем, для создания и обновления таблиц соответствия.
    • См .
  3. Постоянные запросы в центре данных 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
Требуемый доступ
BigQuery Data Viewer
roles/bigquery.dataViewer
Для конкретных наборов данных в проектах источника данных и назначения
Storage Admin
roles/storage.admin
Для проекта источника данных или специального ведра для хранения
DataProc Service Account
Цель Учетная запись службы DataProc отвечает за запуск конвейеров данных в фоновом режиме.
Формат some-number -compute@developer.gserviceaccount.com
Требуемый доступ
BigQuery Data Viewer
roles/bigquery.dataViewer
Для конкретных наборов данных в проектах источника данных и назначения
BigQuery Data Editor
roles/bigquery.dataEditor
Для конкретных наборов данных в проекте назначения
BigQuery Job User
roles/bigquery.jobUser
как для источника данных , так и для проектов назначения
Storage Admin
roles/storage.admin
как для источника данных , так и для назначения проектов, либо для специального ведра для хранения
Учетная запись сервиса UDDM
Цель Учетная запись сервиса UDDM используется для запуска соответствующей задачи.
Формат service- some-number @gcp-sa-adsdataconnector.iam.gserviceaccount.com
Требуемый доступ
BigQuery Data Viewer
roles/bigquery.dataViewer
Для проекта назначения
BigQuery Job User
roles/bigquery.jobUser
Для проекта назначения

Облачное хранилище

Учетная запись службы данных
Цель Учетная запись сервиса данных используется для отображения списка полей исходных источников в пользовательском интерфейсе ADS Data.
Формат service- some-number @gcp-sa-datafusion.iam.gserviceaccount.com
Требуемый доступ
Storage Object Viewer
roles/storage.objectViewer
Для конкретных ведра для хранения в проекте источника данных
BigQuery Data Viewer
roles/bigquery.dataViewer
Для проекта источника данных или специального ведра для хранения
Storage Admin
roles/storage.admin
Для проекта источника данных или специального ведра для хранения
DataProc Service Account
Цель Учетная запись службы DataProc отвечает за запуск конвейеров данных в фоновом режиме.
Формат some-number -compute@developer.gserviceaccount.com
Требуемый доступ
Storage Admin
roles/storage.admin
как для источника данных , так и для назначения проектов, либо для специального ведра для хранения
BigQuery Job User
roles/bigquery.jobUser
Для проекта назначения
Учетная запись сервиса UDDM
Цель Учетная запись сервиса UDDM используется для запуска соответствующей задачи.
Формат service- some-number @gcp-sa-adsdataconnector.iam.gserviceaccount.com
Требуемый доступ
BigQuery Data Viewer
roles/bigquery.dataViewer
Для проекта назначения
BigQuery Job User
roles/bigquery.jobUser
Для проекта назначения

Другие источники данных

Не необходимо для других источников данных

Проглатывание и сопоставление первых данных

Формат данных для ввода

Ваши данные должны придерживаться этих требований к форматированию, чтобы соответствовать правильному сопоставлению:

  • Где указано в следующих описаниях поля ввода, вы должны загрузить, используя хэшинг 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`;

Присоединяйтесь к ключам

Некоторые комбинации предоставленных пользователем данных сильнее других. Ниже приведен список различных комбинаций данных, предоставленных пользователем, ранжированными по относительной силе. Если вы используете адрес, вы должны включить: имя, фамилию, страну и почтовый индекс.

  1. Электронная почта, телефон, адрес (самый сильный)
  2. Телефон, адрес
  3. Адрес электронной почты
  4. Электронная почта, Телефон
  5. Адрес
  6. Телефон
  7. Электронная почта (самый слабый)

Создать таблицу соответствия

  1. Нажмите «Соединения»> «Соединение подключения»> «Сопоставление данных», предоставленное пользователем .
  2. Выберите источник данных, затем нажмите Connect .
  3. Аутентификация, если будет предложено, нажмите Далее :

    BigQuery

    Нажмите применить, чтобы предоставить доступ к BigQuery.

    Облачное хранилище

    Нажмите применить, чтобы предоставить доступ к облачному хранилищу.

    MySQL

    Введите местоположение базы данных MySQL, порт, имя пользователя и пароль.

    С3

    Введите свой ключ Amazon S3 Secret Access .

    PostgreSQL

    Введите местоположение базы данных PostgreSQL, порт, имя пользователя, пароль и база данных.

    Красное смещение

    Введите местоположение базы данных Redshift, порт, имя пользователя, пароль и базу данных.

    sFTP

    Введите местоположение сервера SFTP, имя пользователя и пароль.

    Снежинка

    Введите идентификатор своей учетной записи, имени пользователя и пароль.

  4. Настройте источник данных, затем нажмите Далее :

    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

    Снежинка

    Введите базу данных, схемы и таблицы снежинки, схемы, которые вы хотите использовать.

  5. Выберите набор данных BigQuery для использования в качестве посредника , а затем нажмите «Далее» . Этот шаг гарантирует, что ваши данные правильно отформатированы .
  6. Необязательно: изменить формат ваших данных. Преобразования включают в себя вычислительный хэш, нижний/верхний форматирование корпуса и поля слияния/расщепления.
    1. Нажмите Действие > > Transform .
    2. На панели, которая появляется, нажмите «Добавить преобразование» или добавьте другое преобразование
    3. Выберите тип преобразования из раскрывающегося меню и введите требования.
    4. Нажмите «Сохранить» .
  7. Выберите хотя бы один ключ соединения и сопоставьте поля, которые вы будете использовать. ADS Data Hub будет автоматически отображать поля с одинаковыми именами, указанными . Сделайте любые необходимые изменения, затем нажмите Далее .
  8. Установите график:
    1. Назовите свое соединение.
    2. Установите частоту, диктуя, как часто данные будут импортироваться в набор данных, который вы выбрали на предыдущем этапе. Каждый запуск будет перезаписать данные в таблице назначения .
    3. Укажите, как вы хотите, чтобы столкновения идентификатора пользователя были обработаны. Вы можете выбрать между поддержанием существующего совпадения или перезапись новыми данными.
  9. Нажмите на отдел . Соответствующие таблицы, как правило, готовы к запросу через 12 часов после их создания.

Посмотреть подробности подключения

На странице сведений о подключении предоставлена ​​информация о недавних запусках и ошибках данного подключения. Чтобы просмотреть детали для конкретного соединения:

  1. Нажмите подключения .
  2. Нажмите на имя подключения, чтобы просмотреть его данные.
  3. Теперь вы можете увидеть детали подключения и недавние пробеги. Каждый показывает два возможных типа ошибок: уровень соединения (соединение не запускалось) и ошибки на уровне строк (строка не была импортирована).
    1. Неудачный статус указывает на то, что все соединение не выполнило (например, проблема разрешения учетной записи службы). Нажмите на статус ошибки, чтобы увидеть, какие ошибки повлияли на соединение.
    2. Заполненный статус указывает, что соединение успешно выполнялось. Тем не менее, все еще могут быть ошибки на уровне строк, что связано с ненулевым значением в столбце «Строки с ошибками». Нажмите на значение, чтобы узнать больше о том, какие записи не удались.

Изменить соединение

Следующие детали могут быть отредактированы:

  • Имя соединения
  • Расписание
  • Таблица назначения
  • Картографирование поля

Редактирование источника данных не поддерживается. Чтобы изменить источник данных, создайте новое соединение и удалите старое.

Чтобы редактировать детали подключения:

  1. Нажмите подключения .
  2. Нажмите на имя подключения, которое вы хотите отредактировать.
  3. Отредактируйте детали, которые вы хотите изменить:
    • Имя подключения: Нажмите Edit , введите новое имя, затем нажмите Enter .
    • Расписание: нажмите «Редактировать» , установите новое расписание, затем нажмите «Сохранить» .
    • Таблица назначения: нажмите «Редактировать» , введите новое имя назначения, затем нажмите «Сохранить» .
    • Картирование поля: нажмите , внесите изменения в поля, затем нажмите «Сохранить» .
  4. Нажмите .

Запрос соответствовал данным

Запросить таблицы матчей

Когда ваши таблицы соответствия содержат достаточно данных для удовлетворения проверки конфиденциальности, вы готовы запустить запросы против таблиц.

Оригинальная таблица для первых данных (1PD) представлена my_data . Это включает в себя как личную информацию (PII), так и не PII. Использование исходной таблицы может улучшить ваши отчеты с большим количеством понимания, так как она представляет все данные 1PD в объеме по сравнению с таблицей соответствия.

Каждая таблица в схеме ADS Data Hub, содержащей поле user_id , сопровождается таблицей соответствия. Например, для таблицы adh.google_ads_impressions ADS DATA HUB также генерирует таблицу соответствия под названием adh.google_ads_impressions_updm , содержащий ваши идентификаторы пользователя. Отдельные таблицы соответствия создаются для политических таблиц. Например, для таблицы adh.google_ads_impressions_policy_isolated_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 .