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

Сопоставление данных, предоставленных пользователем (UPDM), объединяет собственные данные, которые вы собрали о пользователе (например, информацию с ваших веб-сайтов, приложений или физических магазинов), с действиями того же пользователя, входящих в систему, по всем рекламным данным Google , включая данные, принадлежащие и управляемые Google. Сюда входят данные, приобретенные с помощью продуктов Google Платформа для маркетинга (GMP), например YouTube, приобретенные с помощью Display & Video 360. Другие продукты GMP, которые не принадлежат и не управляются Google, не поддерживаются.

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

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

Обзор

Для получения ценной информации о рекламе часто требуется объединить данные из нескольких источников. Создание собственного решения этой проблемы с конвейером данных требует значительных затрат времени и инженерных инвестиций. Страница «Соединения» в Ads Data Hub упрощает этот процесс, предоставляя пошаговый управляемый интерфейс для импорта, преобразования и сопоставления данных с BigQuery, чтобы вы могли использовать их в своих запросах Ads Data Hub или любом другом продукте, считывающем данные из BigQuery. Обогащение ваших запросов собственными данными может улучшить качество обслуживания клиентов и повысить устойчивость к общеотраслевым изменениям в отслеживании рекламы.

Страница «Соединения» создана с помощью инструментов, которые позволяют вам шифровать и передавать личную информацию (PII) партнерам с соблюдением конфиденциальности. После выбора столбцов, содержащих персональные данные, Ads Data Hub шифрует данные, гарантируя, что ваши собственные данные могут быть экспортированы или прочитаны только людьми, имеющими на это разрешение. Определить, какие собственные данные необходимы для вашего варианта использования для измерения или активации, может быть сложно, поэтому Ads Data Hub предоставляет полный список предопределенных вариантов использования, а затем проведет вас через весь процесс извлечения, преобразования и загрузки ваших данных. Хотя можно создавать несколько типов соединений, в этом документе предполагается, что вы используете страницу «Соединения» для сопоставления предоставленных пользователем данных.

Поддерживаемые собственные источники данных

Вы можете импортировать данные из этих источников данных:

  • Большой запрос
  • Облачное хранилище
  • Безопасный 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.

Большой запрос

Учетная запись службы 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
Цель Учетная запись службы объединения данных используется для отображения списка исходных полей в пользовательском интерфейсе 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.
  • Поля ввода должны быть отформатированы как строки. Например, если вы используете хеш-функцию SHA256 BigQuery с функцией кодирования 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.
  • Хеширование: 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"))

Имя

  • Удалить пробелы
  • Все символы в нижнем регистре
  • Удалите все префиксы, например Mrs.
  • Не удаляйте акценты, например è, é, ê или ë.
  • Хеширование: SHA256 в кодировке Base16.

Допустимо: TO_HEX(SHA256("daní"))

Неверно: TO_HEX(SHA256("Daní"))

Фамилия

  • Удалить пробелы
  • Все символы в нижнем регистре
  • Удалите все префиксы, например Jr.
  • Не удаляйте акценты, например è, é, ê или ë.
  • Хеширование: SHA256 в кодировке Base16.

Допустимо: TO_HEX(SHA256("delacruz"))

Неверно: TO_HEX(SHA256("de la Cruz, Jr."))

Страна

  • Укажите код страны, даже если все ваши данные о клиентах относятся к одной и той же стране.
  • Не хэшируйте данные о стране
  • Используйте коды стран ISO 3166-1 альфа-2.
  • Хеширование: нет

Действительно: US

Недействительно: United States of America или USA

Почтовый индекс

  • Не хешировать данные почтового индекса
  • Разрешены почтовые индексы как США, так и международные почтовые индексы.
  • Для США:
    • Допускаются пятизначные коды, например 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) {
  const formattedToken = token.trim().toLowerCase();
  const hashArrayBuffer = await crypto.subtle.digest(
      'SHA-256', (new TextEncoder()).encode(formattedToken));
  return Array.from(new Uint8Array(hashArrayBuffer))
      .map((b) => b.toString(16).padStart(2, '0'))
      .join('');
}

function main() {
  // Expected hash for test@gmail.com:
  // 87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674
  hash('test@gmail.com').then(result => console.log(result));

  // Expected hash for +18005551212:
  // 61d9111bed3e6d9cfc1bc3b5cb35a402687c4f1546bee061a2bd444fbdd64c44
  hash('+18005551212').then(result => console.log(result));

  // Expected hash for John:
  // 96d9632f363564cc3032521409cf22a852f2032eec099ed5967c0d000cec607a
  hash('John').then(result => console.log(result));

  // Expected hash for Doe:
  // 799ef92a11af918e3fb741df42934f3b568ed2d93ac1df74f1b8d41a27932a6f
  hash('Doe').then(result => console.log(result));
}

main()

База64

/**
 * @fileoverview Provides the hashing algorithm, as well as some valid hashes of
 * sample data for testing.
*/

async function hash(token) {
  const formattedToken = token.trim().toLowerCase();
  const hashBuffer = await crypto.subtle.digest(
      'SHA-256', (new TextEncoder()).encode(formattedToken));
  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):
  return hashlib.sha256(token.strip().lower().encode('utf-8')).hexdigest()

def print_updm_hash(token):
  print('Hash: "{}"\t(Token: {})'.format(updm_hash(token), token))

def main():
  print_updm_hash('test@gmail.com')
  print_updm_hash('+18005551212')
  print_updm_hash('John')
  print_updm_hash('Doe')

if __name__ == '__main__':
  main()

База64

"""Provides the hashing algorithm, as well as some valid hashes of sample data for testing.

Supports: Python 2, Python 3

Sample hashes:

  - Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
  - Phone '+18005551212':   YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
  - First name 'John':      ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
  - Last name 'Doe':        eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
"""

import base64
import hashlib

def hash(token):
  return base64.b64encode(
      hashlib.sha256(
          token.strip().lower().encode('utf-8')).digest()).decode('utf-8')

def print_hash(token, expected=None):
  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():
  print_hash(
      'test@gmail.com', expected='h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=')
  print_hash(
      '+18005551212', expected='YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=')
  print_hash('John', expected='ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=')
  print_hash('Doe', expected='eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=')

if __name__ == '__main__':
  main()

Идти

База16

/*
Provides the hashing algorithm, as well as some valid hashes of sample data for testing.

Sample hashes:

  - Email 'test@gmail.com': 87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674
  - Phone '+18005551212':   61d9111bed3e6d9cfc1bc3b5cb35a402687c4f1546bee061a2bd444fbdd64c44
  - First name 'John':      96d9632f363564cc3032521409cf22a852f2032eec099ed5967c0d000cec607a
  - Last name 'Doe':        799ef92a11af918e3fb741df42934f3b568ed2d93ac1df74f1b8d41a27932a6f
*/
package main

import (
  "crypto/sha256"
  "fmt"
  "strings"
)

// Hash hashes an email, phone, first name, or last name into the correct format.
func Hash(token string) string {
  formatted := strings.TrimSpace(strings.ToLower(token))
  hashed := sha256.Sum256([]byte(formatted))
  encoded := fmt.Sprintf("%x", hashed[:])
  return encoded
}

// PrintHash prints the hash for a token.
func PrintHash(token string) {
  fmt.Printf("Hash: \"%s\"\t(Token: %s)\n", Hash(token), token)

}

func main() {
  PrintHash("test@gmail.com")
  PrintHash("+18005551212")
  PrintHash("John")
  PrintHash("Doe")
}

База64

/*
Provides the hashing algorithm, as well as some valid hashes of sample data for testing.

Sample hashes:

  - Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
  - Phone '+18005551212':   YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
  - First name 'John':      ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
  - Last name 'Doe':        eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
*/
package main

import (
  "crypto/sha256"
  "encoding/base64"
  "fmt"
  "strings"
)

// Hash hashes an email, phone, first name, or last name into the correct format.
func Hash(token string) string {
  formatted := strings.TrimSpace(strings.ToLower(token))
  hashed := sha256.Sum256([]byte(formatted))
  encoded := base64.StdEncoding.EncodeToString(hashed[:])
  return encoded
}

// PrintHash prints the hash for a token.
func PrintHash(token string) {
  fmt.Printf("Hash: \"%s\"\t(Token: %s)\n", Hash(token), token)

}

func main() {
  PrintHash("test@gmail.com")
  PrintHash("+18005551212")
  PrintHash("John")
  PrintHash("Doe")
}

Ява

База16

package updm.hashing;

import static java.nio.charset.StandardCharsets.UTF_8;

import com.google.common.base.Ascii;
import com.google.common.hash.Hashing;

/**
 * Example of the UPDM hashing algorithm using hex-encoded SHA-256.
*
* <p>This uses the Guava Hashing to generate the hash: https://github.com/google/guava
*
* <p>Sample valid hashes:
*
* <ul>
*   <li>Email "test@gmail.com": "87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674"
*   <li>Phone "+18005551212": "61d9111bed3e6d9cfc1bc3b5cb35a402687c4f1546bee061a2bd444fbdd64c44"
*   <li>First name "John": "96d9632f363564cc3032521409cf22a852f2032eec099ed5967c0d000cec607a"
*   <li>Last name "Doe": "799ef92a11af918e3fb741df42934f3b568ed2d93ac1df74f1b8d41a27932a6f"
* </ul>
*/
public final class HashExample {

  private HashExample() {}

  public static String hash(String token) {
    String formattedToken = Ascii.toLowerCase(token).strip();
    return Hashing.sha256().hashString(formattedToken, UTF_8).toString();
  }

  public static void printHash(String token) {
    System.out.printf("Hash: \"%s\"\t(Token: %s)\n", hash(token), token);
  }

  public static void main(String[] args) {
    printHash("test@gmail.com");
    printHash("+18005551212");
    printHash("John");
    printHash("Doe");
  }
}

База64

package updm.hashing;

import static java.nio.charset.StandardCharsets.UTF_8;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

/**
* Example of the hashing algorithm.
*
* <p>Sample hashes:
*
* <ul>
*   <li>Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
*   <li>Phone '+18005551212': YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
*   <li>First name 'John': ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
*   <li>Last name 'Doe': eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=
* </ul>
*/
public final class HashExample {

private HashExample() {}

public static String hash(String token) {
  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) {
  System.out.printf("Hash: \"%s\"\t(Token: %s)\n", hash(token), token);
}

public static void main(String[] args) {
  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
*/

CREATE TABLE `your_project_name.your_dataset_name.output_hashed_table_name`
AS
SELECT
  UserID,
  TO_HEX(SHA256(LOWER(Email))) AS Email,
  TO_HEX(SHA256(Phone)) AS Phone,
  TO_HEX(SHA256(LOWER(FirstName))) AS FirstName,
  TO_HEX(SHA256(LOWER(LastName))) AS LastName,
  PostalCode,
  CountryCode,
FROM
  `your_project_name.your_dataset_name.input_unhashed_table_name`;

База64

/*
Provides the hashing algorithm, as well as some valid hashes of sample data for testing.

The following code uses Google Standard SQL and can be run on BigQuery to generate match tables from unhashed data.

Sample hashes:

  - Email 'test@gmail.com': h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=
  - Phone '+18005551212':   YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
  - First name 'John':      ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=
  - Last name 'Doe':        eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=

The unhashed input table schema is assumed to be:

- Column name: UserID, Type: String
- Column name: Email, Type: String
- Column name: Phone, Type: String
- Column name: FirstName, Type: String
- Column name: LastName, Type: String
- Column name: PostalCode, Type: String
- Column name: CountryCode, Type: String
*/

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.

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

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

    MySQL

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

    S3

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

    PostgreSQL

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

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

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

    sFTP

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

    Снежинка

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

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

    Большой запрос

    Выберите таблицу BigQuery для импорта.

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

    Введите путь gsutil, например gs://my-bucket/folder/ и выберите форматирование файла.

    Если вы впервые подключаете этот ресурс, появится предупреждение. Нажмите «Применить», чтобы предоставить доступ, затем нажмите «Далее». Примечание. У вас должна быть роль с разрешением делегировать storage.buckets.setIamPolicy для соответствующего сегмента.

    MySQL

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

    S3

    Введите 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. Нажмите «Готово» . Таблицы соответствий обычно готовы к запросу через 12 часов после их создания.

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

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

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

Редактировать соединение

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

  • Имя соединения
  • Расписание
  • Таблица назначения
  • Сопоставление полей

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

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

  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 , в котором хранится идентификатор пользователя в формате BYTES.

При написании запросов важно учитывать тип поля. Операторы сравнения SQL ожидают, что сравниваемые литералы будут одного и того же типа. В зависимости от того, как user_id хранится в вашей таблице собственных данных, вам может потребоваться закодировать значения в таблице перед сопоставлением данных. Для успешного сопоставления вам необходимо преобразовать ключ соединения в BYTES:

JOIN ON
  adh.google_ads_impressions_updm.customer_data_user_id = CAST(my_data.user_id AS BYTES)

Кроме того, сравнения строк в SQL чувствительны к использованию заглавных букв, поэтому вам может потребоваться закодировать строки с обеих сторон сравнения, чтобы обеспечить их точное сравнение.

Примеры запросов

Подсчет подходящих пользователей

Этот запрос подсчитывает количество соответствующих пользователей в вашей таблице показов Google Рекламы.

/* Count matched users in Google Ads impressions table */

SELECT COUNT(DISTINCT user_id)
FROM adh.google_ads_impressions_updm

Этот запрос показывает, как объединить собственные данные с данными Google Рекламы:

/* 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 .