比對使用者提供的資料

總覽

UPDM (使用者提供的資料比對) 會將您針對使用者收集的第一方資料 (例如網站、應用程式或實體商店的資訊) 與使用者在 Google 廣告資料中相同的登入資料 (不含 Google Marketing Platform) 合併。為了讓使用者提供的資料比對功能,廣告事件必須連結至 Google 廣告資料中已登入的使用者。

相較於其他形式的目標客戶比對,使用者提供的資料比對功能有一些獨特的優勢。與使用者提供的資料相符:

  • 比第三方資料更能展現產業變化
  • 第三方 Cookie 即將淘汰,因此不會受到影響
  • 可提供關聯性更高的客戶體驗,通常提升客戶參與度
  • 提供更豐富的客戶深入分析

流程摘要

在您為帳戶啟用使用者提供的資料比對功能後,將會有兩個階段持續使用該功能:

  1. 第一方資料擷取至廣告資料中心
    • 設定格式,將第一方資料上傳至 BigQuery 資料集。您可以使用自己擁有的任何 BigQuery 資料集,但並非管理員專案
    • 必須建立連線和匯入時間表,啟動資料比對要求。
    • Google 會將您的專案與 Google 擁有的資料 (包括 Google 的使用者 ID 和經雜湊處理的使用者提供資料) 結合在一起,以建立和更新 *_match 資料表。
  2. 廣告資料中心所對應的查詢 (即根據相符的資料)
    • *_match 資料表執行查詢的方式與在廣告資料中心執行一般查詢的方式相同。

資料來源和目的地專案

連線時,您必須使用兩項不同的 Google Cloud 專案:資料來源專案和目的地專案。

  • 資料來源:這項專案包含您原始的廣告資料,且採用原始格式。
  • 目的地:這是廣告資料中心寫入的 BigQuery 資料集。根據預設,這是管理員專案。如要將設定變更為其他 Google Cloud 專案,請參閱「設定服務帳戶」一文。

隱私權限制

收集客戶資料

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

資料大小

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

  • 您必須在使用者清單中上傳至少 1,000 筆記錄。
  • 每次成功更新對照表時,都必須包含新相符的使用者數目下限。這個行為與差異檢查類似。
  • 您的清單不得超過記錄上限。如要瞭解數據用量上限,請與您的 Google 代表聯絡。

啟用「連線」分頁

開始之前,請先設定您的廣告資料中心帳戶,以啟用「Connections」(連線)分頁,您要用來建立資料比對管道。進行上述步驟即可。

  1. 將 Google 代表寄給我們:
    1. 廣告資料中心帳戶 ID 會用來比對使用者提供的資料。
    2. 有權存取目的地專案的超級使用者電子郵件地址。
    3. 請向 Google 代表確認帳戶與超級使用者已加入許可清單。
  2. 在指定的 Google Cloud 專案中啟用 Ads Data Connector API。根據預設,這是您管理員專案。如要使用其他專案,請按照下列步驟將替代 Google Cloud 專案設為資料來源專案。您必須在以加入許可清單的超級使用者的身分登入時執行這些步驟。

    1. 前往 Cloud Console API 程式庫
    2. 從清單中選取資料來源
    3. 搜尋「Ads Data Connector API」如果 Ads Data Connector API 沒有顯示在搜尋結果中,可能表示已登入的 Google 帳戶不是加入許可清單的超級使用者。
    4. 在 API 頁面中,按一下 [ENABLE] (啟用)
    5. 請向 Google 代表確認 API 已啟用。
  3. Google 代表會傳送三個電子郵件地址,分別標示為「Datafusion」、「Dataproc」和「UPDM」服務帳戶。

    「廣告資料中心」帳戶也會顯示新的「連線」部分,其中包含「您的第一方資料」和「資料比對」的分頁。 瞭解各個分頁標籤的用途

  4. 將適當的權限授予服務帳戶。如需不同服務帳戶及其所需權限的說明,請在表格中選取資料來源:

    BigQuery

    資料處理服務帳戶
    Purpose 資料匯出服務帳戶可用來在廣告資料中心 UI 中顯示來源欄位清單。
    格式化 service-some-number@gcp-sa-datafusion.iam.gserviceaccount.com
    必要存取權
    BigQuery Data Viewer
    roles/bigquery.dataViewer
    針對資料來源目的地專案中的特定資料集
    Storage Admin
    roles/storage.admin
    適用於資料來源專案或專屬儲存空間值區
    Dataproc 服務帳戶
    Purpose 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 服務帳戶
    Purpose UPDM 服務帳戶可用來執行相符工作。
    格式化 service-some-number@gcp-sa-adsdataconnector.iam.gserviceaccount.com
    必要存取權
    BigQuery Data Viewer
    roles/bigquery.dataViewer
    適用於 Destination 專案
    BigQuery Job User
    roles/bigquery.jobUser
    適用於 Destination 專案

    Cloud Storage

    資料處理服務帳戶
    Purpose 資料匯出服務帳戶可用來在廣告資料中心 UI 中顯示來源欄位清單。
    格式化 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 服務帳戶
    Purpose Dataproc 服務帳戶負責在背景執行資料管道。
    格式化 some-number-compute@developer.gserviceaccount.com
    必要存取權
    Storage Admin
    roles/storage.admin
    適用於資料來源目的地專案,或是專用的儲存空間值區
    BigQuery Job User
    roles/bigquery.jobUser
    適用於 Destination 專案
    UPDM 服務帳戶
    Purpose UPDM 服務帳戶可用來執行相符工作。
    格式化 service-some-number@gcp-sa-adsdataconnector.iam.gserviceaccount.com
    必要存取權
    BigQuery Data Viewer
    roles/bigquery.dataViewer
    適用於 Destination 專案
    BigQuery Job User
    roles/bigquery.jobUser
    適用於 Destination 專案

    Salesforce

    即將推出

擷取第一方資料

設定輸入資料格式

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

  • 如有需要,您必須使用以 Base16 字串編碼的 SHA256 雜湊上傳。雖然 UPDM 支援 Base64,但這與 Google Ads 目標客戶比對規範不同。
  • 輸入欄位的格式必須為字串。如果您使用 BigQuery 的 SHA256 雜湊函式和 Base16 編碼函式 (TO_HEX),請使用下列轉換:TO_HEX(SHA256(user_data))

User-ID

  • 純文字
  • 雜湊:無

電子郵件

  • 去除空白字元
  • 全部使用小寫字元
  • 為所有電子郵件地址加上網域名稱 (例如 gmail.com 或 hotmail.co.jp)
  • 移除重音符號,例如將 è、é、ê 或 ë 改成 e
  • 雜湊:Base16 編碼 SHA256

有效:TO_HEX(SHA256("jeffersonloveshiking@gmail.com"))

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

電話

  • 去除空白字元
  • 採用 E.164 格式,例如 US +14155552671、UK +442071838750
  • 包含國家/地區代碼 (包括美國)
  • 移除國家/地區代碼前的「+」以外的所有特殊字元
  • 雜湊:Base16 編碼 SHA256

有效:TO_HEX(SHA256("+18005550101"))

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

名字

  • 去除空白字元
  • 全部使用小寫字元
  • 請移除所有前置字串,例如「女士」。
  • Don't 會移除重音符號,例如 è、é、ê 或 ë
  • 雜湊:Base16 編碼 SHA256

有效:TO_HEX(SHA256("daní"))

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

姓氏

  • 去除空白字元
  • 全部使用小寫字元
  • 請移除所有前置字串,例如 Jr.
  • Don't 會移除重音符號,例如 è、é、ê 或 ë
  • 雜湊:Base16 編碼 SHA256

有效:TO_HEX(SHA256("delacruz"))

無效:TO_HEX(SHA256("de la Cruz, Jr."))

國家/地區

  • 即使所有客戶資料的國家/地區代碼皆相同,仍須納入
  • 不要對國家/地區資料進行雜湊處理
  • 請使用 ISO 3166-1 alpha-2 國家/地區代碼
  • 雜湊:無

有效:US

無效:United States of AmericaUSA

郵遞區號

  • 不要對郵遞區號資料進行雜湊處理
  • 美國與國際郵遞區號皆可使用
  • 美國:
    • 可使用 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) {
  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()

Base64

/**
 * @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()

Python

基準 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()

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):
  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()

Go

基準 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")
}

Java

基準 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");
  }
}

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) {
  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`;

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

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. 按一下「Connections」(連線) >「Data matching」(資料比對) >「Create connection」(建立連線)
  2. 選擇資料來源,然後按一下「連線」。如果出現驗證提示,請按一下「Next」(下一步)
  3. 設定資料來源,然後點選「下一步」

    BigQuery

    選取要匯入的 BigQuery 資料表。

    Cloud Storage

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

    Salesforce

    即將推出

  4. 設定「destination」(目的地),然後點選「Next」(下一步)
    1. 請選取新的 BigQuery 資料集,做為資料的中介目的地。這個步驟可確保資料採用正確的格式
  5. 選用:修改資料格式。轉換包括運算雜湊、小寫/大寫格式,以及合併/分割欄位。
    1. 按一下 [動作] > > Transform
    2. 在彈出式面板中,按一下 [新增轉換] 或 [新增其他轉換]
    3. 從下拉式選單中選擇轉換類型,並輸入相關規定。
    4. 按一下「儲存」
  6. 選擇至少一個加入鍵,以對應您要使用的欄位,然後點選「下一步」
  7. 設定時間表:
    1. 為連線命名。
    2. 設定頻率,決定資料將匯入您在上一步選取的資料集的頻率。每次執行時都會覆寫 destination 資料表中的資料。
    3. 指定處理使用者 ID 衝突的方式。您可以選擇保留現有相符項目或覆寫新資料。
  8. 按一下「Finish」(完成)

查看連線詳細資料

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

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

編輯連線

目前尚不支援編輯連線。如要變更連線,請建立新連線,然後刪除舊的連線。

查詢廣告資料中心中的資料

查詢對照表

如果對照表包含的資料足以進行隱私權檢查,您就能開始對資料表執行查詢。「廣告資料中心」結構定義中的每個資料表都包含 user_id 欄位,並隨附 *_match 資料表。例如,針對 adh.google_ads_impressions 資料表,廣告資料中心也會產生名為 adh.google_ads_impressions_match 的對照表,其中「僅」包含使用者 ID。這些資料表包含原始資料表內的部分使用者,而 user_id 中有相符。舉例來說,如果原始資料表包含使用者 A 和使用者 B 的資料,但只有使用者 A 相符,那麼使用者 B 就不會出現在對照表中。

對照表包含另一個名為 external_cookie 的資料欄,用於將 Cookie 儲存為 BYTES。

external_cookie 欄位包含您的 ID 為 BYTES。你必須將彙整鍵轉換成 BYTES 才能成功比對。

JOIN ON 
  google_data_imp.external_cookie = CAST(my_data.user_id AS BYTES)

查詢廣告表格表格的 *_match 資料檢視,即可使用對照表。如果同時使用 Cookie 比對,則可在查詢中按比對類型進行篩選。 使用:

  • Cookie 比對的match_type = 1
  • match_type = 2:與使用者提供的資料相符

雖然您可以在查詢中允許 match_type,但這個欄位無法傳回結果,因此您應該不要在最終的 SELECT 陳述式中納入這個欄位。

查詢範例

計算相符的使用者

這項查詢會計算 Google Ads 曝光資料表中相符的使用者數量。

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

SELECT COUNT(DISTINCT user_id)
FROM adh.google_ads_impressions_match

計算使用者提供的資料相符使用者

這項查詢會按比對類型計算比對成功的使用者人數。廣告事件表格包含已登入和未登入使用者的事件,因此篩選使用者提供的資料比對結果,因此只會比對已登入使用者。

/* Count user-provided data matched users by match type.
match_type = 1 for cookie matching
match_type = 2 for user-provided data matching */

SELECT
  match_type AS match_type,
  COUNT(DISTINCT user_id) AS user_cnt,
FROM 
  adh.google_ads_impressions_match
GROUP BY
  match_type

以下查詢說明如何整合第一方資料與 Google Ads 資料:

/* Join first-party data with Google Ads data. The external_cookie 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_match AS google_data_imp
LEFT JOIN
  `my_data`
ON 
  google_data_imp.external_cookie = CAST(my_data.user_id AS BYTES)
-- Uncomment the following line if cookie matching is enabled as well.
-- WHERE google_data_imp.match_type = 2
GROUP BY
  inventory_type

這項查詢會計算與使用者提供的資料相符的使用者數量,但不含 Cookie 比對的使用者。請注意,廣告事件表格包含已登入和未登入使用者的事件,因此如果篩選出使用者提供的資料比對結果,就只會找到已登入帳戶的使用者。

/* Count user-provided data matched users, excluding cookie matched users. */

SELECT 
  COUNT(DISTINCT user_id)
FROM 
  adh.google_ads_impressions_match
WHERE 
  match_type = 2

連線

要取得有價值的廣告深入分析,通常就必須拼接多個來源的資料。針對這個資料管道問題建構您的解決方案,需要大量的時間和工程投資。連線提供了一個逐步指南,協助您將資料匯入、轉換並寫入 BigQuery,藉此簡化這項程序。寫入資料後,您可以在廣告資料中心查詢或讀取 BigQuery 的任何其他產品中使用這些資料。使用第一方資料來擴充查詢,就能帶來更豐富的客戶體驗,也更符合整個產業的廣告追蹤異動。

此外,連線的建構工具可讓您在保護隱私權的前提下,與合作夥伴加密及分享個人識別資訊 (PII)。選取含有 PII 的資料欄後,連線會將資料加密,確保只有具備該權限的使用者,才能匯出或讀取您的第一方資料。

您可以使用「連線」從以下來源匯入資料:

瞭解哪些評估第一方資料為評估或啟用用途並不容易,因此「Connections」提供完整的預先定義用途清單,會引導您瞭解擷取、轉換及載入資料的完整體驗。

第一方資料與資料比對之間的差異

設定使用者提供的對照表的工作流程,與透過 Connections 建立一般第一方數據連線相似。但是,雙專案要求假設您先設定連線,才能使用使用者提供的資料比對。如果您僅使用「連線」做為資料準備工具,則可以使用單一 Google Cloud 專案。

使用者提供資料比對的其他規定:

  • 您必須使用電子郵件、電話、地址或任何組合做為合併鍵。
  • 您必須說明 user_id 衝突的解決方式。您可以選擇保留現有比對,或使用新資料覆寫。
  • 除了資料融合和 Dataproc 帳戶之外,您還必須使用 UPDM 服務帳戶。

您的第一方資料工作流程

建立連線

  1. 按一下「Connections」>「您的第一方資料」>「建立連線」
  2. 連線至資料來源。系統會提示你進行驗證。

    BigQuery

    權限是根據您的 Google 帳戶而有所不同,因此無須額外進行驗證。確認 Connections 服務帳戶具備資料表的讀取權限。

    Cloud Storage

    權限是根據您的 Google 帳戶而有所不同,因此無須額外進行驗證。確認 Connections 服務帳戶具備儲存空間值區的讀取權限,

    Salesforce

    (即將推出)

    使用貴機構的 Salesforce 憑證登入。 Google 不會儲存您的憑證,因此每個新的 Salesforce 連線都需要重新驗證。

  3. 選擇用途加入鍵,然後按一下「Use Use」(選取用途)。如果不想選取用途,請按一下 [略過]。 你之後將無法選取用途。
  4. 設定資料來源

    BigQuery

    選取要匯入的 BigQuery 資料表。

    Cloud Storage

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

    Salesforce

    即將發布

  5. 設定目的地和對應欄位。
    • 選取要寫入結果的 Google Cloud 專案、資料集和資料表。確認 Connections 服務帳戶具備您要寫入資料集的寫入權限。
    • 每個連線都會建立新的資料表,以便寫入資料。如果您選取的現有資料表,系統會顯示錯誤訊息。
    • 將目的地欄位 (也就是即將重新建立的資料表中顯示的欄位) 對應至來源資料中的來源欄位。
  6. 設定時間表。
    1. 為連線命名。
    2. 設定頻率,決定資料將匯入您在上一步選取的資料集的頻率。每次執行時都會覆寫 destination 資料表中的資料。
  7. 按一下 [完成]。處理大量資料的連線可能需要數個小時的執行。

查看連線詳細資料

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

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

編輯連線

目前尚不支援編輯連線。如要變更連線,請建立新連線並刪除舊連線。

用途

您選取的用途會影響目的地資料表結構定義和匯入的彙整鍵欄位。展開下方使用案例,瞭解這些架構對結構定義和彙整鍵的影響:

觸及率與頻率

評估廣告活動在各種管道和裝置上的觸及率和頻率,按照第一方使用者區隔劃分。

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
gender 性別 string 選用
年齡 存在時間 int 選用
城市 城市 string 選用
country 國家/地區 string 選用
Lifecycle_state 客戶程序狀態:不明、新手上路、互動、流失等 string 選用
Loyalty_status_status 銀、金、白金、鑽石等 string 選用
最後購買日期 上次購買日期 (Unix 紀元時間戳記) int 選用
最後購買的產品 上次購買 / 消耗的產品 string 選用
上次聯絡日期 上次聯絡 / 參與的日期 (Unix 紀元時間戳記) int 選用
效期價值 客戶效期價值 int 選用
subscription_type [訂閱類型] 客戶擁有的子產品 / 訂閱類型,例如 deluxe、家庭方案 string 選用
transaction_id 這筆交易的專屬 ID string 選用
交易日期 交易日期 (Unix 紀元時間戳記) int 選用
交易_收益 交易收益 int 選用
currency 交易的貨幣類型 string 選用
quantity 交易中的項目數量 string 選用
price 交易中每個商品的價格 int 選用
交易_費用 交易的商品 / 服務費用 int 選用
交易_利潤 交易毛利 int 選用
product_id 交易中產品的 SKU / ID string 選用
交易_說明 交易的其他說明 / 中繼資料 / 參數 string 選用
event_type 例如:電視廣告曝光、行銷電子郵件、網站造訪、親臨門市等 string 選用
event_id 上方事件的專屬 ID string 選用
event_timestamp 事件日期 (Unix 紀元時間戳記) int 選用
channel_metadata 這個接觸點管道的其他中繼資料或資訊 string 選用

多接觸點歸因分析

藉由結合您的第一方接觸點和 Google 資料接觸點來評估歸因。

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
event_type 例如:電視廣告曝光、行銷電子郵件、網站造訪、親臨門市等 string 需要
event_id 上方事件的專屬 ID string 需要
event_timestamp 事件日期 (Unix 紀元時間戳記) int 需要
抵免額 功勞價值 (用於歸因) - 例如轉換次數 int 選用
channel_metadata 這個接觸點管道的其他中繼資料或資訊 string 選用

成效指標

評估按照客層、興趣相似目標對像或第一方使用者區隔劃分的廣告活動成效。

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
gender 性別 string 選用
年齡 存在時間 int 選用
城市 城市 string 選用
country 國家/地區 string 選用
Lifecycle_state 客戶程序狀態:不明、新手上路、互動、流失等 string 選用
Loyalty_status_status 銀、金、白金、鑽石等 string 選用
最後購買日期 上次購買日期 (Unix 紀元時間戳記) int 選用
最後購買的產品 上次購買 / 消耗的產品 string 選用
上次聯絡日期 上次聯絡 / 參與的日期 (Unix 紀元時間戳記) int 選用
效期價值 客戶效期價值 int 選用
subscription_type [訂閱類型] 客戶擁有的子產品 / 訂閱類型,例如 deluxe、家庭方案 string 選用

轉換路徑歸因

使用自訂接觸點 (包括您的第一方接觸點) 分析轉換路徑成效。

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
event_type 例如:電視廣告曝光、行銷電子郵件、網站造訪、親臨門市等 string 需要
event_id 上方事件的專屬 ID string 需要
event_timestamp 事件日期 (Unix 紀元時間戳記) int 需要
抵免額 功勞價值 (用於歸因) - 例如轉換次數 int 選用
channel_metadata 這個接觸點管道的其他中繼資料或資訊 string 選用

跨發布商重疊

分析廣告活動針對不同發布商的觸及率和頻率,按照第一方使用者區隔劃分。

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
gender 性別 string 選用
年齡 存在時間 int 選用
城市 城市 string 選用
country 國家/地區 string 選用
Lifecycle_state 客戶程序狀態:不明、新手上路、互動、流失等 string 選用
Loyalty_status_status 銀、金、白金、鑽石等 string 選用
最後購買日期 上次購買日期 (Unix 紀元時間戳記) int 選用
最後購買的產品 上次購買 / 消耗的產品 string 選用
上次聯絡日期 上次聯絡 / 參與的日期 (Unix 紀元時間戳記) int 選用
效期價值 客戶效期價值 int 選用
subscription_type [訂閱類型] 客戶擁有的子產品 / 訂閱類型,例如 deluxe、家庭方案 string 選用

同時廣告活動成效

評估並行廣告活動曝光的成效影響,按照第一方使用者區隔劃分。

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
gender 性別 string 選用
年齡 存在時間 int 選用
城市 城市 string 選用
country 國家/地區 string 選用
Lifecycle_state 客戶程序狀態:不明、新手上路、互動、流失等 string 選用
Loyalty_status_status 銀、金、白金、鑽石等 string 選用
最後購買日期 上次購買日期 (Unix 紀元時間戳記) int 選用
最後購買的產品 上次購買 / 消耗的產品 string 選用
上次聯絡日期 上次聯絡 / 參與的日期 (Unix 紀元時間戳記) int 選用
效期價值 客戶效期價值 int 選用
subscription_type [訂閱類型] 客戶擁有的子產品 / 訂閱類型,例如 deluxe、家庭方案 string 選用
transaction_id 這筆交易的專屬 ID string 選用
交易日期 交易日期 (Unix 紀元時間戳記) int 選用
交易_收益 交易收益 int 選用
currency 交易的貨幣類型 string 選用
quantity 交易中的項目數量 string 選用
price 交易中每個商品的價格 int 選用
交易_費用 交易的商品 / 服務費用 int 選用
交易_利潤 交易毛利 int 選用
product_id 交易中產品的 SKU / ID string 選用
交易_說明 交易的其他說明 / 中繼資料 / 參數 string 選用
event_type 例如:電視廣告曝光、行銷電子郵件、網站造訪、親臨門市等 string 選用
event_id 上方事件的專屬 ID string 選用
event_timestamp 事件日期 (Unix 紀元時間戳記) int 選用
channel_metadata 這個接觸點管道的其他中繼資料或資訊 string 選用

廣告活動比較

比較 Google 廣告活動和其他發布商的成效。

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
頻道 執行這個廣告活動的頻道 (例如 Facebook、電視等) string 需要
合作夥伴 合作夥伴的名稱 (如果有的話) string 選用
策略 特定策略名稱 string 選用
廣告活動中繼資料 這個廣告活動的其他中繼資料或資訊 string 選用
date 廣告活動日期 (Unix 紀元時間戳記) int 需要
曝光次數 這個廣告活動在此日期的曝光次數 int 需要
點擊 這個廣告活動在此日期獲得的點擊次數 int 需要
轉換 這個廣告活動在此日期範圍內的轉換次數 int 需要
費用 這個廣告活動在此日期的總費用 int 需要

興趣相似目標對象和標籤比較

找出第一方使用者區隔以及 Google 興趣相似目標對象和潛在目標消費者區隔之間的重疊。

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
gender 性別 string 選用
年齡 存在時間 int 選用
城市 城市 string 選用
country 國家/地區 string 選用
Lifecycle_state 客戶程序狀態:不明、新手上路、互動、流失等 string 選用
Loyalty_status_status 銀、金、白金、鑽石等 string 選用
最後購買日期 上次購買日期 (Unix 紀元時間戳記) int 選用
最後購買的產品 上次購買 / 消耗的產品 string 選用
上次聯絡日期 上次聯絡 / 參與的日期 (Unix 紀元時間戳記) int 選用
效期價值 客戶效期價值 int 選用
subscription_type [訂閱類型] 客戶擁有的子產品 / 訂閱類型,例如 deluxe、家庭方案 string 選用

應用程式轉換分析

評估廣告活動對應用程式內行為的影響。

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
date 行動應用程式活動的日期 (Unix 紀元時間戳記) int 需要
安裝 布林值,表示當天是否記錄了安裝事件 布林值 需要
註冊 布林值,表示當天是否記錄了註冊事件 布林值 需要
login 布林值,表示今天是否記錄了登入事件 布林值 需要
in_app_purchases 這一天的應用程式內購總數 int 需要

投資報酬率計算

根據第一方轉換資料評估增加的投資報酬率。

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
transaction_id 這筆交易的專屬 ID string 需要
交易日期 交易日期 (Unix 紀元時間戳記) int 需要
交易_收益 交易收益 int 需要
currency 交易的貨幣類型 string 選用
quantity 交易中的項目數量 string 選用
price 交易中每個商品的價格 int 選用
交易_費用 交易的商品 / 服務費用 int 選用
交易_利潤 交易毛利 int 選用
product_id 交易中產品的 SKU / ID string 選用
交易_說明 交易的其他說明 / 中繼資料 / 參數 string 選用

自訂目標對象啟用

根據第一方資料和 Google 資料建立並啟用自訂使用者區隔

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
gender 性別 string 選用
年齡 存在時間 int 選用
城市 城市 string 選用
country 國家/地區 string 選用
Lifecycle_state 客戶程序狀態:不明、新手上路、互動、流失等 string 選用
Loyalty_status_status 銀、金、白金、鑽石等 string 選用
最後購買日期 上次購買日期 (Unix 紀元時間戳記) int 選用
最後購買的產品 上次購買 / 消耗的產品 string 選用
上次聯絡日期 上次聯絡 / 參與的日期 (Unix 紀元時間戳記) int 選用
效期價值 客戶效期價值 int 選用
subscription_type [訂閱類型] 客戶擁有的子產品 / 訂閱類型,例如 deluxe、家庭方案 string 選用

自訂出價

根據第一方資料和 Google 資料最佳化 Display & Video 360 出價策略

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
gender 性別 string 選用
年齡 存在時間 int 選用
城市 城市 string 選用
country 國家/地區 string 選用
Lifecycle_state 客戶程序狀態:不明、新手上路、互動、流失等 string 選用
Loyalty_status_status 銀、金、白金、鑽石等 string 選用
最後購買日期 上次購買日期 (Unix 紀元時間戳記) int 選用
最後購買的產品 上次購買 / 消耗的產品 string 選用
上次聯絡日期 上次聯絡 / 參與的日期 (Unix 紀元時間戳記) int 選用
效期價值 客戶效期價值 int 選用
subscription_type [訂閱類型] 客戶擁有的子產品 / 訂閱類型,例如 deluxe、家庭方案 string 選用

跨發布商成效

按照發布商劃分,或按照發布商和第一方使用者區隔劃分,評估成效指標

欄位名稱 說明 類型 必填/選填
加入鍵 根據您使用的彙整金鑰進行變更 string 需要
gender 性別 string 選用
年齡 存在時間 int 選用
城市 城市 string 選用
country 國家/地區 string 選用
Lifecycle_state 客戶程序狀態:不明、新手上路、互動、流失等 string 選用
Loyalty_status_status 銀、金、白金、鑽石等 string 選用
最後購買日期 上次購買日期 (Unix 紀元時間戳記) int 選用
最後購買的產品 上次購買 / 消耗的產品 string 選用
上次聯絡日期 上次聯絡 / 參與的日期 (Unix 紀元時間戳記) int 選用
效期價值 客戶效期價值 int 選用
subscription_type [訂閱類型] 客戶擁有的子產品 / 訂閱類型,例如 deluxe、家庭方案 string 選用