การจับคู่ข้อมูลที่ได้จากผู้ใช้

การจับคู่ข้อมูลที่ได้จากผู้ใช้ (UPDM) จะรวมข้อมูลจากบุคคลที่หนึ่งที่คุณได้รวบรวมไว้เกี่ยวกับผู้ใช้ เช่น ข้อมูลจากเว็บไซต์ แอป หรือกิจการที่มีหน้าร้านจริง เข้ากับกิจกรรมที่มีการลงชื่อเข้าใช้ของผู้ใช้รายเดียวกันในข้อมูลโฆษณา Google ทั้งหมด ซึ่งรวมถึงข้อมูลที่ Google เป็นเจ้าของและดำเนินการเอง ซึ่งรวมถึงข้อมูลที่ซื้อผ่านผลิตภัณฑ์ Google Marketing Platform (GMP) เช่น YouTube ที่ซื้อโดยใช้ Display & Video 360 ระบบไม่รองรับผลิตภัณฑ์ GMP อื่นๆ ที่ Google ไม่ได้เป็นเจ้าของและดำเนินการ

เหตุการณ์โฆษณาจะต้องลิงก์กับผู้ใช้ที่ลงชื่อเข้าใช้ในข้อมูลโฆษณา Google จึงจะมีสิทธิ์ในการจับคู่ข้อมูลที่ได้จากผู้ใช้

เอกสารนี้อธิบายฟีเจอร์การจับคู่ข้อมูลที่ผู้ใช้ให้ไว้ และให้คำแนะนำในการตั้งค่าและการใช้งาน

ภาพรวมการแข่งขันใน Private Cloud

การได้รับข้อมูลเชิงลึกด้านการโฆษณาที่มีคุณค่ามักต้องมีการรวมข้อมูล จากหลายแหล่ง การสร้างโซลูชันของคุณเองเพื่อแก้ปัญหาไปป์ไลน์ข้อมูลนี้ ต้องใช้เวลาและการลงทุนด้านวิศวกรรมอย่างมาก Private Cloud Match ใน Ads Data Hub ช่วยเพิ่มประสิทธิภาพกระบวนการนี้ด้วยการจัดหา เทมเพลตการค้นหา Ads Data Hub สำหรับสร้างตารางการจับคู่ใน BigQuery ซึ่ง สามารถใช้ในการค้นหา Ads Data Hub เพื่อจับคู่ข้อมูลโฆษณากับ ข้อมูลจากบุคคลที่หนึ่งได้ การเพิ่มข้อมูลจากบุคคลที่หนึ่งลงในคําค้นหาจะช่วยมอบประสบการณ์การใช้งานที่ดียิ่งขึ้นให้แก่ลูกค้า และทนทานต่อการเปลี่ยนแปลงการติดตามโฆษณาทั่วทั้งอุตสาหกรรมได้มากขึ้น

เนื่องจากการจับคู่ข้อมูลที่ได้จากผู้ใช้จะใช้งานได้เฉพาะกับพื้นที่โฆษณาที่ Google เป็นเจ้าของและดําเนินการเองสำหรับผู้ใช้ที่ลงชื่อเข้าใช้ จึงไม่ได้รับผลกระทบจากการเลิกใช้งานคุกกี้ของบุคคลที่สามที่จะมีผลในเร็วๆ นี้ เนื่องจากปรับข้อมูลเข้ากับการเปลี่ยนแปลงของอุตสาหกรรมได้ดีกว่าข้อมูลจากบุคคลที่สาม จึงให้ข้อมูลเชิงลึกที่ครบถ้วนยิ่งขึ้น ซึ่งอาจนำไปสู่การมีส่วนร่วมของลูกค้าที่สูงขึ้น

สรุปกระบวนการ

  1. การตั้งค่าการนำเข้าและการจับคู่ข้อมูล
  2. การนําเข้าและการจับคู่ข้อมูลจากบุคคลที่หนึ่ง
    • คุณจัดรูปแบบและอัปโหลดข้อมูลจากบุคคลที่หนึ่งไปยังชุดข้อมูล BigQuery
    • คุณเริ่มคําขอการจับคู่ข้อมูลโดยการสร้างการค้นหาการวิเคราะห์การจับคู่ Private Cloud และตั้งค่ากําหนดเวลา
    • Google จะรวมข้อมูลระหว่างโปรเจ็กต์กับข้อมูลที่ Google เป็นเจ้าของ ซึ่งมีรหัสผู้ใช้ของ Google และข้อมูลที่ได้จากผู้ใช้ที่แฮชแล้ว เพื่อสร้างและ อัปเดตตารางการจับคู่
    • ดูนําเข้าข้อมูลจากบุคคลที่หนึ่ง
  3. คำค้นหาที่ดำเนินการอย่างต่อเนื่องใน Ads Data Hub โดยอิงตามข้อมูลที่ตรงกัน
    • คุณเรียกใช้คำค้นหากับตารางการจับคู่ในลักษณะเดียวกับที่เรียกใช้คำค้นหาปกติใน Ads Data Hub ดูค้นหาข้อมูลที่ตรงกัน

ดูข้อมูลเกี่ยวกับข้อกำหนดด้านความเป็นส่วนตัว

การเก็บรวบรวมข้อมูลลูกค้า

เมื่อใช้การจับคู่ข้อมูลที่ได้จากผู้ใช้ คุณต้องอัปโหลดข้อมูลจากบุคคลที่หนึ่ง ซึ่งอาจเป็นข้อมูลที่คุณรวบรวมจากเว็บไซต์ แอป กิจการที่มีหน้าร้านจริง หรือข้อมูลใดๆ ที่ลูกค้าแชร์กับคุณโดยตรง

คุณต้องปฏิบัติดังนี้

  • นโยบายความเป็นส่วนตัวของคุณต้องเปิดเผยว่าคุณจะแชร์ข้อมูลลูกค้ากับ บุคคลที่สามเพื่อให้บริการในนามของคุณ และคุณได้รับ ความยินยอมในการแชร์ข้อมูลดังกล่าวตามที่กฎหมายกำหนดแล้ว
  • อัปโหลดข้อมูลลูกค้าโดยใช้ API หรืออินเทอร์เฟซที่ Google อนุมัติเท่านั้น
  • ปฏิบัติตามกฎหมายและข้อบังคับที่เกี่ยวข้องทั้งหมด รวมถึงหลักเกณฑ์ในการกำกับตนเองหรือหลักเกณฑ์ของอุตสาหกรรมที่อาจมีผลบังคับใช้

การรับทราบความยินยอมของบุคคลที่หนึ่ง

หากต้องการให้มั่นใจว่าคุณจะใช้ข้อมูลจากบุคคลที่หนึ่งใน Ads Data Hub ได้ คุณต้อง ยืนยันว่าคุณได้รับความยินยอมที่เหมาะสมในการแชร์ข้อมูลจากผู้ใช้ปลายทางใน EEA กับ Google ตามนโยบายความยินยอมของผู้ใช้ EU และนโยบาย Ads Data Hub ข้อกำหนดนี้มีผลกับบัญชี Ads Data Hub แต่ละบัญชี และต้องอัปเดตทุกครั้งที่คุณอัปโหลดข้อมูลจากบุคคลที่หนึ่งใหม่ ผู้ใช้คนใดคนหนึ่งสามารถรับทราบข้อความนี้ในนามของทั้งบัญชี

โปรดทราบว่ากฎการค้นหาบริการของ Google เดียวกันซึ่งใช้กับคําค้นหาการวิเคราะห์ จะมีผลกับคําค้นหา UPDM ด้วย เช่น คุณไม่สามารถเรียกใช้การค้นหาข้ามบริการในผู้ใช้ใน EEA เมื่อสร้างตารางการจับคู่

ดูวิธีรับทราบความยินยอมใน Ads Data Hub ได้ที่ข้อกำหนดด้านความยินยอม สำหรับเขตเศรษฐกิจยุโรป

ขนาดข้อมูล

การจับคู่ข้อมูลที่ได้จากผู้ใช้จะบังคับใช้ข้อกำหนดต่อไปนี้เกี่ยวกับขนาดของข้อมูลเพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ปลายทาง

  • คุณต้องอัปโหลดบันทึกอย่างน้อย 1,000 รายการในรายการผู้ใช้

ตั้งค่าการนำเข้าข้อมูล

ก่อนเริ่มต้น ให้ตรวจสอบสิ่งต่อไปนี้

  • ข้อมูลจากบุคคลที่หนึ่งต้องอยู่ใน BigQuery หากคุณมีขอบเขต VPC-SC ข้อมูลจากบุคคลที่หนึ่งนี้ต้องอยู่ใน VPC-SC
  • บัญชีบริการ Ads Data Hub ต้องมีสิทธิ์เข้าถึงแบบอ่านข้อมูลจากบุคคลที่หนึ่ง
  • ข้อมูลจากบุคคลที่หนึ่งต้องได้รับการจัดรูปแบบและแฮชอย่างถูกต้อง ดูรายละเอียดเพิ่มเติมได้ที่ส่วนถัดไป

นอกเหนือจากนั้น Private Cloud Match จะไม่มีการเริ่มต้นใช้งานเพิ่มเติม หากเรียกใช้คำค้นหาการวิเคราะห์ได้ คุณก็จะเรียกใช้คำค้นหาการจับคู่ Private Cloud ได้

ส่งและจับคู่ข้อมูลจากบุคคลที่หนึ่ง

จัดรูปแบบข้อมูลสำหรับอินพุต

ข้อมูลของคุณต้องเป็นไปตามข้อกำหนดการจัดรูปแบบต่อไปนี้จึงจะจับคู่ได้อย่างถูกต้อง

  • คุณต้องอัปโหลดโดยใช้การแฮช SHA256 ตามที่ระบุไว้ในคำอธิบายช่องป้อนข้อมูลต่อไปนี้
  • ต้องจัดรูปแบบช่องป้อนข้อมูลเป็นสตริง ตัวอย่างเช่น หากคุณใช้ฟังก์ชันแฮช SHA256 ของ BigQuery กับฟังก์ชันการเข้ารหัส Base64 (TO_BASE64) ให้ใช้การเปลี่ยนรูปแบบต่อไปนี้ TO_BASE64(SHA256(user_data))
  • UPDM รองรับการเข้ารหัส Base64 คุณต้องจัดรูปแบบการเข้ารหัสข้อมูลจากบุคคลที่หนึ่งให้สอดคล้องกับการถอดรหัสที่ใช้ในคําค้นหา Ads Data Hub หากเปลี่ยนการเข้ารหัสข้อมูล ฝั่งหนึ่ง คุณต้องอัปเดตคําค้นหา Ads Data Hub เพื่อถอดรหัสจากฐานเดียวกัน ตัวอย่างต่อไปนี้ใช้การเข้ารหัส Base64

User ID

  • ข้อความธรรมดา
  • การแฮช: ไม่มี

อีเมล

  • นําช่องว่างขึ้นต้นและต่อท้ายออก
  • อักขระทั้งหมดต้องเป็นตัวพิมพ์เล็ก
  • ใส่ชื่อโดเมนของอีเมลทั้งหมด เช่น gmail.com หรือ hotmail.co.jp
  • นำเครื่องหมายกำกับออก เช่น เปลี่ยน è, é, ê หรือ ë เป็น e
  • นำจุด (.) ที่อยู่ก่อนชื่อโดเมนในอีเมล gmail.com และ googlemail.com ออกทั้งหมด
  • การแฮช: SHA256 ที่เข้ารหัส Base64

ถูกต้อง: TO_BASE64(SHA256("jeffersonloveshiking@gmail.com"))

ไม่ถูกต้อง: TO_BASE64(SHA256(" Jéfferson.Lôves.Hiking@gmail.com "))

โทรศัพท์

  • ลบช่องว่าง
  • จัดรูปแบบในรูปแบบ E.164 - ตัวอย่างในสหรัฐอเมริกา: +14155552671, ตัวอย่างในสหราชอาณาจักร: +442071838750
  • นำสัญลักษณ์พิเศษทั้งหมดออก ยกเว้น "+" ที่อยู่ก่อนรหัสประเทศ
  • การแฮช: SHA256 ที่เข้ารหัส Base64

ถูกต้อง: TO_BASE64(SHA256("+18005550101"))

ไม่ถูกต้อง: TO_BASE64(SHA256("(800) 555-0101"))

ชื่อ

  • ลบช่องว่าง
  • อักขระทั้งหมดต้องเป็นตัวพิมพ์เล็ก
  • นำคำนำหน้าทั้งหมดออก เช่น นาง นาย Ms., ควายแดง
  • อย่านำเครื่องหมายเน้นเสียงออก เช่น è, é, ê หรือ ë
  • การแฮช: SHA256 ที่เข้ารหัส Base64

ถูกต้อง: TO_BASE64(SHA256("daní"))

ไม่ถูกต้อง: TO_BASE64(SHA256("Mrs. Daní"))

นามสกุล

  • ลบช่องว่าง
  • อักขระทั้งหมดต้องเป็นตัวพิมพ์เล็ก
  • นำคำต่อท้ายทั้งหมดออก เช่น Jr., Sr., 2nd, 3rd, II, III, PHD, MD
  • อย่านำเครื่องหมายเน้นเสียงออก เช่น è, é, ê หรือ ë
  • การแฮช: SHA256 ที่เข้ารหัส Base64

ถูกต้อง: 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. คลิกรายงาน > สร้างรายงาน > การสร้างตารางการจับคู่ในระบบคลาวด์ส่วนตัว > ใช้เทมเพลต ไม่บังคับ: คุณเลือกการสร้างตารางการจับคู่ในระบบคลาวด์ส่วนตัวด้วยการแฮช ได้หากยังไม่ได้แฮชข้อมูล

    // 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`
    );
    
  2. แทนที่ชื่อพารามิเตอร์ด้วยชื่อคอลัมน์เพื่อให้มีการแทนชื่อที่เหมาะสม

  3. คลิกตั้งค่ากำหนดการเพื่อตั้งค่าความถี่ที่ต้องการรีเฟรชตารางการจับคู่ การเรียกใช้แต่ละครั้งจะเขียนทับตารางการจับคู่ปัจจุบัน

ข้อมูลการค้นหาที่ตรงกัน

ค้นหาตารางการจับคู่

เมื่อตารางการจับคู่มีข้อมูลเพียงพอที่จะผ่านการตรวจสอบด้านความเป็นส่วนตัว คุณก็พร้อมที่จะเรียกใช้การค้นหาในตาราง

ตารางเดิมสำหรับข้อมูลจากบุคคลที่หนึ่ง (1PD) แสดงด้วย my_data ซึ่งรวมถึงทั้งข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) และข้อมูลที่ไม่ใช่ PII การใช้ตารางเดิมจะช่วยปรับปรุงรายงานด้วยข้อมูลเชิงลึกที่มากขึ้น เนื่องจากตารางดังกล่าว แสดงข้อมูล 1PD ทั้งหมดในขอบเขต เมื่อเทียบกับตารางที่ตรงกัน

ตารางแต่ละตารางในสคีมา Ads Data Hub ที่มีฟิลด์ user_id จะมีตารางการจับคู่ประกอบอยู่ด้วย เช่น สำหรับ adh.google_ads_impressions ตาราง Ads Data Hub จะสร้างตารางการจับคู่ ที่ชื่อ adh.google_ads_impressions_updm ซึ่งมีรหัสผู้ใช้ของคุณด้วย ระบบจะสร้างตารางการจับคู่แยกต่างหากสำหรับตารางเครือข่ายที่แยกตามนโยบาย ตัวอย่างเช่น สำหรับตาราง adh.google_ads_impressions_policy_isolated_network Ads Data Hub จะสร้างตารางการจับคู่ที่ชื่อ adh.google_ads_impressions_policy_isolated_network_updm ซึ่งมีรหัสผู้ใช้ของคุณด้วย

ตารางเหล่านี้มีชุดข้อมูลย่อยของผู้ใช้ที่มีอยู่ในตารางเดิม ซึ่งมีรายการที่ตรงกันใน user_id เช่น หากตารางต้นฉบับมีข้อมูลสำหรับผู้ใช้ ก. และผู้ใช้ ข. แต่มีเพียงผู้ใช้ ก. เท่านั้นที่ตรงกัน ผู้ใช้ ข. จะไม่อยู่ในตารางการจับคู่

ตารางการจับคู่มีคอลัมน์เพิ่มเติมที่ชื่อ customer_data_user_id ซึ่ง จัดเก็บตัวระบุผู้ใช้เป็นไบต์

คุณควรพิจารณาประเภทของฟิลด์เมื่อเขียนคําค้นหา โอเปอเรเตอร์การเปรียบเทียบ SQL คาดหวังว่าค่าตัวอักษรที่คุณเปรียบเทียบจะมีประเภทเดียวกัน คุณอาจต้องเข้ารหัสค่าในตารางก่อนที่จะจับคู่ข้อมูล ทั้งนี้ขึ้นอยู่กับวิธีจัดเก็บ user_id ในตารางข้อมูลจากบุคคลที่หนึ่ง คุณต้องส่งคีย์เข้าร่วมเป็นไบต์เพื่อให้การจับคู่สำเร็จ

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

นอกจากนี้ การเปรียบเทียบสตริงใน SQL ยังคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ด้วย ดังนั้นคุณ อาจต้องเข้ารหัสสตริงทั้ง 2 ด้านของการเปรียบเทียบเพื่อให้แน่ใจว่า เปรียบเทียบได้อย่างถูกต้อง

ตัวอย่างการค้นหา

นับผู้ใช้ที่ตรงกัน

คําค้นหานี้จะนับจํานวนผู้ใช้ที่ตรงกันในตารางการแสดงผล 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ฟิลด์พร้อมให้บริการตั้งแต่วันที่ 1 ตุลาคม 2024 คุณ ไม่สามารถใช้ช่องนี้เพื่อคำนวณอัตราการจับคู่ก่อนวันที่ดังกล่าว

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