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ề thẻ Kết nối

Để 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. Trang Kết nối trong Ads Data Hub giúp đơn giản hoá quy trình này bằng cách cung cấp giao diện hướng dẫn từng bước để nhập, chuyển đổi và so khớp dữ liệu quảng cáo của bạn trong BigQuery, nhờ đó, bạn có thể sử dụng dữ liệu đó trong các truy vấn của Ads Data Hub hoặc bất kỳ sản phẩm nào khác đọc dữ liệu từ BigQuery. 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ề tính năng theo dõi quảng cáo trên toàn ngành.

Trang Kết nối được tích hợp các công cụ cho phép bạn mã hoá và chia sẻ thông tin nhận dạng cá nhân (PII) với các đối tác theo cách chú trọng đến quyền riêng tư. Sau khi chọn những cột chứa thông tin nhận dạng cá nhân, Ads Data Hub sẽ mã hoá dữ liệu, đảm bảo rằng chỉ những người có quyền mới có thể xuất hoặc đọc dữ liệu của bên thứ nhất. Việc xác định dữ liệu của bên thứ nhất cần thiết cho trường hợp sử dụng đo lường hoặc kích hoạt có thể gặp khó khăn, vì vậy, Ads Data Hub cung cấp một danh sách đầy đủ các trường hợp sử dụng được xác định trước, sau đó hướng dẫn bạn thực hiện toàn bộ quy trình trích xuất, chuyển đổi và tải dữ liệu. Mặc dù bạn có thể tạo nhiều loại kết nối, nhưng tài liệu này giả định rằng bạn đang sử dụng trang Kết nối để so khớp dữ liệu do người dùng cung cấp.

Các nguồn dữ liệu của bên thứ nhất được hỗ trợ

Bạn có thể nhập dữ liệu từ các nguồn dữ liệu sau:

  • BigQuery
  • Cloud Storage
  • Giao thức truyền tệp bảo mật (sFTP)
  • Bông tuyết
  • MySQL
  • PostgreSQL
  • Amazon Redshift
  • Amazon S3

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 hiểu thuật ngữ

  • Kết nối dữ liệu do người dùng cung cấp: Thiết lập kết nối dữ liệu do người dùng cung cấp để nhập và so khớp dữ liệu, lên lịch nhập dữ liệu, chuyển đổi dữ liệu và so khớp dữ liệu quảng cáo bằng mã nhận dạng người dùng. 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. Cần có nhiều dự án trên Google Cloud.
  • Kết nối dữ liệu của bên thứ nhất: Thiết lập kết nối dữ liệu của bên thứ nhất làm công cụ chuẩn bị dữ liệu, để lên lịch nhập dữ liệu và biến đổi dữ liệu mà không cần các tính năng nâng cao của UPDM. Loại kết nối này chỉ yêu cầu một dự án trên Google Cloud.
  • Nguồn dữ liệu: Một sản phẩm được kết nối, tệp được nhập hoặc dịch vụ tích hợp với bên thứ ba (ví dụ như BigQuery).
  • Đích đến: Một trường hợp sử dụng; thường là một sản phẩm hoặc tính năng sản phẩm của Google đã kích hoạt dữ liệu được nhập (ví dụ: tính năng so khớp dữ liệu do người dùng cung cấp của Ads Data Hub).
  • Dự án quản trị: Dự án trên đám mây của Google chứa dữ liệu quảng cáo độc quyền của bạn ở định dạng thô.
  • Tập dữ liệu đầu ra: Tập dữ liệu BigQuery mà Ads Data Hub ghi vào. Theo mặc định, đây là một tập dữ liệu trong dự án quản trị của bạn. Để thay đổi thành một dự án khác trên Google Cloud, hãy xem bài viết Định cấu hình tài khoản dịch vụ.

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. Để thiết lập đơn giản nhất, hãy sử dụng dự án quản trị của bạn. Tuy nhiên, bạn có thể sử dụng bất kỳ tập dữ liệu BigQuery nào mà bạn sở hữu.
    • Bạn bắt đầu yêu cầu so khớp dữ liệu bằng cách tạo một kết nối 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.
  • Mỗi lần cập nhật thành công bảng so khớp phải bao gồm số lượng người dùng mới được so khớp tối thiểu. Hành vi này tương tự như quy trình kiểm tra sự khác biệt.
  • Danh sách của bạn không được vượt quá số lượng bản ghi tối đa. Để tìm hiểu về hạn mức dữ liệu tối đa, hãy liên hệ với người đại diện của Google.

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

Trước khi bắt đầu, bạn cần định cấu hình tài khoản Ads Data Hub để tạo các mối kết nối dữ liệu. Đây là cách bạn sẽ thiết lập quy trình so khớp dữ liệu. Bạn chỉ cần thực hiện các bước này một lần.

Trên trang Kết nối, hãy nhấp vào Bắt đầu thiết lập để mở trình hướng dẫn thiết lập tài khoản ở giai đoạn bật UPDM.

Chuyển đến phần Kết nối

Những quyền nào được cấp cho BigQuery và Cloud Storage?

Nếu bạn thiết lập tính năng UPDM để sử dụng với BigQuery hoặc Cloud Storage, hãy tham khảo tài liệu này để nắm được các quyền được cấp cho tài khoản dịch vụ Ads Data Hub.

BigQuery

Tài khoản dịch vụ Datafusion
Mục đích Tài khoản dịch vụ Data Fusion được dùng để hiển thị một danh sách các trường nguồn trong Giao diện người dùng Ads Data Hub.
Định dạng service-some-number@gcp-sa-datafusion.iam.gserviceaccount.com
Quyền truy cập cần phải có
BigQuery Data Viewer
roles/bigquery.dataViewer
cho các tập dữ liệu cụ thể trong dự án Nguồn dữ liệu và Đích đến
Storage Admin
roles/storage.admin
cho dự án Nguồn dữ liệu hoặc một bộ chứa lưu trữ chuyên dụng
Tài khoản dịch vụ Dataproc
Mục đích Tài khoản dịch vụ Dataproc chịu trách nhiệm chạy các quy trình dữ liệu ở chế độ nền.
Định dạng some-number-compute@developer.gserviceaccount.com
Quyền truy cập cần phải có
BigQuery Data Viewer
roles/bigquery.dataViewer
cho các tập dữ liệu cụ thể trong dự án Nguồn dữ liệu và Đích đến
BigQuery Data Editor
roles/bigquery.dataEditor
cho các tập dữ liệu cụ thể trong dự án Đích đến
BigQuery Job User
roles/bigquery.jobUser
cho cả dự án Nguồn dữ liệu và Đích đến
Storage Admin
roles/storage.admin
cho cả dự án Nguồn dữ liệu và Đích đến, hoặc một bộ chứa lưu trữ chuyên dụng
Tài khoản dịch vụ UPDM
Mục đích Tài khoản dịch vụ UPDM được dùng để chạy công việc so khớp.
Định dạng service-some-number@gcp-sa-adsdataconnector.iam.gserviceaccount.com
Quyền truy cập cần phải có
BigQuery Data Viewer
roles/bigquery.dataViewer
cho dự án Đích
BigQuery Job User
roles/bigquery.jobUser
cho dự án Đích

Cloud Storage

Tài khoản dịch vụ Datafusion
Mục đích Tài khoản dịch vụ Data Fusion được dùng để hiển thị danh sách các trường nguồn trong Giao diện người dùng Ads Data Hub.
Định dạng service-some-number@gcp-sa-datafusion.iam.gserviceaccount.com
Quyền truy cập cần phải có
Storage Object Viewer
roles/storage.objectViewer
cho các bộ chứa lưu trữ cụ thể trong dự án Nguồn dữ liệu
BigQuery Data Viewer
roles/bigquery.dataViewer
cho dự án Nguồn dữ liệu hoặc một bộ chứa lưu trữ chuyên dụng
Storage Admin
roles/storage.admin
cho dự án Nguồn dữ liệu hoặc một bộ chứa lưu trữ chuyên dụng
Tài khoản dịch vụ Dataproc
Mục đích Tài khoản dịch vụ Dataproc chịu trách nhiệm chạy các quy trình dữ liệu ở chế độ nền.
Định dạng some-number-compute@developer.gserviceaccount.com
Quyền truy cập cần phải có
Storage Admin
roles/storage.admin
cho cả dự án Nguồn dữ liệu và Đích đến, hoặc một bộ chứa lưu trữ chuyên dụng
BigQuery Job User
roles/bigquery.jobUser
cho dự án Đích
Tài khoản dịch vụ UPDM
Mục đích Tài khoản dịch vụ UPDM được dùng để chạy công việc so khớp.
Định dạng service-some-number@gcp-sa-adsdataconnector.iam.gserviceaccount.com
Quyền truy cập cần phải có
BigQuery Data Viewer
roles/bigquery.dataViewer
cho dự án Đích
BigQuery Job User
roles/bigquery.jobUser
cho dự án Đích

Các nguồn dữ liệu khác

Không cần thiết đối với các nguồn dữ liệu khác

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 Kết nối > Tạo kết nối > So khớp dữ liệu do người dùng cung cấp.
  2. Chọn một nguồn dữ liệu, rồi nhấp vào Kết nối.
  3. Xác thực (nếu được nhắc), sau đó nhấp vào Tiếp theo:

    BigQuery

    Nhấp vào Áp dụng để cấp quyền truy cập vào BigQuery.

    Cloud Storage

    Nhấp vào Áp dụng để cấp quyền truy cập vào Cloud Storage.

    MySQL

    Nhập vị trí, cổng, tên người dùng và mật khẩu của cơ sở dữ liệu MySQL.

    S3

    Nhập khoá truy cập bí mật của Amazon S3.

    PostgreSQL

    Nhập vị trí cơ sở dữ liệu, cổng, tên người dùng, mật khẩu và cơ sở dữ liệu của PostgreSQL.

    Redshift

    Nhập vị trí cơ sở dữ liệu, cổng, tên người dùng, mật khẩu và cơ sở dữ liệu của Redshift.

    sFTP

    Nhập vị trí, tên người dùng và mật khẩu của máy chủ sFTP.

    Bông tuyết

    Nhập mã nhận dạng, tên người dùng và mật khẩu của tài khoản Snowflake.

  4. Định cấu hình nguồn dữ liệu, rồi nhấp vào Tiếp theo:

    BigQuery

    Chọn bảng BigQuery cần nhập.

    Cloud Storage

    Nhập đường dẫn gsutil, chẳng hạn như gs://my-bucket/folder/ và chọn định dạng tệp.

    Nếu đây là lần đầu tiên bạn kết nối tài nguyên này, một cảnh báo sẽ xuất hiện. Nhấp vào Áp dụng để cấp quyền truy cập, rồi nhấp vào Tiếp theo. Lưu ý: bạn phải có một vai trò có quyền uỷ quyền storage.buckets.setIamPolicy cho bộ chứa liên quan.

    MySQL

    Chọn bảng và cơ sở dữ liệu MySQL mà bạn muốn sử dụng.

    S3

    Nhập URI đến tệp mà bạn muốn tải lên, tương ứng với địa chỉ máy chủ lưu trữ.

    PostgreSQL

    Nhập tên giản đồ và bảng (hoặc chế độ xem) PostgreSQL.

    Redshift

    Nhập tên giản đồ và bảng (hoặc chế độ xem) Redshift. Theo mặc định, Redshift sử dụng URL của vị trí cơ sở dữ liệu tuân theo mẫu sau: cluster-identifier.account-number.aws-region.redshift.amazonaws.com.

    sFTP

    Nhập đường dẫn và tên tệp, được định dạng là /PATH/FILENAME.csv

    Bông tuyết

    Nhập cơ sở dữ liệu, giản đồ và bảng (hoặc chế độ xem) Snowflake mà bạn muốn sử dụng.

  5. Chọn một tập dữ liệu BigQuery để dùng làm đích đến trung gian, rồi nhấp vào Tiếp theo. Bước này giúp đảm bảo rằng dữ liệu của bạn được định dạng chính xác.
  6. Không bắt buộc: Sửa đổi định dạng dữ liệu. Các phép biến đổi bao gồm tính toán hàm băm, định dạng chữ thường/chữ hoa và hợp nhất/tách các trường.
    1. Nhấp vào Hành động > > Biến đổi.
    2. Trong bảng điều khiển bật lên, hãy nhấp vào Thêm phép biến đổi hoặc Thêm phép biến đổi khác
    3. Chọn một kiểu biến đổi trong trình đơn thả xuống rồi nhập các yêu cầu.
    4. Nhấp vào Lưu.
  7. Chọn ít nhất một khoá kết hợp và liên kết các trường mà bạn sẽ sử dụng. Ads Data Hub sẽ tự động liên kết các trường có tên giống hệt nhau, được biểu thị bằng biểu tượng . Chỉnh sửa nếu cần, rồi nhấp vào Tiếp theo.
  8. Đặt lịch biểu:
    1. Đặt tên cho kết nối.
    2. Đặt tần suất, cho biết tần suất dữ liệu sẽ được nhập vào tập dữ liệu mà bạn đã chọn ở bước trước. Mỗi lần chạy sẽ ghi đè dữ liệu trong bảng đích.
    3. Chỉ định cách bạn muốn xử lý xung đột mã nhận dạng người dùng. Bạn có thể chọn giữ lại kết quả trùng khớp hiện có hoặc ghi đè bằng dữ liệu mới.
  9. Nhấp vào Hoàn tất. Bảng so khớp thường sẵn sàng để truy vấn sau 12 giờ kể từ khi được tạo.

Xem thông tin chi tiết về mối kết nối

Trang thông tin chi tiết về mối kết nối cung cấp cho bạn thông tin về các lần chạy và lỗi gần đây của một mối kết nối nhất định. Cách xem thông tin chi tiết về một mối kết nối cụ thể:

  1. Nhấp vào Kết nối.
  2. Nhấp vào tên của mối kết nối để xem thông tin chi tiết.
  3. Giờ đây, bạn có thể xem thông tin chi tiết và các lần chạy gần đây của kết nối. Mỗi thẻ cho biết hai loại lỗi có thể xảy ra: lỗi ở cấp kết nối (kết nối không chạy) và lỗi ở cấp hàng (một hàng không được nhập).
    1. Trạng thái Không thành công cho biết toàn bộ kết nối không chạy được (ví dụ: vấn đề về quyền của tài khoản dịch vụ). Nhấp vào trạng thái lỗi để xem lỗi nào đã ảnh hưởng đến kết nối.
    2. Trạng thái Đã hoàn tất cho biết kết nối đã chạy thành công. Tuy nhiên, vẫn có thể có lỗi ở cấp hàng, được biểu thị bằng một giá trị khác 0 trong cột "Hàng có lỗi". Nhấp vào giá trị để tìm hiểu thêm về những bản ghi không thành công.

Chỉnh sửa mối kết nối

Bạn có thể chỉnh sửa các thông tin chi tiết sau:

  • Tên kết nối
  • Lên lịch
  • Bảng điểm đến
  • Liên kết trường

Tính năng chỉnh sửa nguồn dữ liệu không được hỗ trợ. Để thay đổi nguồn dữ liệu, hãy tạo một mối liên kết mới và xoá mối liên kết cũ.

Cách chỉnh sửa thông tin chi tiết về mối kết nối:

  1. Nhấp vào Kết nối.
  2. Nhấp vào tên của mối liên kết mà bạn muốn chỉnh sửa.
  3. Chỉnh sửa thông tin bạn muốn thay đổi:
    • Tên kết nối: Nhấp vào Chỉnh sửa, nhập tên mới rồi nhấn phím Enter.
    • Lịch biểu: Nhấp vào Chỉnh sửa, đặt lịch biểu mới, rồi nhấp vào Lưu.
    • Bảng đích: Nhấp vào Chỉnh sửa, nhập tên đích mới, rồi nhấp vào Lưu.
    • Liên kết trường: Nhấp vào biểu tượng , chỉnh sửa các trường, rồi nhấp vào Lưu.
  4. Nhấp vào .

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.