Tính năng So khớp dữ liệu do người dùng cung cấp

Tính năng so khớp dữ liệu do người dùng cung cấp (UPDM) kết hợp dữ liệu của bên thứ nhất mà bạn đã thu thập được về một người dùng (chẳng hạn như thông tin trên các trang web, ứng dụng hoặc cửa hàng thực tế của bạn) với hoạt động đăng nhập của người dùng đó trên tất cả dữ liệu quảng cáo của Google, bao gồm cả dữ liệu do Google sở hữu và vận hành. Dữ liệu này bao gồm cả dữ liệu mua thông qua các sản phẩm của Google Marketing Platform (GMP), chẳng hạn như YouTube mua thông qua Display & Video 360. Các sản phẩm khác của GMP không thuộc quyền sở hữu và điều hành của Google sẽ không được hỗ trợ.

Để đủ điều kiện so khớp dữ liệu do người dùng cung cấp, sự kiện quảng cáo phải được liên kết với một người dùng đã đăng nhập trong dữ liệu quảng cáo của Google.

Tài liệu này mô tả tính năng so khớp dữ liệu do người dùng cung cấp, đồng thời hướng dẫn cách thiết lập và sử dụng tính năng này.

Tổng quan về tính năng So khớp đám mây riêng tư

Để có được thông tin chi tiết có giá trị về quảng cáo, bạn thường phải kết hợp dữ liệu từ nhiều nguồn. Việc xây dựng giải pháp riêng cho vấn đề về quy trình dữ liệu này đòi hỏi bạn phải đầu tư đáng kể thời gian và công sức kỹ thuật. Tính năng So khớp trên đám mây riêng tư trong Ads Data Hub giúp đơn giản hoá quy trình này bằng cách cung cấp một mẫu truy vấn Ads Data Hub để tạo bảng so khớp trong BigQuery. Sau đó, bạn có thể sử dụng bảng này trong các truy vấn Ads Data Hub để so khớp dữ liệu quảng cáo với dữ liệu của bên thứ nhất. Việc bổ sung dữ liệu của bên thứ nhất vào các truy vấn có thể mang lại trải nghiệm khách hàng phong phú hơn và có khả năng chống chịu tốt hơn trước những thay đổi về hoạt động theo dõi quảng cáo trên toàn ngành.

Vì tính năng so khớp dữ liệu do người dùng cung cấp chỉ có trên khoảng không quảng cáo do Google sở hữu và điều hành, dành cho người dùng đã đăng nhập, nên tính năng này không bị ảnh hưởng bởi việc ngừng sử dụng cookie của bên thứ ba trong thời gian tới. Vì dữ liệu của bên thứ nhất thích ứng với những thay đổi của ngành tốt hơn so với dữ liệu của bên thứ ba, nên dữ liệu này có thể cung cấp thông tin chi tiết phong phú hơn, từ đó giúp tăng mức độ tương tác của khách hàng.

Tóm tắt quy trình

  1. Thiết lập tính năng nhập và so khớp dữ liệu
  2. Nhập và so khớp dữ liệu của bên thứ nhất
    • Bạn định dạng và tải dữ liệu của bên thứ nhất lên tập dữ liệu BigQuery.
    • Bạn bắt đầu yêu cầu so khớp dữ liệu bằng cách tạo một Truy vấn phân tích Private Cloud Match và đặt lịch biểu.
    • Google kết hợp dữ liệu giữa dự án của bạn và dữ liệu do Google sở hữu, trong đó có mã nhận dạng người dùng của Google và dữ liệu do người dùng cung cấp đã băm để tạo và cập nhật bảng so khớp.
    • Xem bài viết Nhập dữ liệu của bên thứ nhất
  3. Các truy vấn đang diễn ra trong Ads Data Hub, dựa trên dữ liệu đã so khớp
    • Bạn chạy truy vấn đối với bảng so khớp theo cách tương tự như khi chạy truy vấn thông thường trong Ads Data Hub. Xem phần Truy vấn dữ liệu trùng khớp.

Tìm hiểu về các yêu cầu về quyền riêng tư

Thu thập dữ liệu khách hàng

Khi sử dụng tính năng so khớp dữ liệu do người dùng cung cấp, bạn phải tải dữ liệu của bên thứ nhất lên. Đây có thể là thông tin bạn thu thập được từ các trang web, ứng dụng, cửa hàng thực tế của mình hoặc bất kỳ thông tin nào mà khách hàng trực tiếp chia sẻ với bạn.

Bạn phải:

  • Đảm bảo rằng chính sách quyền riêng tư của bạn nêu rõ rằng bạn chia sẻ dữ liệu khách hàng với bên thứ ba để họ thay mặt bạn thực hiện các dịch vụ, và bạn nhận được sự đồng ý cho việc chia sẻ đó theo yêu cầu pháp lý
  • Chỉ sử dụng API hoặc giao diện được phê duyệt của Google để tải dữ liệu khách hàng lên
  • Tuân thủ tất cả các luật và quy định hiện hành, bao gồm cả mọi bộ luật tự quản lý hay bộ luật ngành có thể áp dụng

Xác nhận sự đồng ý của bên thứ nhất

Để đảm bảo bạn có thể sử dụng dữ liệu của bên thứ nhất trong Ads Data Hub, bạn phải xác nhận rằng bạn đã nhận được sự đồng ý thích hợp để chia sẻ dữ liệu được chia sẻ của người dùng cuối ở Khu vực kinh tế Châu Âu (EEA) với Google theo Chính sách về sự đồng ý của người dùng ở Liên minh Châu Âu và Chính sách về Ads Data Hub. Yêu cầu này áp dụng cho từng tài khoản Ads Data Hub và bạn phải cập nhật mỗi khi tải dữ liệu mới của bên thứ nhất lên. Bất kỳ người dùng nào cũng có thể thay mặt cho toàn bộ tài khoản để xác nhận.

Xin lưu ý rằng các quy tắc truy vấn của dịch vụ Google áp dụng cho truy vấn phân tích cũng áp dụng cho truy vấn UPDM. Ví dụ: bạn không thể chạy truy vấn trên nhiều dịch vụ đối với người dùng ở EEA khi tạo bảng đối sánh.

Để tìm hiểu cách xác nhận sự đồng ý trong Ads Data Hub, hãy xem bài viết Yêu cầu về sự đồng ý đối với Khu vực kinh tế Châu Âu.

Kích thước dữ liệu

Để bảo vệ quyền riêng tư của người dùng cuối, tính năng so khớp dữ liệu do người dùng cung cấp sẽ thực thi các yêu cầu sau đây về kích thước dữ liệu:

  • Bạn phải tải lên ít nhất 1.000 bản ghi trong danh sách người dùng của mình.

Thiết lập quy trình nhập dữ liệu

Trước khi bắt đầu, hãy đảm bảo rằng:

  • Dữ liệu của bên thứ nhất phải nằm trong BigQuery. Nếu bạn có một vành đai VPC-SC, thì dữ liệu của bên thứ nhất này phải nằm trong VPC-SC của bạn.
  • Tài khoản dịch vụ Ads Data Hub của bạn phải có quyền đọc đối với dữ liệu của bên thứ nhất.
  • Dữ liệu của bên thứ nhất phải được định dạng và băm chính xác. Hãy xem phần tiếp theo để biết thêm chi tiết.

Ngoài ra, Private Cloud Match không có quy trình làm quen nào khác. Nếu có thể chạy một truy vấn phân tích, thì bạn có thể chạy một truy vấn Private Cloud Match.

Nhập và so khớp dữ liệu của bên thứ nhất

Quyền đối với nguồn và yêu cầu về kết nối

Tính năng Kết nối Ads Data Hub sử dụng tài khoản dịch vụ xuất hiện trong phần Cài đặt > Chi tiết > Tài khoản dịch vụ (thường là service-<number>@gcp-sa-adsdatahub.iam.gserviceaccount.com). Hãy cấp cho tài khoản dịch vụ này các vai trò sau:

  • Nguồn BigQuery: roles/bigquery.dataViewer (Chế độ xem dữ liệu BigQuery) trên tập dữ liệu hoặc bảng nguồn.
  • Nguồn Cloud Storage: roles/storage.objectViewer (Storage Object Viewer) trên bộ chứa hoặc đối tượng nguồn.
  • Đích đến nhập dữ liệu của bên thứ nhất: roles/bigquery.dataEditor (Trình chỉnh sửa dữ liệu BigQuery) trên tập dữ liệu đích, nếu bảng không nằm trong tập dữ liệu mặc định của bạn.

Yêu cầu về trường và loại dữ liệu

  1. Tính năng So khớp dữ liệu do người dùng cung cấp (UPDM):
    • Liên kết user_id và ít nhất một trường thông tin nhận dạng cá nhân (PII) (email, phone hoặc địa chỉ đầy đủ: first_name, last_name, country, zip_code).
    • user_id, country và zip_code: STRING dạng văn bản thuần tuý (không băm). Đối với nguồn BigQuery, các cột này phải là STRING; các loại khác (ví dụ: INT64) sẽ không thành công khi kết nối được tạo. Connections truyền user_id đến BYTES trong bảng so khớp. country phải là mã gồm 2 chữ cái theo chuẩn ISO 3166-1 alpha-2.
    • email, phone, first_name và last_name: HASH – phải được băm bằng thuật toán SHA-256 và mã hoá bằng Base64 (giá trị SHA-256 thập lục phân gồm 64 ký tự cũng được chấp nhận). Connections không băm dữ liệu. Giá trị văn bản thuần tuý không được ghi lại khi kết nối được tạo; sau đó, mọi lần chạy đều không thành công với ... must be encoded using TO_BASE64(SHA256(...)).
    • Các kết nối so khớp dữ liệu do người dùng cung cấp không có bảng đích. Tất cả các truy vấn trong một tài khoản và truy vấn UPDM được chạy thủ công đều ghi vào cùng một dữ liệu trùng khớp, vì vậy, mỗi lần chạy sẽ thay thế lần chạy trước đó. Mỗi tài khoản chỉ cần một kết nối UPDM.
    • Hãy xem bài viết Định dạng dữ liệu để nhập để biết các quy tắc cho từng trường.
  2. Nhập dữ liệu của bên thứ nhất:
    • Chỉ sử dụng các loại dữ liệu được cung cấp trong giao diện người dùng: INTEGER, STRING, HASH, DOUBLE, DATE và TIMESTAMP. Các loại BigQuery khác không được hỗ trợ.
    • Nguồn BigQuery: Loại được liên kết không được áp dụng; mỗi cột đích giữ nguyên loại của cột nguồn.
    • Nguồn Cloud Storage: Các cột được đọc dưới dạng STRING và truyền đến loại được liên kết. Các giá trị không thể truyền sẽ trở thành NULL mà không làm hỏng quá trình chạy.
    • Mỗi lần chạy sẽ thay thế toàn bộ bảng đích chứ không thêm vào. Nếu nguồn không có hàng nào, thì đích đến sẽ trống. Đừng sử dụng bảng nguồn hoặc bảng có dữ liệu mà bạn cần giữ lại làm đích đến.

Yêu cầu về cột CSV của Cloud Storage

  • Thêm một hàng tiêu đề. Dòng đầu tiên bị bỏ qua; tên cột của dòng này không được sử dụng.
  • Tệp phải chứa chính xác các cột nguồn được liên kết, không nhiều hơn và không ít hơn. Các cột thừa sẽ khiến quá trình chạy không thành công.
  • Nhập dữ liệu của bên thứ nhất: Các cột phải theo cùng thứ tự với các mối liên kết trường.
  • So khớp dữ liệu do người dùng cung cấp: Các cột phải theo thứ tự này, chỉ giữ lại những trường mà bạn liên kết: user_id, email, phone, first_name, last_name, country, zip_code. Thứ tự của các hàng liên kết không quan trọng.
  • Không phát hiện được thứ tự cột khác: các giá trị tải vào trường không chính xác (hoặc tỷ lệ khớp giảm) mà không có lỗi.

Các nguồn dữ liệu được hỗ trợ và giới hạn kết nối

  • Nguồn dữ liệu: Chỉ hỗ trợ các nguồn BigQuery và Cloud Storage.
  • Tên bảng BigQuery: Bảng BigQuery nguồn và đích cần có tên project.dataset.table đầy đủ.
  • Đường dẫn tệp Cloud Storage: Cung cấp một URI tệp (chẳng hạn như gs://bucket/path/file.csv). Đường dẫn ký tự đại diện có * hoặc ? không được hỗ trợ.
  • Tên kết nối: Mỗi kết nối trong một tài khoản phải có tên riêng biệt.

Định dạng dữ liệu để nhập

Dữ liệu của bạn phải tuân thủ các yêu cầu về định dạng sau đây để được so khớp chính xác:

  • Như được chỉ định trong nội dung mô tả trường nhập dữ liệu sau đây, bạn phải tải lên bằng cách băm SHA256.
  • UPDM hỗ trợ phương thức mã hoá Base64. Xem TO_BASE64.
  • Các trường nhập dữ liệu phải được định dạng dưới dạng chuỗi. Ví dụ: nếu bạn đang sử dụng hàm băm SHA256 của BigQuery, hãy sử dụng phép biến đổi sau: TO_BASE64(SHA256(user_data)).

User ID

  • Loại dữ liệu: BYTES
  • Băm: Không có

Email

  • Xoá khoảng trắng ở đầu và cuối
  • Chữ thường tất cả ký tự
  • Cung cấp tên miền của tất cả các địa chỉ email (như gmail.com hoặc hotmail.co.jp)
  • Xoá dấu, ví dụ: thay đổi è, é, ê hoặc ë thành e
  • Xoá tất cả dấu chấm (.) đứng trước tên miền trong địa chỉ email gmail.com và googlemail.com
  • Băm: SHA256 được mã hoá theo Base64

Có hiệu lực: TO_BASE64(SHA256("jeffersonloveshiking@gmail.com"))

Không hợp lệ: TO_BASE64(SHA256("JéffersonLôvesHiking@gmail.com"))

Điện thoại

  • Xoá khoảng trắng
  • Định dạng theo chuẩn E.164, ví dụ: +14155552671 (Hoa Kỳ), +442071838750 (Vương quốc Anh)
  • Xoá tất cả ký tự đặc biệt, ngoại trừ dấu "+" trước mã quốc gia
  • Băm: SHA256 được mã hoá theo Base64

Có hiệu lực: TO_BASE64(SHA256("+18005550101"))

Không hợp lệ: TO_BASE64(SHA256("(800) 555-0101"))

Tên

  • Xoá khoảng trắng
  • Chữ thường tất cả ký tự
  • Xoá tất cả tiền tố, ví dụ: Bà, Ông, Cô, Tiến sĩ
  • Đừng xoá dấu, ví dụ: è, é, ê hoặc ë
  • Băm: SHA256 được mã hoá theo Base64

Có hiệu lực: TO_BASE64(SHA256("daní"))

Không hợp lệ: TO_BASE64(SHA256("Daní"))

Họ

  • Xoá khoảng trắng
  • Chữ thường tất cả ký tự
  • Xoá tất cả hậu tố, ví dụ: Jr., Sr., 2nd, 3rd, II, III, PHD, MD
  • Đừng xoá dấu, ví dụ: è, é, ê hoặc ë
  • Băm: SHA256 được mã hoá theo Base64

Có hiệu lực: TO_BASE64(SHA256("délacruz"))

Không hợp lệ: TO_BASE64(SHA256("dé la Cruz, Jr."))

Quốc gia

  • Cung cấp mã quốc gia ngay cả khi tất cả dữ liệu khách hàng của bạn đến từ cùng một quốc gia
  • Không băm dữ liệu quốc gia
  • Sử dụng mã quốc gia ISO 3166-1 alpha-2
  • Băm: Không có

Có hiệu lực: US

Không hợp lệ: United States of America hoặc USA

Mã vùng

  • Không băm dữ liệu mã ZIP
  • Có thể sử dụng cả mã bưu chính của Mỹ và mã bưu chính quốc tế
  • Đối với Hoa Kỳ:
    • Có thể sử dụng mã 5 chữ số, ví dụ: 94043
    • Bạn cũng có thể sử dụng mã bưu chính gồm 5 chữ số kèm theo 4 số mở rộng phía sau, ví dụ: 94043-1351 hoặc 940431351
  • Đối với tất cả các quốc gia khác:
    • Không cần định dạng (Không cần viết thường hoặc xoá dấu cách và ký tự đặc biệt)
    • Bỏ phần mở rộng mã bưu chính
  • Băm: Không có

Xác thực hàm băm và mã hoá dữ liệu

Bạn có thể sử dụng các tập lệnh xác thực hàm băm sau đây để đảm bảo dữ liệu của bạn được định dạng chính xác.

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

Khóa kết hợp

Một số kiểu kết hợp dữ liệu do người dùng cung cấp sẽ hiệu quả hơn những kiểu khác. Sau đây là danh sách các kiểu kết hợp dữ liệu do người dùng cung cấp, được xếp hạng theo mức độ hiệu quả tương đối. Nếu sử dụng địa chỉ, bạn phải cung cấp: Tên, Họ, Quốc gia và Mã bưu chính.

  1. Email, số điện thoại, địa chỉ (mạnh nhất)
  2. Số điện thoại, địa chỉ
  3. Email, địa chỉ
  4. Email, điện thoại
  5. Địa chỉ
  6. Điện thoại
  7. Email (yếu nhất)

Tạo bảng so khớp

  1. Nhấp vào add Tạo > Truy vấn.
  2. Sao chép mẫu truy vấn Tạo bảng so khớp đám mây riêng tư rồi dán vào trình chỉnh sửa truy vấn. Không bắt buộc: Bạn có thể sử dụng mẫu Tạo bảng so khớp trên đám mây riêng tư (có băm) nếu dữ liệu của bạn chưa được băm.

    /* Private cloud match table generation
    Create a new match table using your first party data with this template.
    
    Parameters:
    Manually remove all the parameters tagged with @ prefix and replace them
    with column names from your first party table:
    *   @user_id
    *   @email
    *   @phone
    *   @first_name
    *   @last_name
    *   @country_code
    *   @postal_code
    
    And your BigQuery table information:
    *   @my_project: Your BigQuery project where the first party table is.
    *   @my_dataset: Your dataset where the first party table is.
    *   @my_first_party_table: Your first party table.
    */
    
    CREATE OR REPLACE TABLE adh.updm_match_table AS (
    SELECT CAST(@user_id AS BYTES) AS user_id,
          @email AS email,
          @phone AS phone,
          @first_name AS first_name,
          @last_name AS last_name,
          @country_code AS country,
          @postal_code AS zip_code
    FROM `@my_project.@my_dataset.@my_first_party_table`
    );
    
    /* Private cloud match table generation (with hashing)
    Create a new match table using your first party data with this template.
    
    Parameters:
    Manually remove all the parameters tagged with @ prefix and replace them
    with column names from your first party table:
    *   @user_id
    *   @email
    *   @phone
    *   @first_name
    *   @last_name
    *   @country_code
    *   @postal_code
    
    And your BigQuery table information:
    *   @my_project : Your BigQuery project where the first party table is.
    *   @my_dataset : Your dataset where the first party table is.
    *   @my_first_party_table : Your first party table.
    */
    
    CREATE OR REPLACE TABLE adh.updm_match_table AS (
    SELECT CAST(@user_id AS BYTES) AS user_id,
          TO_BASE64(SHA256(LOWER(@email))) AS email,
          TO_BASE64(SHA256(@phone)) AS phone,
          TO_BASE64(SHA256(LOWER(@first_name))) AS first_name,
          TO_BASE64(SHA256(LOWER(@last_name))) AS last_name,
          @country_code AS country,
          @postal_code AS zip_code
    FROM `@my_project.@my_dataset.@my_first_party_table`
    );
    
  3. Thay thế tên tham số bằng tên cột của bạn để cung cấp bí danh thích hợp.

  4. Nhấp vào Lưu

  5. Nhấp vào Chạy. Bạn cần chạy truy vấn này theo cách thủ công để làm mới bảng so khớp. Mỗi lần chạy sẽ ghi đè bảng đối sánh hiện tại.

Di chuyển các kết nối hiện có

Các mối kết nối hiện có trong thẻ Kết nối sẽ được chuyển sang một phiên bản mới của trang Kết nối được tích hợp ngay trong Ads Data Hub. Các kết nối đã cập nhật sẽ đọc nguồn và ghi đích bằng tài khoản dịch vụ hiển thị trong phần Cài đặt > Chi tiết > Tài khoản dịch vụ (thường là service-<number>@gcp-sa-adsdatahub.iam.gserviceaccount.com) thay vì các tài khoản dịch vụ Data Fusion, Dataproc và UPDM cũ.

Hoàn tất các mục hành động này trước khi các kết nối của bạn được di chuyển:

  1. Cấp quyền cho tài khoản dịch vụ: Cấp cho tài khoản dịch vụ xuất hiện trong phần Cài đặt > Chi tiết > Tài khoản dịch vụ (thường là service-<number>@gcp-sa-adsdatahub.iam.gserviceaccount.com) vai trò nguồn và đích cần thiết (roles/bigquery.dataViewer, roles/storage.objectViewer và roles/bigquery.dataEditor trên các tập dữ liệu đích không mặc định). Các kết nối có nguồn không đọc được, đã bị xoá hoặc đã thay đổi vẫn có thể được di chuyển (đặc biệt là các nguồn trên Cloud Storage, không được xác thực tại thời điểm di chuyển), nhưng các lần chạy sẽ không thành công cho đến khi bạn cấp quyền truy cập hoặc sửa nguồn.
  2. Chuyển đổi các mối kết nối không được hỗ trợ: Những mối kết nối có cấu hình sau đây sẽ không được di chuyển. Chuyển đổi các kết nối này thành kết nối BigQuery hoặc Cloud Storage được hỗ trợ:
    • Các nguồn dữ liệu khác (Amazon S3, Snowflake, MySQL, PostgreSQL, Amazon Redshift, sFTP hoặc Salesforce): Trước tiên, hãy đưa dữ liệu vào BigQuery hoặc Cloud Storage, sau đó tạo một mối kết nối với BigQuery hoặc Cloud Storage.
    • Mối liên kết trường hoặc loại dữ liệu không được hỗ trợ: Cập nhật hoặc tạo lại mối kết nối để đáp ứng các yêu cầu về trường và loại dữ liệu.
    • Đường dẫn ký tự đại diện của Cloud Storage (* hoặc ?): Thay thế URI ký tự đại diện bằng một URI tệp duy nhất hoặc tải các tệp vào BigQuery trước.
    • Tên kết nối trùng lặp: Đổi tên hoặc xoá các kết nối trùng lặp để mỗi kết nối trong tài khoản đều có tên riêng biệt.
  3. Xoá các kết nối không dùng đến: Xoá các kết nối lỗi thời mà bạn không còn cần đến.

Dữ liệu khớp với cụm từ tìm kiếm

Truy vấn bảng so khớp

Khi bảng so khớp của bạn chứa đủ dữ liệu để đáp ứng các bước kiểm tra quyền riêng tư, bạn có thể chạy truy vấn đối với các bảng đó.

Bảng ban đầu cho dữ liệu của bên thứ nhất (1PD) được biểu thị bằng my_data. Dữ liệu này bao gồm cả Thông tin nhận dạng cá nhân (PII) và thông tin không nhận dạng cá nhân. Việc sử dụng bảng gốc có thể cải thiện báo cáo của bạn bằng cách cung cấp thêm thông tin chi tiết, vì bảng này thể hiện tất cả dữ liệu của bên thứ nhất trong phạm vi, khi so sánh với bảng so khớp.

Mỗi bảng trong giản đồ Ads Data Hub chứa trường user_id đều đi kèm với một bảng so khớp. Ví dụ: đối với bảng adh.google_ads_impressions, Ads Data Hub cũng tạo một bảng so khớp có tên là adh.google_ads_impressions_updm chứa mã nhận dạng người dùng của bạn. Các bảng so khớp riêng biệt được tạo cho các bảng mạng tách biệt theo chính sách. Ví dụ: đối với bảng adh.google_ads_impressions_policy_isolated_network, Ads Data Hub cũng tạo một bảng so khớp có tên là adh.google_ads_impressions_policy_isolated_network_updm chứa mã nhận dạng người dùng của bạn.

Các bảng này chứa một nhóm nhỏ người dùng có trong bảng gốc, trong đó có một kết quả khớp trên user_id. Ví dụ: nếu bảng ban đầu chứa dữ liệu cho Người dùng A và Người dùng B, nhưng chỉ Người dùng A được so khớp, thì Người dùng B sẽ không có trong bảng so khớp.

Bảng so khớp chứa một cột bổ sung có tên là customer_data_user_id, lưu trữ giá trị nhận dạng người dùng dưới dạng BYTES.

Bạn cần xem xét loại trường khi viết truy vấn. Toán tử so sánh SQL yêu cầu các giá trị cố định mà bạn đang so sánh phải có cùng loại. Tuỳ thuộc vào cách lưu trữ user_id trong bảng dữ liệu của bên thứ nhất, bạn có thể cần mã hoá các giá trị trong bảng trước khi so khớp dữ liệu. Bạn cần truyền khoá kết hợp vào BYTES để so khớp thành công:

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

Ngoài ra, các phép so sánh chuỗi trong SQL có phân biệt chữ hoa chữ thường, vì vậy, bạn có thể cần mã hoá chuỗi ở cả hai bên của phép so sánh để đảm bảo rằng chúng có thể được so sánh chính xác.

Truy vấn mẫu

Đếm số người dùng trùng khớp

Truy vấn này đếm số người dùng trùng khớp trong bảng lượt hiển thị quảng cáo của Google Ads.

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

SELECT COUNT(DISTINCT user_id)
FROM adh.google_ads_impressions_updm

Tính tỷ lệ khớp

Không phải người dùng nào cũng đủ điều kiện để so khớp. Ví dụ: người dùng đã đăng xuất, trẻ em và người dùng không đồng ý sẽ không được so khớp thông qua UPDM. Bạn có thể sử dụng trường is_updm_eligible để tính tỷ lệ khớp chính xác hơn cho UPDM. Xin lưu ý rằng trường is_updm_eligible bắt đầu được cung cấp từ ngày 1 tháng 10 năm 2024. Bạn không thể sử dụng trường này để tính tỷ lệ khớp trước ngày đó.

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

Kết hợp dữ liệu của bên thứ nhất và dữ liệu Google Ads

Truy vấn này cho biết cách kết hợp dữ liệu của bên thứ nhất với dữ liệu 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

Câu hỏi thường gặp về UPDM

Để xem danh sách câu hỏi thường gặp liên quan đến UPDM, hãy xem phần Câu hỏi thường gặp về UPDM.