Praktik terbaik

Praktik terbaik berikut akan memberi Anda teknik untuk mengembangkan kueri yang berfokus pada privasi dan berperforma tinggi.

Privasi dan akurasi data

Mengembangkan kueri pada data sandbox

Praktik terbaik: Hanya buat kueri data produksi saat Anda sedang dalam produksi.

Manfaatkan data sandbox selama pengembangan kueri jika memungkinkan. Tugas yang menggunakan data sandbox tidak memberikan peluang tambahan bagi pemeriksaan perbedaan untuk memfilter hasil kueri Anda. Selain itu, karena kurangnya pemeriksaan privasi, kueri sandbox berjalan lebih cepat, sehingga iterasi dapat lebih cepat selama pengembangan kueri.

Jika Anda harus mengembangkan kueri pada data aktual (seperti saat menggunakan tabel pencocokan), untuk memperkecil kemungkinan Anda tumpang-tindih dengan baris, pilih rentang tanggal dan parameter lain yang tidak mungkin tumpang tindih untuk setiap iterasi kueri Anda. Terakhir, jalankan kueri Anda pada rentang data yang diinginkan.

Mempertimbangkan hasil historis dengan cermat

Praktik terbaik: Mengurangi kemungkinan tumpang-tindih kumpulan hasil antara kueri yang baru-baru ini dijalankan.

Perlu diingat bahwa tingkat perubahan di antara hasil kueri akan berpengaruh pada seberapa besar kemungkinan hasil dihilangkan karena pemeriksaan privasi. Set hasil kedua yang sangat mirip dengan set hasil yang baru saja ditampilkan kemungkinan akan dihapus.

Sebagai gantinya, ubah parameter utama dalam kueri Anda, seperti rentang tanggal atau ID kampanye, untuk mengurangi kemungkinan tumpang-tindih yang signifikan.

Jangan buat kueri untuk data hari ini

Praktik terbaik: Jangan menjalankan beberapa kueri dengan tanggal akhirnya hari ini.

Menjalankan beberapa kueri dengan tanggal akhir yang sama dengan hari ini akan sering menyebabkan baris difilter. Panduan ini juga berlaku untuk menjalankan kueri tepat setelah tengah malam pada data kemarin.

Jangan mengkueri data yang sama lebih dari yang diperlukan

Praktik terbaik:

  • Pilih tanggal mulai dan tanggal akhir yang terikat erat.
  • Daripada membuat kueri untuk jendela yang tumpang tindih, jalankan kueri Anda di set data yang terpisah-pisah, lalu gabungkan hasilnya di BigQuery.
  • Gunakan hasil tersimpan alih-alih menjalankan kembali kueri Anda.
  • Buat tabel sementara untuk setiap rentang tanggal yang Anda buat kuerinya.

Ads Data Hub membatasi total berapa kali Anda dapat membuat kueri untuk data yang sama. Dengan demikian, Anda harus mencoba membatasi berapa kali Anda mengakses bagian data tertentu.

Jangan gunakan agregasi lebih dari yang diperlukan dalam kueri yang sama

Praktik terbaik:

  • Meminimalkan jumlah agregasi dalam kueri
  • Menulis ulang kueri untuk menggabungkan agregasi jika memungkinkan

Ads Data Hub membatasi jumlah agregasi lintas-pengguna yang diizinkan untuk digunakan dalam subkueri hingga 100. Oleh karena itu, secara keseluruhan sebaiknya Anda menulis kueri yang menghasilkan lebih banyak baris dengan kunci pengelompokan yang terfokus dan agregasi sederhana, bukan lebih banyak kolom dengan kunci pengelompokan luas dan agregasi yang kompleks. Pola berikut harus dihindari:

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

Kueri yang menghitung peristiwa, bergantung pada sekumpulan kolom yang sama harus ditulis ulang menggunakan pernyataan GROUP BY.

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

Hasilnya dapat digabungkan dengan cara yang sama di BigQuery.

Kueri yang membuat kolom dari array, lalu menggabungkannya harus ditulis ulang untuk menggabungkan langkah-langkah ini.

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)

Kueri sebelumnya dapat ditulis ulang sebagai:

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

Kueri yang menggunakan berbagai kombinasi kolom dalam agregasi berbeda dapat ditulis ulang menjadi beberapa kueri yang lebih terfokus.

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

Kueri sebelumnya dapat dibagi menjadi:

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

dan

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

Anda dapat membagi hasil ini menjadi kueri terpisah, membuat dan menggabungkan tabel dalam satu kueri, atau menggabungkannya dengan UNION jika skema kompatibel.

Mengoptimalkan dan memahami penggabungan

Praktik terbaik: Gunakan LEFT JOIN, bukan INNER JOIN untuk menggabungkan klik atau konversi menjadi tayangan.

Tidak semua tayangan dikaitkan dengan klik atau konversi. Oleh karena itu, jika Anda INNER JOIN klik atau konversi pada tayangan, tayangan yang tidak terkait dengan klik atau konversi akan difilter dari hasil Anda.

Gambar yang menunjukkan beberapa jenis gabungan melalui diagram venn

Bergabunglah dengan beberapa hasil akhir di BigQuery

Praktik terbaik: Hindari kueri Ads Data Hub yang menggabungkan hasil gabungan. Sebagai gantinya, tulis 2 kueri terpisah dan gabungkan hasilnya di BigQuery.

Baris yang tidak memenuhi persyaratan agregasi akan difilter dari hasil Anda. Oleh karena itu, jika kueri Anda menggabungkan baris yang tidak diagregasi secara memadai dengan baris yang digabungkan secara memadai, baris yang dihasilkan akan difilter. Selain itu, kueri dengan beberapa agregasi memiliki performa yang lebih rendah di Ads Data Hub.

Anda dapat menggabungkan hasil (di BigQuery) dari beberapa kueri agregasi (dari Ads Data Hub). Hasil yang dihitung menggunakan kueri umum akan membagikan skema akhir.

Kueri berikut mengambil hasil Ads Data Hub individual (campaign_data_123 dan campaign_data_456) dan menggabungkannya ke 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)

Menggunakan ringkasan baris yang difilter

Praktik terbaik: Menambahkan ringkasan baris yang difilter ke kueri Anda.

Ringkasan baris yang difilter menghitung data yang difilter karena pemeriksaan privasi. Data dari baris yang difilter dijumlahkan dan ditambahkan ke baris generik. Meskipun data yang difilter tidak dapat dianalisis lebih lanjut, data tersebut memberikan ringkasan tentang berapa banyak data yang difilter dari hasil tersebut.

Akun untuk ID pengguna yang nol

Praktik terbaik: Perhitungkan ID pengguna yang disetel ke nol dalam hasil Anda.

ID pengguna akhir dapat ditetapkan ke 0 karena sejumlah alasan, termasuk: memilih untuk tidak mengikuti personalisasi iklan, alasan peraturan, dll. Dengan demikian, data yang berasal dari beberapa pengguna akan dikunci ke user_id 0.

Jika Anda ingin memahami total data, seperti total tayangan iklan atau klik, Anda harus menyertakan peristiwa ini. Namun, data ini tidak akan berguna untuk mendapatkan insight tentang pelanggan, dan sebaiknya difilter jika Anda melakukan analisis tersebut.

Anda dapat mengecualikan data ini dari hasil dengan menambahkan WHERE user_id != "0" ke kueri Anda.


Performa

Menghindari agregasi ulang

Praktik terbaik: Hindari beberapa lapisan agregasi di seluruh pengguna.

Kueri yang menggabungkan hasil yang telah diagregasi, seperti dalam kasus kueri dengan beberapa GROUP BY, atau agregasi bertingkat, memerlukan lebih banyak resource untuk diproses.

Sering kali, kueri dengan beberapa lapisan agregasi dapat dipecah, sehingga meningkatkan performa. Anda harus mencoba mempertahankan baris pada tingkat peristiwa atau pengguna saat memproses, lalu gabungkan dengan satu agregasi.

Pola berikut harus dihindari:

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

Kueri yang menggunakan beberapa lapisan agregasi harus ditulis ulang untuk menggunakan satu lapisan agregasi.

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

Kueri yang mudah dipecah harus dipecah. Anda dapat menggabungkan hasil di BigQuery.

Mengoptimalkan BigQuery

Umumnya, kueri yang berperforma lebih baik akan berperforma lebih baik. Saat mengevaluasi performa kueri, jumlah pekerjaan yang diperlukan bergantung pada faktor-faktor berikut:

Jika eksekusi kueri tidak memenuhi perjanjian tingkat layanan, atau Anda mengalami error karena kehabisan resource atau waktu tunggu habis, pertimbangkan:

  • Menggunakan hasil dari kueri sebelumnya, bukan perhitungan ulang. Misalnya, total mingguan Anda dapat berupa jumlah yang dihitung di BigQuery dari 7 kueri gabungan satu hari.
  • Mengurai kueri menjadi subkueri logis (seperti memisahkan beberapa gabungan menjadi beberapa kueri), atau membatasi kumpulan data yang diproses. Anda dapat menggabungkan hasil dari setiap tugas ke dalam satu set data di BigQuery. Meskipun dapat membantu mengurangi kehabisan resource, cara ini dapat memperlambat kueri Anda.
  • Jika Anda mengalami error karena resource terlampaui di BigQuery, coba gunakan tabel sementara untuk membagi kueri Anda menjadi beberapa kueri BigQuery.
  • Mereferensikan lebih sedikit tabel dalam satu kueri, karena tindakan ini menggunakan memori dalam jumlah besar dan dapat menyebabkan kueri gagal.
  • Menulis ulang kueri Anda sehingga kueri tersebut menggabungkan lebih sedikit tabel pengguna.
  • Menulis ulang kueri Anda untuk menghindari penggabungan tabel yang sama kembali.

Penasihat kueri

Jika SQL Anda valid tetapi mungkin memicu pemfilteran yang berlebihan, penasihat kueri akan menampilkan saran yang dapat ditindaklanjuti selama proses pengembangan kueri, untuk membantu Anda menghindari hasil yang tidak diinginkan.

Pemicu mencakup pola berikut:

Untuk menggunakan konsultan kueri: