總覽
UPDM (使用者提供的資料比對) 會將您針對使用者收集的第一方資料 (例如網站、應用程式或實體商店的資訊) 與使用者在 Google 廣告資料中相同的登入資料 (不含 Google Marketing Platform) 合併。為了讓使用者提供的資料比對功能,廣告事件必須連結至 Google 廣告資料中已登入的使用者。
相較於其他形式的目標客戶比對,使用者提供的資料比對功能有一些獨特的優勢。與使用者提供的資料相符:
- 比第三方資料更能展現產業變化
- 第三方 Cookie 即將淘汰,因此不會受到影響
- 可提供關聯性更高的客戶體驗,通常提升客戶參與度
- 提供更豐富的客戶深入分析
流程摘要
在您為帳戶啟用使用者提供的資料比對功能後,將會有兩個階段持續使用該功能:
資料來源和目的地專案
連線時,您必須使用兩項不同的 Google Cloud 專案:資料來源專案和目的地專案。
- 資料來源:這項專案包含您原始的廣告資料,且採用原始格式。
- 目的地:這是廣告資料中心寫入的 BigQuery 資料集。根據預設,這是管理員專案。如要將設定變更為其他 Google Cloud 專案,請參閱「設定服務帳戶」一文。
隱私權限制
收集客戶資料
使用使用者提供的資料比對時,您必須上傳第一方資料。這可能是從您的網站、應用程式、實體商店,或客戶直接與您分享的任何資訊收集而來。
資料大小
為保護使用者隱私,使用者提供的資料比對功能會強制執行以下資料大小規定:
- 您必須在使用者清單中上傳至少 1,000 筆記錄。
- 每次成功更新對照表時,都必須包含新相符的使用者數目下限。這個行為與差異檢查類似。
- 您的清單不得超過記錄上限。如要瞭解數據用量上限,請與您的 Google 代表聯絡。
啟用「連線」分頁
開始之前,請先設定您的廣告資料中心帳戶,以啟用「Connections」(連線)分頁,您要用來建立資料比對管道。進行上述步驟即可。
- 將 Google 代表寄給我們:
- 廣告資料中心帳戶 ID 會用來比對使用者提供的資料。
- 有權存取目的地專案的超級使用者電子郵件地址。
- 請向 Google 代表確認帳戶與超級使用者已加入許可清單。
在指定的 Google Cloud 專案中啟用 Ads Data Connector API。根據預設,這是您管理員專案。如要使用其他專案,請按照下列步驟將替代 Google Cloud 專案設為資料來源專案。您必須在以加入許可清單的超級使用者的身分登入時執行這些步驟。
- 前往 Cloud Console API 程式庫。
- 從清單中選取資料來源。
- 搜尋「Ads Data Connector API」如果 Ads Data Connector API 沒有顯示在搜尋結果中,可能表示已登入的 Google 帳戶不是加入許可清單的超級使用者。
- 在 API 頁面中,按一下 [ENABLE] (啟用)。
- 請向 Google 代表確認 API 已啟用。
Google 代表會傳送三個電子郵件地址,分別標示為「Datafusion」、「Dataproc」和「UPDM」服務帳戶。
「廣告資料中心」帳戶也會顯示新的「連線」部分,其中包含「您的第一方資料」和「資料比對」的分頁。 瞭解各個分頁標籤的用途。
將適當的權限授予服務帳戶。如需不同服務帳戶及其所需權限的說明,請在表格中選取資料來源:
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 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) {
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`;
加入鍵值
某些使用者提供資料的組合比其他組合更強大。以下列出各種使用者提供的資料組合,並按相對強度排序:
- 電子郵件、電話、地址 (最強)
- 電話、地址
- 電子郵件、地址
- 電子郵件、電話
- 地址
- 電話
- 電子郵件 (最弱)
建立對照表
- 按一下「Connections」(連線) >「Data matching」(資料比對) >「Create connection」(建立連線)。
- 選擇資料來源,然後按一下「連線」。如果出現驗證提示,請按一下「Next」(下一步)。
- 設定資料來源,然後點選「下一步」:
BigQuery
選取要匯入的 BigQuery 資料表。
Cloud Storage
輸入 gsutil 檔案路徑 (例如
gs://my-bucket/folder/
),然後選取檔案格式。Salesforce
即將推出
- 設定「destination」(目的地),然後點選「Next」(下一步):
- 請選取新的 BigQuery 資料集,做為資料的中介目的地。這個步驟可確保資料採用正確的格式,
- 選用:修改資料格式。轉換包括運算雜湊、小寫/大寫格式,以及合併/分割欄位。
- 按一下 [動作] > > Transform。
- 在彈出式面板中,按一下 [新增轉換] 或 [新增其他轉換]
- 從下拉式選單中選擇轉換類型,並輸入相關規定。
- 按一下「儲存」。
- 選擇至少一個加入鍵,以對應您要使用的欄位,然後點選「下一步」。
- 設定時間表:
- 為連線命名。
- 設定頻率,決定資料將匯入您在上一步選取的資料集的頻率。每次執行時都會覆寫 destination 資料表中的資料。
- 指定處理使用者 ID 衝突的方式。您可以選擇保留現有相符項目或覆寫新資料。
- 按一下「Finish」(完成)。
查看連線詳細資料
連線詳細資料頁面會針對特定連線最近執行和錯誤,提供相關資訊。如要查看特定連線的詳細資料,請按照下列步驟操作:
- 按一下「Connections」;「Data matching」。
- 按一下連線名稱即可查看詳細資料。
- 您現在可以查看連線的詳細資料和最近的執行作業。每種錯誤都會顯示兩種可能的錯誤:連線層級 (連線未執行) 和資料列層級錯誤 (資料列未匯入)。
- 「Failed」(失敗) 狀態表示整個連線無法執行 (例如服務帳戶權限問題)。按一下錯誤狀態,即可查看哪些錯誤影響連線。
- 「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 的資料欄後,連線會將資料加密,確保只有具備該權限的使用者,才能匯出或讀取您的第一方資料。
您可以使用「連線」從以下來源匯入資料:
- BigQuery
- Cloud Storage
- Salesforce (即將推出)
瞭解哪些評估第一方資料為評估或啟用用途並不容易,因此「Connections」提供完整的預先定義用途清單,會引導您瞭解擷取、轉換及載入資料的完整體驗。
第一方資料與資料比對之間的差異
設定使用者提供的對照表的工作流程,與透過 Connections 建立一般第一方數據連線相似。但是,雙專案要求假設您先設定連線,才能使用使用者提供的資料比對。如果您僅使用「連線」做為資料準備工具,則可以使用單一 Google Cloud 專案。
使用者提供資料比對的其他規定:
- 您必須使用電子郵件、電話、地址或任何組合做為合併鍵。
- 您必須說明 user_id 衝突的解決方式。您可以選擇保留現有比對,或使用新資料覆寫。
- 除了資料融合和 Dataproc 帳戶之外,您還必須使用 UPDM 服務帳戶。
您的第一方資料工作流程
建立連線
- 按一下「Connections」>「您的第一方資料」>「建立連線」。
- 連線至資料來源。系統會提示你進行驗證。
BigQuery
權限是根據您的 Google 帳戶而有所不同,因此無須額外進行驗證。確認 Connections 服務帳戶具備資料表的讀取權限。
Cloud Storage
權限是根據您的 Google 帳戶而有所不同,因此無須額外進行驗證。確認 Connections 服務帳戶具備儲存空間值區的讀取權限,
Salesforce
(即將推出)
使用貴機構的 Salesforce 憑證登入。 Google 不會儲存您的憑證,因此每個新的 Salesforce 連線都需要重新驗證。
- 選擇用途和加入鍵,然後按一下「Use Use」(選取用途)。如果不想選取用途,請按一下 [略過]。 你之後將無法選取用途。
- 設定資料來源。
BigQuery
選取要匯入的 BigQuery 資料表。
Cloud Storage
輸入 gsutil 檔案路徑 (例如
gs://my-bucket/folder/
),然後選取檔案格式。Salesforce
即將發布
- 設定目的地和對應欄位。
- 選取要寫入結果的 Google Cloud 專案、資料集和資料表。確認 Connections 服務帳戶具備您要寫入資料集的寫入權限。
- 每個連線都會建立新的資料表,以便寫入資料。如果您選取的現有資料表,系統會顯示錯誤訊息。
- 將目的地欄位 (也就是即將重新建立的資料表中顯示的欄位) 對應至來源資料中的來源欄位。
- 設定時間表。
- 為連線命名。
- 設定頻率,決定資料將匯入您在上一步選取的資料集的頻率。每次執行時都會覆寫 destination 資料表中的資料。
- 按一下 [完成]。處理大量資料的連線可能需要數個小時的執行。
查看連線詳細資料
連線詳細資料頁面會針對特定連線最近執行和錯誤,提供相關資訊。如要查看特定連線的詳細資料,請按照下列步驟操作:
- 按一下「Connections」圖示。[您的第一方資料]。
- 按一下連線名稱即可查看詳細資料。
- 您現在可以查看連線的詳細資料和最近的執行作業。每種錯誤都會顯示兩種可能的錯誤:連線層級 (連線未執行) 和資料列層級錯誤 (資料列未匯入)。
- 「Failed」(失敗) 狀態表示整個連線無法執行 (例如服務帳戶權限問題)。按一下錯誤狀態,即可查看哪些錯誤影響連線。
- 「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 | 選用 |