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 những truy vấn tập trung vào quyền riêng tư và hiệu suất. Để biết các phương pháp hay nhất dành riêng cho việc chạy các 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 Chèn nhiễu.

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

Phát triển các 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 trong quá trình sản xuất.

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 mang đến 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 không có 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ế của mình (chẳng hạn như khi sử dụng bảng khớp), để giảm khả năng các hàng trùng lặp, hãy chọn phạm vi ngày và các thông số khác khó trùng lặp cho mỗi lần lặp lại của truy vấn. Cuối cùng, hãy chạy truy vấn trên dải dữ liệu mong muốn.

Xem xét kỹ lưỡng 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.

Xin 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 quy trình kiểm tra quyền riêng tư. Một tập hợp kết quả thứ hai gần giống với một tập hợp kết quả được trả về gần đây có thể sẽ bị loại bỏ.

Thay vào đó, hãy sửa đổi các tham số chính trong truy vấn của bạ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: Đừ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 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 các 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ó mối 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 rời rạc, 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.

Trung tâm dữ liệu quảng cáo giới hạn 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 các 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 phụ là 100. Do đó, nhìn chung, 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 sử dụng 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 nhóm trường nên đượ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

Bạn có thể tổng hợp kết quả theo cách tương tự trong BigQuery.

Những truy vấn tạo cột từ một mảng rồi tổng hợp các cột đó sau này cần đượ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)

Bạn có thể viết lại truy vấn trước đó 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

Bạn có thể chia truy vấn trước đó 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 các bảng bằng UNION nếu các giản đồ tương thích.

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

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

Không phải lượt hiển thị nào cũng liên kết với lượt nhấp hoặc lượt chuyển đổi. Do đó, nếu bạn chọ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 liên quan đến 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 các kết quả trong BigQuery.

Những hàng không đáp ứng các yêu cầu về việc 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 đủ với một hàng được tổng hợp đủ, 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ẽ hoạt động kém hiệu quả 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ừ Trung tâm dữ liệu quảng cáo). Kết quả được tính bằng các truy vấn chung sẽ chia sẻ các giản đồ cuối cùng.

Truy vấn sau đây lấy từng kết quả của Trung tâm dữ liệu quảng cáo (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 nội dung tóm tắt về hàng đã lọc

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

Bản tóm tắt hàng đã lọc tổng hợp dữ liệu đã được lọc do các tiêu chí kiểm tra quyền riêng tư. Dữ liệu từ các hàng đã lọc sẽ được cộng lại và thêm vào một hàng chung. 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 thông tin tóm tắt về lượng dữ liệu đã được lọc khỏi kết quả.

Tài khoản cho mã nhận dạng người dùng bằng 0

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

Có nhiều lý do khiến mã nhận dạng của người dùng cuối được đặt thành 0, chẳng hạn như: chọn không sử dụng tính năng cá nhân hoá quảng cáo, lý do theo quy định, v.v. Do đó, dữ liệu bắt nguồn từ nhiều người dùng sẽ được liên kết với một user_id có giá trị là 0.

Nếu muốn tìm 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 thêm những sự kiện này. Tuy nhiên, dữ liệu này sẽ không hữu ích cho việc rút ra 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 việc 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.

Những truy vấn kết hợp các 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 tổng hợp lồng nhau) sẽ 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ể bị 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 cấp 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 sử dụng các mẫu sau:

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

Bạn nên viết lại các truy vấn sử dụng nhiều lớp tổng hợp để sử dụng một lớp tổng hợp duy nhất.

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

Bạn nên chia nhỏ những truy vấn có thể dễ dàng chia nhỏ. Bạn có thể kết hợp kết quả trong BigQuery.

Tối ưu hoá cho BigQuery

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

Nếu việc thực thi truy vấn không đáp ứng thoả thuận mức độ dịch vụ của bạn 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ố lượt truy vấn trong tuần có thể là tổng của 7 truy vấn tổng hợp trong một ngày được tính trong BigQuery.
  • Phân tách các truy vấn thành các truy vấn con logic (chẳng hạn như chia nhiều thao tác 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ả của từng công việc 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ảm tình trạng cạn kiệt tài nguyên, nhưng có thể làm chậm truy vấn của bạ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 thời để 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 các truy vấn để chúng kết hợp ít bảng người dùng hơn.
  • Viết lại các truy vấn để tránh kết hợp cùng một bảng với chính nó.

Cố vấn truy vấn

Nếu SQL của bạn hợp lệ nhưng có thể kích hoạt quá trình lọc quá mức, thì trình tư vấn truy vấn sẽ đưa ra lời khuyên hữu ích 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ác điều kiện kích hoạt bao gồm những mẫu sau:

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

  • Giao diện người dùng. 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.