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à mang lại hiệu quả cao.

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 trong phiên bản chính thức.

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 ra thêm cơ hội để kiểm tra sự khác biệt để lọc kết quả truy vấn của bạn. Ngoài ra, do không có chế độ kiểm tra để đảm bảo quyền riêng tư nên các truy vấn hộp cát sẽ 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 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 so khớp), để giảm khả năng trùng lặp các hàng, hãy chọn phạm vi ngày và các thông số khác không có khả năng 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 của bạn trên phạm vi dữ liệu mong muốn.

Xem xét kỹ các kết quả trước đây

Phương pháp hay nhất: Giảm khả năng trùng lặp tập hợ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 quy trình kiểm tra để đảm bảo quyền riêng tư. Tập hợp kết quả thứ hai gần giống với tập hợp kết quả được trả về gần đây có khả năng bị bỏ.

Thay vào đó, hãy sửa đổi các thông 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 xảy ra tình trạng trùng lặp đáng kể.

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

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

Việc chạy nhiều truy vấn có ngày kết thúc bằng hôm nay thường sẽ 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 về dữ liệu của ngày hôm qua.

Đừng truy vấn cùng một dữ liệu nhiều 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ó ràng buộc chặt chẽ.
  • Thay vì truy vấn các cửa sổ trùng lặp, hãy chạy các truy vấn của bạ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 thời cho từng phạm vi ngày mà bạn đang truy vấn.

Ads Data Hub giới hạn tổng số lần mà bạn có thể truy vấn cùng một dữ liệu. Do đó, bạn nên tìm cách giới hạn 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 dữ liệu 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 dữ liệu 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 dữ liệu tổng hợp từ nhiều người dùng được phép sử dụng trong một truy vấn con ở mức 100. Do đó, về tổng thể, bạn nên viết các truy vấn sẽ tạo ra nhiều hàng hơn với các khoá nhóm tập trung và phương 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à phương 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 dựa vào cùng một nhóm 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ách tương tự trong BigQuery.

Bạn phải viết lại các truy vấn tạo cột từ một mảng rồi tổng hợp chúng sau đó để 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 thành:

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

Những truy vấn sử dụng nhiều tổ hợp trường trong những dữ liệu tổng hợp khác nhau có thể được viết lại thành nhiều 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 những 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 một UNION nếu giản đồ tương thích.

Tối ưu hoá và tìm hiểu về việc liên kết

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

Không phải tất cả lượt hiển thị đều liên quan đến 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 liên quan đến lượt nhấp hoặc lượt chuyển đổi sẽ bị lọc khỏi kết quả của bạn.

Hình ảnh hiển thị nhiều loại liên kết 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 các 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 yêu cầu tổng hợp sẽ được lọc khỏi kết quả của bạn. Do đó, nếu truy vấn của bạn liên kết một hàng tổng hợp không đủ với một hàng tổng hợp đầy đủ, thì hàng tổng hợp sẽ được lọc. Ngoài ra, các truy vấn có nhiều phương pháp tổng hợp có hiệu suất kém hơn trong Ads Data Hub.

Bạn có thể 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ẻ giản đồ cuối cùng.

Truy vấn sau lấy từng kết quả của Ads Data Hub (campaign_data_123campaign_data_456) rồi kết hợp các kết quả đó 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 về hàng đã lọc

Phương pháp hay nhất: Thêm thông tin tóm tắt về hàng đã lọc vào cụm từ tìm kiếm.

Dữ liệu kiểm đếm tóm tắt hàng đã lọc đã được lọc do 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 nhận toàn bộ. 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 có mã nhận dạng người dùng bằng 0

Phương pháp hay nhất: Tính đến những mã nhận dạng người dùng bằng 0 trong kết quả của bạn.

Mã nhận dạng người dùng cuối có thể được đặt thành 0 vì một số lý do, chẳng hạn như: chọn không sử dụng chế độ 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 khoá thành user_id 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 số 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 trong việc lấy thông tin chi tiết về khách hàng và nên được lọc nếu bạn đang thực hiện những phân tích như vậy.

Bạn có thể loại trừ dữ liệu này khỏi kết quả của mình 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 từ 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 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ể bị chia nhỏ, giúp cải thiện hiệu suất. Bạn nên cố gắng giữ lại 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ương 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 duy nhất.

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

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

Tối ưu hoá cho BigQuery

Nhìn chung, những cụm từ tìm kiếm kém hiệu quả sẽ mang lại hiệu quả cao 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 được thoả 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ố lượt chuyển đổi hằng tuần có thể là tổng được tính trong BigQuery của 7 lượt truy vấn tổng hợp trong 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 liên kết 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 riêng lẻ vào một tập dữ liệu trong BigQuery. Mặc dù điều này có thể giúp giải quyết tình trạng cạn kiệt tài nguyên, nhưng điều này có thể làm chậm truy vấn của bạn.
  • Nếu bạn gặp phải lỗi tài nguyên vượt quá số lượng trong BigQuery, hãy thử sử dụng bảng tạm thời để chia truy vấn của bạn thành nhiều truy vấn BigQuery.
  • Tham chiếu ít bảng hơn trong một truy vấn, vì việ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 của bạn để chúng tham gia ít bảng người dùng hơn.
  • Viết lại các truy vấn của bạn để tránh kết hợp lại cùng một bảng.

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 các kết quả không mong muốn.

Trình kích hoạt có các mẫu sau đây:

Cách sử dụng cố vấn truy vấn:

  • Giao diện người dùng. Các đề xuất sẽ hiển thị 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.