比對使用者提供的資料

「比對使用者提供的資料」功能會彙整您收集的使用者第一方資料 (例如來自網站、應用程式或實體商店的資訊),以及該使用者在所有 Google 廣告資料 (包括 Google 擁有和營運的資料) 中的登入活動記錄。這包括透過 Google Marketing Platform (GMP) 產品購買的資料,例如使用 Display & Video 360 購買的 YouTube 廣告空間。不支援其他非 Google 擁有和營運的 GMP 產品。

廣告事件必須連結到 Google 廣告資料中的登入使用者,才能比對使用者提供的資料。

本文將說明「比對使用者提供的資料」功能,並提供設定和使用指南。

「連線」分頁總覽

如要取得有價值的廣告洞察資料,通常需要整合多個來源的資料。如要自行建構解決方案來處理這項資料管道問題,需要投入大量時間和工程資源。廣告資料中心的「連結」頁面提供逐步引導介面,可簡化這項程序,協助您在 BigQuery 中匯入、轉換及比對廣告資料,以便在廣告資料中心查詢或任何其他從 BigQuery 讀取資料的產品中使用。使用第一方資料讓查詢內容更豐富,不僅可帶來更豐富的客戶體驗,也更能因應整個產業的廣告追蹤變化。

「連結」頁面內建多項工具,可讓您以隱私權為中心的方式,加密及與合作夥伴分享個人識別資訊 (PII)。選取含有 PII 的資料欄後,廣告資料中心會加密資料,確保只有具備權限的使用者才能匯出或讀取第一方資料。要判斷評估或啟用用途需要哪些第一方資料,可能並不容易,因此廣告資料中心提供完整的預先定義用途清單,並引導您完成擷取、轉換及載入資料的整個過程。雖然您可以建立多種類型的連結,但本文假設您是使用「連結」頁面比對使用者提供的資料。

支援的第一方資料來源

您可以從下列資料來源匯入資料:

  • BigQuery
  • Cloud Storage
  • 安全檔案傳輸通訊協定 (sFTP)
  • Snowflake
  • MySQL
  • PostgreSQL
  • Amazon Redshift
  • Amazon S3

「比對使用者提供的資料」功能只會比對 Google 自有自營廣告空間的登入使用者,因此不會受到第三方 Cookie 淘汰的影響。比第三方資料更能適應業界變遷,因此可提供更豐富的洞察資料,進而提高顧客參與度。

認識術語

  • 使用者提供的資料連結:設定使用者提供的資料連結,即可匯入及比對資料、排定資料匯入作業、轉換資料,以及使用使用者 ID 比對廣告資料。廣告事件必須連結到 Google 廣告資料中的登入使用者。需要多個 Google Cloud 專案。
  • 第一方資料連結:設定第一方資料連結做為資料準備工具,排定資料匯入作業並轉換資料,不需使用 UPDM 的進階功能。這類連線只需要一個 Google Cloud 專案。
  • 資料來源:連結產品、匯入的檔案或第三方整合服務,例如 BigQuery。
  • 目的地:用途;通常是指 Google 產品或產品功能 (已啟用匯入的資料),例如廣告資料中心比對使用者提供的資料。
  • 管理員專案:包含原始格式專屬廣告資料的 Google Cloud 專案。
  • 輸出資料集:廣告資料中心寫入的 BigQuery 資料集。根據預設,這是管理員專案下的資料集。如要變更為其他 Google Cloud 專案,請參閱 「設定服務帳戶」。

程序摘要

  1. 設定資料擷取和比對
    • 您:確認第一方資料位於 BigQuery,且服務帳戶具備讀取權限。請參閱「設定資料擷取」。
  2. 第一方資料擷取和比對
    • 您設定第一方資料的格式,並上傳至 BigQuery 資料集。 如要簡化設定程序,請使用管理員專案。不過,您可以使用自己擁有的任何 BigQuery 資料集。
    • 您可以建立連結 並設定排程,啟動資料比對要求。
    • Google 會彙整您專案中的資料和 Google 自有資料 (包含 Google 的使用者 ID 和經雜湊處理的使用者提供資料),建立及更新比對表。
    • 請參閱「擷取第一方資料」
  3. 在廣告資料中心根據比對資料持續查詢
    • 您可以對對照表執行查詢,方法與在廣告資料中心執行一般查詢相同。請參閱「查詢比對資料」。

瞭解隱私權規定

收集顧客數位資料

使用「比對使用者提供的資料」功能時,您必須上傳第一方資料。這可能是您從網站、應用程式、實體商店收集的資訊,或顧客直接提供給您的任何資訊。

須遵循的規定如下:

  • 確實在隱私權政策中聲明您會與第三方共用客戶資料,以便第三方代為提供服務,且您按照法律要求向使用者徵求共用資訊的同意聲明
  • 僅使用 Google 核准的 API 或介面上傳顧客數位資料
  • 遵守所有適用法律和法規,包括任何適用的自我規範或業界準則

確認已取得第一方同意聲明

為確保能在廣告資料中心使用第一方資料,請務必確認您已根據歐盟地區使用者同意授權政策和廣告資料中心政策,取得適當的同意聲明,能與 Google 分享歐洲經濟區使用者的資料。這項規定適用於每個廣告資料中心帳戶,且您每次上傳新的第一方資料時,都必須更新同意聲明。任一使用者都可代表整個帳戶確認已取得同意聲明。

請注意,適用於分析查詢的 Google 服務查詢規則,同樣也適用於 UPDM 查詢。例如,建立對照表時,您無法對歐洲經濟區使用者執行跨服務查詢。

請參閱歐洲經濟區同意聲明規定,瞭解如何在廣告資料中心確認已取得同意聲明。

資料大小

為保護使用者隱私,比對使用者提供的資料功能會強制執行下列資料大小規定:

  • 使用者名單中至少須上傳 1,000 筆記錄。
  • 每次成功更新比對表時,都必須包含至少一定數量的新比對使用者。這項行為與差異檢查類似。
  • 清單不得超過記錄數量上限。如要瞭解資料上限,請洽詢 Google 代表。

設定資料擷取

開始之前,您需要設定廣告資料中心帳戶,建立資料連結,以便建立資料比對管道。這些步驟只需執行一次。

在「Connections」頁面中,按一下「Begin setup」,開啟帳戶設定精靈,進入 UPDM 啟用階段。

前往「Connections」

系統會授予哪些 BigQuery 和 Cloud Storage 權限?

如果您設定 UPDM 搭配 BigQuery 或 Cloud Storage 使用,請參閱這份參考資料,瞭解授予廣告資料中心服務帳戶的權限。

BigQuery

Data Fusion 服務帳戶
目的 Data Fusion 服務帳戶用於在廣告資料中心使用者介面中,顯示來源欄位清單。
格式 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
目的地專案中特定資料集的
BigQuery Job User
roles/bigquery.jobUser
資料來源和目的地專案
Storage Admin
roles/storage.admin
資料來源和目的地專案,或專屬儲存空間 bucket
UPDM 服務帳戶
目的 UPDM 服務帳戶用於執行比對工作。
格式 service-some-number@gcp-sa-adsdataconnector.iam.gserviceaccount.com
必要存取權
BigQuery Data Viewer
roles/bigquery.dataViewer
目的地專案
BigQuery Job User
roles/bigquery.jobUser
目的地專案

Cloud Storage

Data Fusion 服務帳戶
目的 Data Fusion 服務帳戶用於在廣告資料中心使用者介面中,顯示來源欄位清單。
格式 service-some-number@gcp-sa-datafusion.iam.gserviceaccount.com
必要存取權
Storage Object Viewer
roles/storage.objectViewer
資料來源專案中特定儲存空間 bucket 的
BigQuery Data Viewer
roles/bigquery.dataViewer
資料來源專案,或專屬儲存空間 bucket
Storage Admin
roles/storage.admin
資料來源專案,或專屬儲存空間 bucket
Dataproc 服務帳戶
目的 Dataproc 服務帳戶負責在背景執行資料管道。
格式 some-number-compute@developer.gserviceaccount.com
必要存取權
Storage Admin
roles/storage.admin
資料來源和目的地專案,或專屬儲存空間 bucket
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
目的地專案

其他資料來源

其他資料來源則不需要

擷取及比對第一方資料

來源權限和連線需求

廣告資料中心連結會使用「設定」>「詳細資料」>「服務帳戶」下方顯示的服務帳戶 (通常是 service-<number>@gcp-sa-adsdatahub.iam.gserviceaccount.com)。請授予下列角色:

  • BigQuery 來源:來源資料集或資料表的 roles/bigquery.dataViewer (BigQuery 資料檢視者)。
  • Cloud Storage 來源:來源 bucket 或物件的 roles/storage.objectViewer (Storage 物件檢視者)。
  • 第一方資料匯入目的地: roles/bigquery.dataEditor (BigQuery 資料編輯者),如果資料表不在預設資料集中。

欄位和資料類型規定

  1. 比對使用者提供的資料 (UPDM):
    • 對應 user_id 和至少一個 PII 欄位 (email、phone 或完整地址:first_name、last_name、country、zip_code)。
    • user_id、country 和 zip_code:純文字 STRING (未經雜湊處理)。如果是 BigQuery 來源,這些資料欄必須已是 STRING;其他類型 (例如 INT64) 在建立連線時會失敗。Connections 會將比對表格中的 user_id 轉換為 BYTES。country 必須是 2 個字母的 ISO 3166-1 alpha-2 代碼。
    • email、phone、first_name 和 last_name:HASH - 必須已使用 SHA-256 雜湊和 Base64 編碼 (也接受 64 個字元的十六進位 SHA-256 值)。Connections 不會對資料進行雜湊處理。建立連線時,系統不會擷取純文字值,因此每次執行都會失敗,並顯示 ... must be encoded using TO_BASE64(SHA256(...))。
    • 「比對使用者提供的資料」連結沒有目的地資料表。帳戶中的所有查詢,以及手動執行的 UPDM 查詢,都會寫入相同的比對資料,因此每次執行都會取代前一次的資料。每個帳戶只需一個 UPDM 連線。
    • 如要瞭解各欄位的規則,請參閱「設定輸入資料的格式」。
  2. 第一方資料匯入:
    • 請僅使用使用者介面提供的資料類型:INTEGER、STRING、HASH、DOUBLE、DATE 和 TIMESTAMP。不支援其他 BigQuery 類型。
    • BigQuery 來源:不套用對應類型,每個目的地資料欄都會保留來源資料欄的類型。
    • Cloud Storage 來源:資料欄會讀取為 STRING,並轉換為對應的類型。無法轉換的值會變成 NULL,不會導致執行失敗。
    • 每次執行都會取代整個目的地資料表,而非附加資料。如果來源沒有任何資料列,目的地就會變成空白。請勿將來源資料表或需要保留資料的資料表設為目的地。

Cloud Storage CSV 資料欄規定

  • 加入標頭列。系統會略過第一行,不使用其中的資料欄名稱。
  • 檔案必須包含對應的來源資料欄,不多也不少。多餘的資料欄會導致執行失敗。
  • 第一方資料匯入:資料欄順序必須與欄位對應順序相同。
  • 比對使用者提供的資料:欄必須依此順序排列,且只保留您對應的欄位:user_id、email、phone、first_name、last_name、country、zip_code。對應列的順序不會造成任何影響。
  • 系統未偵測到不同的資料欄順序:值會載入錯誤的欄位 (或媒合率下降),但不會顯示錯誤。

支援的資料來源和連線限制

  • 資料來源:僅支援 BigQuery 和 Cloud Storage 來源。
  • BigQuery 資料表名稱:來源和目的地 BigQuery 資料表需要完整的 project.dataset.table 名稱。
  • Cloud Storage 檔案路徑:提供單一檔案 URI (例如 gs://bucket/path/file.csv)。不支援含有 * 或 ? 的萬用字元路徑。
  • 連結名稱:帳戶中的每個連結都必須有不重複的名稱。

設定輸入資料的格式

資料必須符合下列格式規定,才能正確比對:

  • 如果下列輸入欄位說明中有所指示,您必須使用 SHA256 雜湊上傳。
  • UPDM 支援 Base64 編碼。請參閱 TO_BASE64。
  • 輸入欄位必須採用字串格式。舉例來說,如果您使用 BigQuery SHA256 雜湊函式,請使用下列轉換:TO_BASE64(SHA256(user_data))。

使用者 ID

  • 資料類型:BYTES
  • 雜湊:無

電子郵件

  • 移除開頭和結尾的空白字元
  • 全部使用小寫字元
  • 為所有電子郵件地址加上網域名稱 (例如 gmail.com 或 hotmail.co.jp)
  • 移除重音符號,例如將 è、é、ê 或 ë 變更為 e
  • 移除 gmail.com 和 googlemail.com 電子郵件地址中,網域名稱前所有的半形句號 (.)
  • 雜湊:Base64 編碼 SHA256

有效期限: TO_BASE64(SHA256("jeffersonloveshiking@gmail.com"))

無效: TO_BASE64(SHA256("JéffersonLôvesHiking@gmail.com"))

電話

  • 移除空白字元
  • 請採用 E.164 格式,例如:+14155552671 (美國)、+442071838750 (英國)
  • 移除所有特殊字元,但國家/地區代碼前的「+」除外
  • 雜湊:Base64 編碼 SHA256

有效期限: TO_BASE64(SHA256("+18005550101"))

無效: TO_BASE64(SHA256("(800) 555-0101"))

名字

  • 移除空白字元
  • 全部使用小寫字元
  • 移除所有前置詞,例如 Mrs.、先生、Ms., 博士
  • 請勿移除重音符號,例如 è、é、ê 或 ë
  • 雜湊:Base64 編碼 SHA256

有效期限: TO_BASE64(SHA256("daní"))

無效: TO_BASE64(SHA256("Daní"))

姓氏

  • 移除空白字元
  • 全部使用小寫字元
  • 移除所有後置詞,例如 Jr.、Sr., 2nd、3rd、II、III、PHD、MD
  • 請勿移除重音符號,例如 è、é、ê 或 ë
  • 雜湊:Base64 編碼 SHA256

有效期限: TO_BASE64(SHA256("délacruz"))

無效: TO_BASE64(SHA256("dé la Cruz, Jr."))

國家/地區

  • 即使所有顧客數位資料的國家/地區代碼皆相同,仍須納入
  • 請勿雜湊處理國家/地區資料
  • 使用 ISO 3166-1 alpha-2 國家/地區代碼
  • 雜湊:無

有效期限: US

無效: United States of America 或 USA

郵遞區號

  • 請勿雜湊處理郵遞區號資料
  • 美國與國際郵遞區號皆可使用
  • 美國:
    • 可使用 5 碼郵遞區號,例如 94043
    • 也可使用 5 碼後加 4 碼額外編碼的郵遞區號,例如 94043-1351 或 940431351
  • 所有其他國家/地區:
    • 不需設定格式 (不需轉換為小寫,或移除空格和特殊字元)
    • 移除郵遞區號的額外編碼
  • 雜湊:無

雜湊驗證和資料編碼

您可以使用下列雜湊驗證指令碼,確保資料格式正確。

JavaScript

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

  async function hash(token) {
    // Removes leading or trailing spaces and converts all characters to lowercase.
    const formattedToken = token.trim().toLowerCase();
    // Hashes the formatted string using the SHA-256 hashing algorithm.
    const hashBuffer = await crypto.subtle.digest(
        'SHA-256', (new TextEncoder()).encode(formattedToken));
    // Converts the hash buffer to a base64-encoded string and returns it.
    const base64Str = btoa(String.fromCharCode(...new Uint8Array(hashBuffer)));
    return base64Str;
  }

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

    // Expected hash for +18005551212:
    // YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=
    hash('+18005551212').then(result => console.log(result));

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

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

  main()

Python

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

  Supports: Python 2, Python 3

  Sample hashes:

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

  import base64
  import hashlib

  def hash(token):
  # Generates a base64-encoded SHA-256 hash of a normalized input string.
    return base64.b64encode(
        hashlib.sha256(
            token.strip().lower().encode('utf-8')).digest()).decode('utf-8')

  def print_hash(token, expected=None):
  # Computes and displays the hash of a token, with optional validation.
    hashed = hash(token)

    if expected is not None and hashed != expected:
      print(
          'ERROR: Incorrect hash for token "{}". Expected "{}", got "{}"'.format(
              token, expected, hashed))
      return

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

  def main():
  # Tests the hash function with sample tokens and expected results.
    print_hash(
        'test@gmail.com', expected='h5JGBrQTGorO7q6IaFMfu5cSqqB6XTp1aybOD11spnQ=')
    print_hash(
        '+18005551212', expected='YdkRG+0+bZz8G8O1yzWkAmh8TxVGvuBhor1ET73WTEQ=')
    print_hash('John', expected='ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo=')
    print_hash('Doe', expected='eZ75KhGvkY4/t0HfQpNPO1aO0tk6wd908bjUGieTKm8=')

  if __name__ == '__main__':
    main()

Go

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

  Sample hashes:

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

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

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

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

  }

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

Java

  package updm.hashing;

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

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

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

  private HashExample() {}

  public static String hash(String token) {
    // Normalizes and hashes the input token using SHA-256 and Base64 encoding.
    String formattedToken = token.toLowerCase().strip();

    byte[] hash;
    try {
      hash = MessageDigest.getInstance("SHA-256").digest(formattedToken.getBytes(UTF_8));
    } catch (NoSuchAlgorithmException e) {
      throw new IllegalStateException("SHA-256 not supported", e);
    }

    return Base64.getEncoder().encodeToString(hash);
  }

  public static void printHash(String token) {
    // Calculates and prints the hash for the given token.
    System.out.printf("Hash: \"%s\"\t(Token: %s)\n", hash(token), token);
  }

  public static void main(String[] args) {
    // Executes hash calculations and prints results for sample tokens.
    printHash("test@gmail.com");
    printHash("+18005551212");
    printHash("John");
    printHash("Doe");
  }
  }

SQL

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

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

  Sample hashes:

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

  The unhashed input table schema is assumed to be:

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

  -- Creates a new table with Base64-encoded SHA-256 hashes of specified columns.
  CREATE TABLE `your_project_name.your_dataset_name.output_hashed_table_name`
  AS
  SELECT
    UserID,
    TO_BASE64(SHA256(LOWER(Email))) AS Email,
    TO_BASE64(SHA256(Phone)) AS Phone,
    TO_BASE64(SHA256(LOWER(FirstName))) AS FirstName,
    TO_BASE64(SHA256(LOWER(LastName))) AS LastName,
    PostalCode,
    CountryCode,
  FROM
    `your_project_name.your_dataset_name.input_unhashed_table_name`;

加入鍵值

某些使用者提供資料的組合比其他組合更有效。以下列出不同的使用者提供資料組合,並依相對強度排序。如果使用地址,則必須包含:名字、姓氏、國家/地區和郵遞區號。

  1. 電子郵件、電話、地址 (最強)
  2. 電話、地址
  3. 電子郵件、地址
  4. 電子郵件、電話
  5. 地址
  6. 電話
  7. 電子郵件 (最弱)

建立比對表格

  1. 依序點選「連結」>「建立連結」>「比對使用者提供的資料」。
  2. 選擇資料來源,然後按一下「連結」。
  3. 如果出現提示訊息,請進行驗證,然後點選「下一步」:

    BigQuery

    按一下「套用」,授予 BigQuery 存取權。

    Cloud Storage

    按一下「套用」,授予 Cloud Storage 存取權。

    MySQL

    輸入 MySQL 資料庫位置、通訊埠、使用者名稱和密碼。

    S3

    輸入 Amazon S3 私密存取金鑰。

    PostgreSQL

    輸入 PostgreSQL 資料庫位置、通訊埠、使用者名稱、密碼和資料庫。

    Redshift

    輸入 Redshift 資料庫位置、通訊埠、使用者名稱、密碼和資料庫。

    sFTP

    輸入 sFTP 伺服器位置、使用者名稱和密碼。

    Snowflake

    輸入 Snowflake 帳戶 ID、使用者名稱和密碼。

  4. 設定資料來源,然後點選「下一步」:

    BigQuery

    選取要匯入的 BigQuery 資料表。

    Cloud Storage

    輸入 gsutil 路徑 (例如 gs://my-bucket/folder/),然後選取檔案格式。

    如果這是您第一次連結這項資源,系統會顯示快訊。按一下「套用」授予存取權,然後點選「下一步」。注意:您的角色需要具備必要權限,才能為相關 bucket 委派 storage.buckets.setIamPolicy。

    MySQL

    選取要使用的 MySQL 資料庫和資料表。

    S3

    輸入所要上傳檔案的 URI (相對於主機位址)。

    PostgreSQL

    輸入 PostgreSQL 結構定義和資料表 (或檢視表) 名稱。

    Redshift

    輸入 Redshift 結構定義和資料表 (或檢視表) 名稱,根據預設,Redshift 使用的資料庫位置網址會採用下列範本:cluster-identifier.account-number.aws-region.redshift.amazonaws.com。

    sFTP

    輸入檔案路徑和名稱,格式為 /PATH/FILENAME.csv

    Snowflake

    輸入要使用的 Snowflake 資料庫、結構定義和資料表 (或資料檢視)。

  5. 選取要用做中介目的地的 BigQuery 資料集,然後點選「Next」(下一步)。這個步驟可確保資料格式正確無誤。
  6. 選用:修改資料格式。轉換作業包括計算雜湊、大小寫格式設定,以及合併/分割欄位。
    1. 依序點選「Action」(動作) > >「Transform」(轉換)。
    2. 在彈出的面板中,按一下「Add transformation」(新增轉換) 或「Add another transformation」(新增其他轉換)
    3. 從下拉式選單中選擇轉換類型,然後輸入需求。
    4. 按一下 [儲存]。
  7. 選擇至少一個彙整鍵,並對應要使用的欄位。廣告資料中心會自動對應名稱相同的欄位,並以 表示。視需要進行編輯,然後按一下「Next」(下一步)。
  8. 設定時間表:
    1. 為連結命名。
    2. 設定頻率,指定資料匯入上一步所選資料集的頻率。每次執行都會覆寫目的地資料表中的資料。
    3. 指定使用者 ID 衝突的處理方式。您可以選擇保留現有比對結果,或以新資料覆寫。
  9. 按一下「完成」。對照表建立後,通常 12 小時內即可查詢。

查看連線詳細資料

連線詳細資料頁面會提供特定連線最近執行作業和錯誤的相關資訊。如要查看特定連線的詳細資料,請按照下列步驟操作:

  1. 按一下「連線」。
  2. 按一下連線名稱,即可查看詳細資料。
  3. 現在可以查看連線詳細資料和最近的執行作業。每種狀態都會顯示兩種可能的錯誤類型:連線層級 (連線未執行) 和資料列層級錯誤 (資料列未匯入)。
    1. 「失敗」狀態表示整個連線無法執行 (例如服務帳戶權限問題)。按一下錯誤狀態,即可查看哪些錯誤影響了連線。
    2. 「Completed」(已完成) 狀態表示連線已成功執行。不過,可能仍有資料列層級的錯誤,這時「含有錯誤的列數」欄會顯示非零值。按一下該值,即可進一步瞭解哪些記錄失敗。

編輯連線

可編輯的詳細資料如下:

  • 連線名稱
  • 排程
  • 目標資料表
  • 欄位對應

不支援編輯資料來源。如要變更資料來源,請建立新連結並刪除舊連結。

如要編輯連線詳細資料,請按照下列步驟操作:

  1. 按一下「連線」。
  2. 按一下要編輯的連結名稱。
  3. 編輯要變更的詳細資料:
    • 連線名稱:按一下「Edit」(編輯),輸入新名稱,然後按下 Enter 鍵。
    • 時間表:按一下「編輯」,設定新的時間表,然後按一下「儲存」。
    • 目的地資料表:按一下「Edit」(編輯),輸入新的目的地名稱,然後按一下「Save」(儲存)。
    • 欄位對應:按一下 ,變更欄位,然後按一下「Save」(儲存)。
  4. 按一下 []。

遷移現有連結

「連結」分頁中的現有連結,將移至直接內建於廣告資料中心的新版「連結」頁面。更新後的連結會使用「設定」>「詳細資料」>「服務帳戶」下方顯示的服務帳戶 (通常是 service-<number>@gcp-sa-adsdatahub.iam.gserviceaccount.com),讀取來源和寫入目的地,而非舊版 Data Fusion、Dataproc 和 UPDM 服務帳戶。

請在連結移動之前完成下列待辦事項:

  1. 授予服務帳戶權限:依序前往「設定」>「詳細資料」>「服務帳戶」,將必要的來源和目的地角色 (roles/bigquery.dataViewer、roles/storage.objectViewer 和非預設目的地資料集的 roles/bigquery.dataEditor) 授予其中顯示的服務帳戶 (通常是 service-<number>@gcp-sa-adsdatahub.iam.gserviceaccount.com)。如果連結的來源無法讀取、已刪除或變更,仍可移動 (尤其是 Cloud Storage 來源,在移動時不會驗證),但執行作業會失敗,直到您授予存取權或修正來源為止。
  2. 轉換不支援的連線:系統不會遷移採用下列設定的連線。請轉換為支援的 BigQuery 或 Cloud Storage 連線:
    • 其他資料來源 (Amazon S3、Snowflake、MySQL、PostgreSQL、Amazon Redshift、sFTP 或 Salesforce):先將資料暫存在 BigQuery 或 Cloud Storage,然後建立 BigQuery 或 Cloud Storage 連線。
    • 不支援的欄位對應或資料類型:更新或重新建立連結,以符合欄位和資料類型規定。
    • Cloud Storage 萬用字元路徑 (* 或 ?):請將萬用字元 URI 替換為單一檔案 URI,或先將檔案載入 BigQuery。
    • 連線名稱重複:重新命名或刪除重複的連線,確保帳戶中的每個連線都有不重複的名稱。
  3. 刪除未使用的連線:刪除不再需要的過時連線。

查詢比對資料

查詢對照表

如果對照表包含足夠的資料,可以滿足隱私權檢查的條件,您就能針對資料表執行查詢。

第一方資料 (1PD) 的原始資料表以 my_data 表示。包括個人識別資訊 (PII) 和非 PII 資料。 與比對表相比,原始資料表代表範圍內的所有第一方資料,因此使用原始資料表可提供更多洞察資料,改善報表品質。

廣告資料中心結構定義中,每個包含 user_id 欄位的資料表,都會附帶一個對照表。以 adh.google_ads_impressions 資料表為例,廣告資料中心會產生名為 adh.google_ads_impressions_updm 的對照表,其中包含 User-ID。如果是政策排除聯播網資料表,系統會建立個別的對照表。以 adh.google_ads_impressions_policy_isolated_network 資料表為例,廣告資料中心會產生名為 adh.google_ads_impressions_policy_isolated_network_updm 的對照表,其中包含 User-ID。

這些資料表包含原始資料表的一部分使用者,user_id 會有相符項目。舉例來說,如果原始資料表包含使用者 A 和使用者 B 的資料,但只有使用者 A 成功比對,那麼使用者 B 就不會出現在對照表。

對照表包含另一個名為 customer_data_user_id 的資料欄,該欄會以位元組形式儲存使用者 ID。

編寫查詢時,請務必考慮欄位的類型。SQL 比較運算子會認為您要比較的常值類型相同。視第一方資料表儲存 user_id 的方式而定,您可能需要先為資料表中的值編碼,才能比對資料。您必須將彙整鍵轉換為位元組,才能成功比對:

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 欄位自 2024 年 10 月 1 日起提供。您無法使用這個欄位計算該日期之前的媒合率。

/* 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 常見問題」。