Các phương pháp hay nhất

Các phương pháp hay nhất sau đây sẽ cung cấp cho bạn các kỹ thuật để phát triển các truy vấn tập trung vào quyền riêng tư và có hiệu suất cao. Để biết các phương pháp hay nhất dành riêng cho việc chạy truy vấn ở chế độ nhiễu, hãy xem các phần về mẫu truy vấn được hỗ trợ và không được hỗ trợ trong phần Thêm nhiễu.

Quyền riêng tư và độ chính xác của dữ liệu

Phát triển truy vấn trên dữ liệu hộp cát

Phương pháp hay nhất: Chỉ truy vấn dữ liệu sản xuất khi bạn đang ở môi trường sản xuất.

Hãy sử dụng dữ liệu hộp cát trong quá trình phát triển truy vấn bất cứ khi nào có thể. Các công việc sử dụng dữ liệu hộp cát không tạo thêm cơ hội để kiểm tra sự khác biệt nhằm lọc kết quả truy vấn. Ngoài ra, do thiếu các bước kiểm tra quyền riêng tư, nên các truy vấn hộp cát chạy nhanh hơn, cho phép lặp lại nhanh hơn trong quá trình phát triển truy vấn.

Nếu bạn phải phát triển các truy vấn trên dữ liệu thực tế (chẳng hạn như khi sử dụng bảng so khớp), để giảm khả năng các hàng bị trùng lặp, hãy chọn phạm vi ngày và các tham số khác không có khả năng trùng lặp cho mỗi lần lặp lại truy vấn. Cuối cùng, hãy chạy truy vấn trên phạm vi dữ liệu mong muốn.

Cân nhắc kỹ kết quả trong quá khứ

Phương pháp hay nhất: Giảm khả năng trùng lặp tập kết quả giữa các truy vấn đã chạy gần đây.

Hãy lưu ý rằng tốc độ thay đổi giữa các kết quả truy vấn sẽ ảnh hưởng đến khả năng kết quả bị bỏ qua sau này do các bước kiểm tra quyền riêng tư. Tập kết quả thứ hai giống với tập kết quả được trả về gần đây có khả năng bị loại bỏ.

Thay vào đó, hãy sửa đổi các tham số chính trong truy vấn, chẳng hạn như phạm vi ngày hoặc mã chiến dịch, để giảm khả năng trùng lặp đáng kể.

Không truy vấn dữ liệu hôm nay

Phương pháp hay nhất: Không chạy nhiều truy vấn có ngày kết thúc là hôm nay.

Việc chạy nhiều truy vấn có ngày kết thúc bằng với ngày hôm nay thường dẫn đến việc các hàng bị lọc. Hướng dẫn này cũng áp dụng cho việc chạy truy vấn ngay sau nửa đêm trên dữ liệu của ngày hôm qua.

Không truy vấn cùng một dữ liệu nhiều lần hơn mức cần thiết

Các phương pháp hay nhất:

  • Chọn ngày bắt đầu và ngày kết thúc được liên kết chặt chẽ.
  • Thay vì truy vấn các cửa sổ trùng lặp, hãy chạy truy vấn trên các tập dữ liệu không giao nhau, sau đó tổng hợp kết quả trong BigQuery.
  • Sử dụng kết quả đã lưu thay vì chạy lại truy vấn.
  • Tạo bảng tạm cho từng phạm vi ngày mà bạn đang truy vấn.

Ads Data Hub hạn chế tổng số lần bạn có thể truy vấn cùng một dữ liệu. Do đó, bạn nên cố gắng hạn chế số lần truy cập vào một phần dữ liệu nhất định.

Không sử dụng nhiều phép tổng hợp hơn mức cần thiết trong cùng một truy vấn

Các phương pháp hay nhất:

  • Giảm thiểu số lượng phép tổng hợp trong một truy vấn
  • Viết lại truy vấn để kết hợp các phép tổng hợp khi có thể

Ads Data Hub giới hạn số lượng phép tổng hợp trên nhiều người dùng được phép sử dụng trong một truy vấn con là 100. Do đó, nhìn chung, chúng tôi khuyên bạn nên viết các truy vấn xuất ra nhiều hàng hơn với các khoá nhóm tập trung và các phép tổng hợp đơn giản, thay vì nhiều cột hơn với các khoá nhóm rộng và các phép tổng hợp phức tạp. Bạn nên tránh mẫu sau:

SELECT
  COUNTIF(field_1 = a_1 AND field_2 = b_1) AS cnt_1,
  COUNTIF(field_1 = a_2 AND field_2 = b_2) AS cnt_2
FROM
  table

Các truy vấn đếm sự kiện tuỳ thuộc vào cùng một tập hợp trường phải được viết lại bằng câu lệnh GROUP BY.

SELECT
  field_1,
  field_2,
  COUNT(1) AS cnt
FROM
  table
GROUP BY
  1, 2

Kết quả có thể được tổng hợp theo cùng một cách trong BigQuery.

Các truy vấn tạo cột từ một mảng rồi tổng hợp các cột đó sau đó phải được viết lại để hợp nhất các bước này.

SELECT
  COUNTIF(a_1) AS cnt_1,
  COUNTIF(a_2) AS cnt_2
FROM
  (SELECT
     1 IN UNNEST(field) AS a_1,
     2 IN UNNEST(field) AS a_2,
   FROM
     table)

Truy vấn trước đó có thể được viết lại như sau:

SELECT f, COUNT(1) FROM table, UNNEST(field) AS f GROUP BY 1

Các truy vấn sử dụng nhiều tổ hợp trường trong nhiều phép tổng hợp có thể được viết lại thành một số truy vấn tập trung hơn.

SELECT
  COUNTIF(field_1 = a_1) AS cnt_a_1,
  COUNTIF(field_1 = b_1) AS cnt_b_1,
  COUNTIF(field_2 = a_2) AS cnt_a_2,
  COUNTIF(field_2 = b_2) AS cnt_b_2,
FROM table

Truy vấn trước đó có thể được chia thành:

SELECT
  field_1, COUNT(*) AS cnt
FROM table
GROUP BY 1

SELECT
  field_2, COUNT(*) AS cnt
FROM table
GROUP BY 1

Bạn có thể chia các kết quả này thành các truy vấn riêng biệt, tạo và kết hợp các bảng trong một truy vấn duy nhất hoặc kết hợp chúng bằng UNION nếu các lược đồ tương thích.

Tối ưu hoá và tìm hiểu các phép kết hợp

Phương pháp hay nhất: Sử dụng LEFT JOIN thay vì INNER JOIN để kết hợp lượt nhấp hoặc lượt chuyển đổi với lượt hiển thị.

Không phải tất cả lượt hiển thị đều được liên kết với lượt nhấp hoặc lượt chuyển đổi. Do đó, nếu bạn INNER JOIN lượt nhấp hoặc lượt chuyển đổi trên lượt hiển thị, thì những lượt hiển thị không được liên kết với lượt nhấp hoặc lượt chuyển đổi sẽ bị lọc khỏi kết quả.

Hình ảnh minh hoạ nhiều loại kết hợp thông qua biểu đồ Venn

Kết hợp một số kết quả cuối cùng trong BigQuery

Phương pháp hay nhất: Tránh các truy vấn Ads Data Hub kết hợp kết quả tổng hợp. Thay vào đó, hãy viết 2 truy vấn riêng biệt và kết hợp kết quả trong BigQuery.

Các hàng không đáp ứng yêu cầu tổng hợp sẽ bị lọc khỏi kết quả. Do đó, nếu truy vấn của bạn kết hợp một hàng được tổng hợp không đầy đủ với một hàng được tổng hợp đầy đủ, thì hàng kết quả sẽ bị lọc. Ngoài ra, các truy vấn có nhiều phép tổng hợp sẽ có hiệu suất kém hơn trong Ads Data Hub.

Bạn có thể kết hợp kết quả (trong BigQuery) từ nhiều truy vấn tổng hợp (từ Ads Data Hub). Kết quả được tính toán bằng các truy vấn phổ biến sẽ chia sẻ các lược đồ cuối cùng.

Truy vấn sau đây lấy các kết quả riêng lẻ của Ads Data Hub (campaign_data_123campaign_data_456) rồi kết hợp chúng trong BigQuery:

SELECT t1.campaign_id, t1.city, t1.X, t2.Y
FROM `campaign_data_123` AS t1
FULL JOIN `campaign_data_456` AS t2
USING (campaign_id, city)

Sử dụng bản tóm tắt hàng đã lọc

Phương pháp hay nhất: Thêm bản tóm tắt hàng đã lọc vào truy vấn.

Bản tóm tắt hàng đã lọc tính tổng dữ liệu đã được lọc do các bước kiểm tra quyền riêng tư. Dữ liệu từ các hàng đã lọc được tính tổng và thêm vào một hàng bao gồm tất cả. Mặc dù không thể phân tích thêm dữ liệu đã lọc, nhưng dữ liệu này cung cấp bản tóm tắt về lượng dữ liệu đã được lọc khỏi kết quả.

Tính đến mã nhận dạng người dùng được đặt thành 0

Phương pháp hay nhất: Tính đến mã nhận dạng người dùng được đặt thành 0 trong kết quả.

Mã nhận dạng của người dùng cuối có thể được đặt thành 0 vì nhiều lý do, bao gồm: chọn không sử dụng tính năng cá nhân hoá quảng cáo, lý do tuân thủ quy định, v.v. Do đó, dữ liệu bắt nguồn từ nhiều người dùng sẽ được đặt khoá thành user_id là 0.

Nếu muốn hiểu tổng số dữ liệu, chẳng hạn như tổng số lượt hiển thị hoặc lượt nhấp, bạn nên đưa các sự kiện này vào. Tuy nhiên, dữ liệu này sẽ không hữu ích cho việc thu thập thông tin chi tiết về khách hàng và bạn nên lọc dữ liệu này nếu đang thực hiện phân tích như vậy.

Bạn có thể loại trừ dữ liệu này khỏi kết quả bằng cách thêm WHERE user_id != "0" vào truy vấn.


Hiệu suất

Tránh tổng hợp lại

Phương pháp hay nhất: Tránh nhiều lớp tổng hợp trên nhiều người dùng.

Các truy vấn kết hợp kết quả đã được tổng hợp (chẳng hạn như trong trường hợp truy vấn có nhiều GROUP BY hoặc phép tổng hợp lồng nhau) cần nhiều tài nguyên hơn để xử lý.

Thông thường, các truy vấn có nhiều lớp tổng hợp có thể được chia nhỏ, giúp cải thiện hiệu suất. Bạn nên cố gắng giữ các hàng ở cấp sự kiện hoặc người dùng trong khi xử lý, sau đó kết hợp với một phép tổng hợp duy nhất.

Bạn nên tránh các mẫu sau:

SELECT SUM(count)
FROM
  (SELECT campaign_id, COUNT(0) AS count FROM ... GROUP BY 1)

Các truy vấn sử dụng nhiều lớp tổng hợp phải được viết lại để sử dụng một lớp tổng hợp.

(SELECT ... GROUP BY ... )
JOIN USING (...)
(SELECT ... GROUP BY ... )

Các truy vấn có thể dễ dàng chia nhỏ phải được chia nhỏ. Bạn có thể kết hợp kết quả trong BigQuery.

Tối ưu hoá cho BigQuery

Nói chung, các truy vấn thực hiện ít thao tác sẽ có hiệu suất tốt hơn. Khi đánh giá hiệu suất truy vấn, lượng công việc cần thiết phụ thuộc vào các yếu tố sau:

Nếu quá trình thực thi truy vấn không đáp ứng thỏa thuận mức độ cung cấp dịch vụ hoặc bạn gặp lỗi do hết tài nguyên hoặc hết thời gian chờ, hãy cân nhắc:

  • Sử dụng kết quả từ các truy vấn trước thay vì tính toán lại. Ví dụ: tổng số hằng tuần có thể là tổng số được tính trong BigQuery của 7 truy vấn tổng hợp một ngày.
  • Phân tách truy vấn thành các truy vấn con logic (chẳng hạn như chia nhiều phép kết hợp thành nhiều truy vấn) hoặc hạn chế tập hợp dữ liệu đang được xử lý. Bạn có thể kết hợp kết quả từ các công việc riêng lẻ thành một tập dữ liệu duy nhất trong BigQuery. Mặc dù điều này có thể giúp giải quyết vấn đề hết tài nguyên, nhưng có thể làm chậm truy vấn.
  • Nếu bạn gặp lỗi vượt quá tài nguyên trong BigQuery, hãy thử sử dụng bảng tạm để chia truy vấn thành nhiều truy vấn BigQuery.
  • Tham chiếu ít bảng hơn trong một truy vấn, vì thao tác này sử dụng lượng lớn bộ nhớ và có thể khiến truy vấn của bạn không thành công.
  • Viết lại truy vấn để kết hợp ít bảng người dùng hơn.
  • Viết lại truy vấn để tránh kết hợp cùng một bảng trở lại chính nó.

Trình tư vấn truy vấn

Nếu SQL của bạn hợp lệ nhưng có thể kích hoạt các vấn đề về quyền riêng tư, thì trình tư vấn truy vấn sẽ đưa ra lời khuyên có thể thực hiện trong quá trình phát triển truy vấn để giúp bạn tránh kết quả không mong muốn.

Cách sử dụng trình tư vấn truy vấn:

  • Giao diện người dùng (UI). Các đề xuất sẽ xuất hiện trong trình chỉnh sửa truy vấn, phía trên văn bản truy vấn.
  • API. Sử dụng phương thức customers.analysisQueries.validate.