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 qua các sản phẩm của Google Marketing Platform (GMP), ví dụ: dữ liệu mua trên YouTube bằng Display & Video 360. Các sản phẩm GMP khác 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 đưa ra hướng dẫn về cách thiết lập và sử dụng.
Tổng quan
Để 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 của riêng bạn cho vấn đề về quy trình dữ liệu này sẽ đòi hỏi bạn phải đầu tư đáng kể về thời gian và 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 với BigQuery. Nhờ đó, bạn có thể sử dụng dữ liệu này 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 làm phong phú cụm từ tìm kiếm bằng dữ liệu của bên thứ nhất có thể mang lại trải nghiệm phong phú hơn cho khách hàng và giúp bạn dễ dàng thích ứng với 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 xây dựng bằng 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 PII, 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. Bạn có thể gặp khó khăn khi biết dữ liệu của bên thứ nhất nào cần thiết cho trường hợp sử dụng đo lường hoặc kích hoạt của mình. Vì vậy, Ads Data Hub cung cấp danh sách toàn diện các trường hợp sử dụng được xác định trước, sau đó hướng dẫn bạn trải qua toàn bộ quy trình trích xuất, chuyển đổi và tải dữ liệu. Mặc dù 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 sắp tới. Vì 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. Yêu cầu 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à chuyể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 đã 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 trong Ads Data Hub).
- Dự án quản trị: Dự án Google Cloud 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à Trung tâm dữ liệu quảng cáo 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 dự án này thành một dự án khác trên Google Cloud, hãy xem phần Định cấu hình tài khoản dịch vụ.
Tóm tắt quy trình
- Thiết lập tính năng nhập và so khớp dữ liệu
- Bạn cấp các quyền cần thiết cho tài khoản dịch vụ trên dự án quản trị của mình. Xem bài viết Thiết lập tính năng truyền dẫn dữ liệu.
- Quy trình 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ị. 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 một 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 nhập.
- Google sẽ kết hợp dữ liệu giữa dự án của bạn và dữ liệu thuộc sở hữu của Google, 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 phần Chuyển dữ liệu của bên thứ nhất
- Truy vấn đang diễn ra trong Ads Data Hub, dựa trên dữ liệu được so khớp
- Bạn chạy truy vấn trên các 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 đã so 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 bạn 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 các bên thứ ba để họ thay mặt bạn thực hiện các dịch vụ và bạn sẽ xin sự đồng ý của khách hàng trước khi 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ả 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
Thông báo 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ủ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 Trung tâm dữ liệu quảng cáo 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 toàn bộ tài khoản xác nhận điều này.
Xin lưu ý rằng các quy tắc cụm từ tìm kiếm dịch vụ của Google áp dụng cho cụm từ tìm kiếm phân tích cũng áp dụng cho cụm từ tìm kiếm 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 ở Khu vực kinh tế Châu Âu (EEA) khi tạo bảng so khớp.
Để 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 ý cho 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 ít nhất 1.000 bản ghi lên danh sách người dùng.
- 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ư 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ề giới hạn 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 tính năng truyền dẫn dữ liệu
Trước khi bắt đầu, bạn cần định cấu hình tài khoản Trung tâm dữ liệu quảng cáo để tạo các mối kết nối dữ liệu. Đây là cách bạn 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.
Những quyền nào được cấp cho BigQuery và Cloud Storage?
Nếu bạn thiết lập UPDM để sử dụng với BigQuery hoặc Cloud Storage, hãy sử dụng tài liệu tham khảo này để hiểu các quyền được cấp cho tài khoản dịch vụ Trung tâm dữ liệu quảng cáo.
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 bắt buộc |
|
||||||||
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 bắt buộc |
|
||||||||
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 bắt buộc |
|
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ị 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 bắt buộc |
|
||||||
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 bắt buộc |
|
||||||
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 bắt buộc |
|
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
Định dạng dữ liệu đầu vào
Dữ liệu của bạn phải tuân thủ các yêu cầu về định dạng sau để được so khớp chính xác:
- Khi được chỉ định trong nội dung mô tả trường nhập sau, bạn phải tải lên bằng cách băm SHA256.
- Các trường nhập 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 với hàm mã hoá Base16 (TO_HEX), hãy sử dụng phép biến đổi sau:
TO_HEX(SHA256(user_data))
. - UPDM hỗ trợ cả mã hoá Base16 và Base64. Bạn phải điều chỉnh quá trình mã hoá dữ liệu của bên thứ nhất với quá trình giải mã được sử dụng trong truy vấn của bạn trên Ads Data Hub. Nếu thay đổi cách mã hoá dữ liệu của bên thứ nhất, bạn phải cập nhật truy vấn Ads Data Hub để giải mã từ cùng một cơ sở. Các ví dụ sau đây sử dụng phương thức mã hoá Base16.
User ID
- Văn bản thuần túy
- Hàm băm: Không có
- Loại bỏ khoảng trắng
- 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 nhấn, ví dụ: thay đổi è, é, ê hoặc ë thành e
- Hàm băm: SHA256 được mã hoá Base16
Có hiệu lực: TO_HEX(SHA256("jeffersonloveshiking@gmail.com"))
Không hợp lệ: TO_HEX(SHA256("JéffersonLôvesHiking@gmail.com"))
Điện thoại
- Loại bỏ khoảng trắng
- Định dạng theo E.164 – ví dụ: ở Hoa Kỳ: +14155552671, ở Vương quốc Anh: +442071838750
- Bao gồm cả mã quốc gia (bao gồm cả Hoa Kỳ)
- Xoá tất cả ký tự đặc biệt ngoại trừ dấu "+" trước mã quốc gia
- Hàm băm: SHA256 được mã hoá Base16
Có hiệu lực: TO_HEX(SHA256("+18005550101"))
Không hợp lệ: TO_HEX(SHA256("(800) 555-0101"))
Tên
- Loại bỏ khoảng trắng
- Chữ thường tất cả ký tự
- Xoá tất cả tiền tố, chẳng hạn như Mrs.
- Không xoá dấu nhấn trọng âm, ví dụ: è, é, ê hoặc ë
- Hàm băm: SHA256 được mã hoá Base16
Có hiệu lực: TO_HEX(SHA256("daní"))
Không hợp lệ: TO_HEX(SHA256("Daní"))
Họ
- Loại bỏ khoảng trắng
- Chữ thường tất cả ký tự
- Xoá tất cả tiền tố, chẳng hạn như Jr.
- Không xoá dấu nhấn trọng âm, ví dụ: è, é, ê hoặc ë
- Hàm băm: SHA256 được mã hoá Base16
Có hiệu lực: TO_HEX(SHA256("delacruz"))
Không hợp lệ: TO_HEX(SHA256("de 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 theo ISO 3166-1 alpha-2
- Hàm 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ã bưu chính
- 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 hoa chữ cái đầu tiên hoặc xoá dấu cách và ký tự đặc biệt)
- Bỏ phần mở rộng mã bưu chính
- Hàm 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 mình được định dạng chính xác.
JavaScript
Base16
/**
* @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
Base16
"""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
Base16
/*
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
Base16
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
Base16
/*
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`;
Khóa kết hợp
Một số tổ hợp dữ liệu do người dùng cung cấp có độ chính xác cao hơn các tổ hợp khác. Dưới đây là danh sách các tổ hợp dữ liệu do người dùng cung cấp, được xếp hạng theo độ mạnh tương đối. Nếu sử dụng địa chỉ, bạn phải thêm: Họ, Tên, Quốc gia và Mã bưu chính.
- Email, Số điện thoại, Địa chỉ (mạnh nhất)
- Điện thoại, Địa chỉ
- Email, Địa chỉ
- Email, Điện thoại
- Địa chỉ
- Điện thoại
- Email (yếu nhất)
Tạo bảng so khớp
- 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.
- Chọn một nguồn dữ liệu, rồi nhấp vào Kết nối.
- Xác thực (nếu được nhắc), rồi 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ổng, tên người dùng, mật khẩu và cơ sở dữ liệu của cơ sở dữ liệu PostgreSQL.
Redshift
Nhập vị trí, cổng, tên người dùng, mật khẩu và cơ sở dữ liệu của cơ sở dữ liệu 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.
- Đị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 để 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 của 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.
- 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.
- Không bắt buộc: Sửa đổi định dạng dữ liệu của bạn. Các phép biến đổi bao gồm hàm băm tính toán, định dạng chữ thường/viết hoa và hợp nhất/chia các trường.
- Nhấp vào Action (Thao tác) > > Transform (Biến đổi).
- 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
- Chọn một loại biến đổi trong trình đơn thả xuống rồi nhập các yêu cầu.
- Nhấp vào Lưu.
- 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 . Chỉnh sửa nếu cần, rồi nhấp vào Tiếp theo.
- Đặt lịch biểu:
- Đặt tên cho mối kết nối.
- Đặt tần suất, cho biết tần suất nhập dữ liệu 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 đến.
- 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ữa việc giữ lại kết quả trùng khớp hiện có hoặc ghi đè bằng dữ liệu mới.
- Nhấp vào Hoàn tất. Thông thường, bạn có thể truy vấn bảng so khớp sau 12 giờ kể từ khi tạo.
Xem thông tin chi tiết về kết nối
Trang chi tiết về 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 kết nối nhất định. Cách xem thông tin chi tiết về một kết nối cụ thể:
- Nhấp vào Kết nối.
- Nhấp vào tên của mối kết nối để xem thông tin chi tiết.
- Giờ đây, bạn có thể xem thông tin chi tiết về kết nối và các lần chạy gần đây. Mỗi mục hiển thị 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 (không nhập được hàng).
- 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.
- 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 giá trị khác 0 trong cột "Hàng có lỗi". Nhấp vào giá trị này để 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 những thông tin chi tiết sau:
- Tên kết nối
- Lịch quảng cáo
- Bảng điểm đến
- Liên kết trường
Không hỗ trợ tính năng chỉnh sửa nguồn dữ liệu. Để thay đổi nguồn dữ liệu, hãy tạo một mối kết nối mới rồi xoá mối kết nối cũ.
Cách chỉnh sửa thông tin chi tiết về mối kết nối:
- Nhấp vào Kết nối.
- Nhấp vào tên của mối kết nối mà bạn muốn chỉnh sửa.
- Chỉnh sửa thông tin chi tiết mà 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 đến: Nhấp vào Chỉnh sửa, nhập tên đích đến mới, sau đó 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.
- Nhấp vào .
Truy vấn dữ liệu đã so khớp
Truy vấn bảng so khớp
Khi bảng so khớp 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 trên các bảng đó.
Bảng gốc cho dữ liệu của bên thứ nhất (1PD) được biểu thị bằng my_data
.
Điều này bao gồm cả Thông tin nhận dạng cá nhân (PII) và dữ liệu không phải PII.
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 nhiều thông tin chi tiết hơn, vì bảng này đại diện cho tất cả dữ liệu 1PD trong phạm vi, so 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 tách biệt với chính sách. Ví dụ: đối với bảng adh.google_ads_impressions_policy_isolated_youtube
, Ads Data Hub cũng tạo một bảng so khớp có tên là adh.google_ads_impressions_policy_isolated_youtube_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 tập hợp con người dùng có trong các bảng ban đầu, trong đó có một kết quả trùng 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
. Cột này 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 của 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 thuộc cùng một loại. Tuỳ thuộc vào cách user_id
được lưu trữ 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, việc so sánh chuỗi trong SQL sẽ phân biệt chữ hoa chữ thường, vì vậy, bạn có thể cần phải mã hoá chuỗi ở cả hai bên của phép so sánh để đảm bảo rằng các chuỗi đó 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ố lượng người dùng được so khớp trong bảng lượt hiển thị trên Google Ads.
/* Count matched users in Google Ads impressions table */
SELECT COUNT(DISTINCT user_id)
FROM adh.google_ads_impressions_updm
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ề tỷ lệ khớp của UPDM
Để xem danh sách câu hỏi thường gặp liên quan đến tỷ lệ khớp UPDM, hãy xem bài viết Câu hỏi thường gặp về tỷ lệ khớp UPDM.