BigQuery MigrationClickHouse Workshops

01 Kenapa ini lambat?

Pertanyaan yang sama diajukan ke BigQuery dan, nanti, ke ClickHouse -- dua jawaban yang sudah diukur sebelumnya, belum ada penjelasan, dan pernyataan lugas soal di mana BigQuery memang menang.

Satu dataset, dua tempat

Workshop ini memindahkan dataset sample e-commerce GA4 yang diobfuskasi -- dataset yang sama yang menjadi dasar tutorial public-data BigQuery sendiri -- dari BigQuery ke ClickHouse. Sebelum Anda menyentuh salah satu sistem, lihat dulu seberapa cepat BigQuery sendiri mengeksekusi query terhadap kopi publik data ini.

Kedua query di bawah berjalan terhadap bigquery-public-data.ga4_obfuscated_sample_ecommerce, dataset publik yang belum disentuh. Anda tidak perlu proyek Google Cloud untuk melihat ini: query terhadap BigQuery, meskipun terhadap dataset publik, tetap dibebankan ke proyek siapa pun yang menjalankannya, sehingga instruktur Anda menjalankan kedua query ini secara live dan tangkapan layar di bawah adalah job statistics asli dari konsolnya, bukan sekadar angka yang dituliskan di bawahnya. Kopi yang akan Anda pakai untuk sisa workshop ini tinggal di GCS bucket dan merupakan data yang sama, digeser lima tahun ke depan -- modul 02 membahas pergeseran ini dan alasan mengapa aman untuk diabaikan untuk saat ini. user_pseudo_id tidak digeser, sehingga user yang sama tetap ada secara identik di kedua kopi.

Lookup satu user

SELECT
  TIMESTAMP_MICROS(event_timestamp) AS event_time,
  event_name,
  geo.country                       AS geo_country
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE user_pseudo_id = '3272961.4196485002'
ORDER BY event_time DESC
LIMIT 20;

Konsol BigQuery menampilkan query lookup satu user dan panel Execution details-nya: elapsed 2 detik 712 md, 4.295.584 record dibaca pada tahap input, 20 record ditulis

Execution details asli dari BigQuery untuk query di atas -- waktu elapsed dan, tahap demi tahap, berapa banyak record yang dibaca untuk menjawabnya -- dari run live, bukan diketik dari memori.

Ini kira-kira query paling menguntungkan yang bisa dilihat BigQuery: satu user, dua puluh baris, satu LIMIT. Angka-angka di bawah adalah median dari tiga run, dibaca dari job statistics BigQuery sendiri.

3.34selapsed
229,493,155 Bbyte discan (0.229 GB)
$0.0013045biaya on-demand

Agregat dashboard satu hari

SELECT
  TIMESTAMP_TRUNC(TIMESTAMP_MICROS(event_timestamp), MINUTE) AS minute,
  device.category                                            AS device_category,
  geo.country                                                AS geo_country,
  COUNTIF(event_name = 'view_item')                          AS views,
  COUNTIF(event_name = 'add_to_cart')                        AS carts,
  COUNTIF(event_name = 'begin_checkout')                     AS checkouts,
  COUNTIF(event_name = 'purchase')                           AS purchases,
  APPROX_COUNT_DISTINCT(user_pseudo_id)                      AS users,
  ROUND(SAFE_DIVIDE(COUNTIF(event_name = 'add_to_cart'), COUNTIF(event_name = 'view_item')), 4) AS cart_rate
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE _TABLE_SUFFIX = '20201201'
GROUP BY minute, device_category, geo_country
ORDER BY minute DESC, device_category, geo_country;

Konsol BigQuery menampilkan query agregat dashboard satu hari dan panel Execution details-nya: elapsed 1 detik 65 md, 71.804 record dibaca di tiga tahap, 9.838 record ditulis

Execution details asli dari BigQuery untuk query di atas, dari run live yang sama.

Ini adalah funnel konversi per menit -- views, cart adds, checkouts, purchases, distinct users -- dibatasi ke satu hari kalender, yang persis berbentuk seperti query yang dikirim dashboard live pada setiap page load. Partitioning tabel harian BigQuery (_TABLE_SUFFIX) melakukan pruning secara ketat di sini -- median dari tiga run:

0.98selapsed
4,455,256 Bbyte discan (0.00446 GB)
$0.0000253biaya

Pertanyaan yang sama, dua jawaban

BigQuery mengscan 4,455,256 byte pada query dashboard satu hari di atas -- sekitar 4.46 megabyte, praktis tidak ada apa-apanya untuk warehouse yang dibangun untuk skala petabyte -- karena daily-table pruning-nya bekerja tepat seperti yang direncanakan. Tetap saja butuh 0.98 detik.

Nanti di workshop ini, pertanyaan yang identik -- funnel satu hari yang sama, dikelompokkan dengan cara yang sama, dengan hitungan funnel yang sama -- diajukan ke baris-baris yang sama yang sudah duduk di tabel ClickHouse. Jawabannya keluar dalam 52 milidetik, untuk query yang bahkan sudah di-prune BigQuery hingga hanya beberapa megabyte:

0.98sBigQuery, setelah pruning ke 4.46 MB
52msClickHouse, pertanyaan sama, tanpa pruning
~19xlebih cepat -- tidak dijelaskan oleh byte yang dibaca

Itulah teka-tekinya, dinyatakan secara persis: dua sistem, pertanyaan yang sama, dan BigQuery sudah melakukan bagian yang seharusnya membuat query cepat -- membaca hampir tidak ada apa-apa -- dan tetap kalah sekitar 19 kali. Jika jaraknya soal jumlah byte yang discan, seharusnya jarak itu tidak ada sama sekali. Modul ini belum menjelaskan apa sebenarnya penyebabnya. Simpan kedua angka -- 0.98 detik dan 52 milidetik -- selama dua modul berikutnya, yang menaruh data yang sama di depan Anda dua kali lagi sebelum workshop ini mulai menjelaskan alasannya.

Di mana BigQuery memang menang

Ini bukan argumen bahwa BigQuery dibangun dengan buruk. BigQuery menyelesaikan masalah yang tidak bisa diselesaikan ClickHouse: arahkan ke petabyte yang belum pernah dimodelkan siapa pun, ajukan pertanyaan yang tidak diantisipasi siapa pun, dan BigQuery menjawab -- tanpa komitmen schema di awal, tanpa cluster yang harus disizing, tanpa service yang berjalan di antara pertanyaan. Zero operational surface adalah keunggulan nyata untuk analitik ad-hoc dan eksploratif di atas data yang belum dibentuk siapa pun. Workshop ini membahas masalah yang berbeda: dashboard dengan user nyata yang mengaksesnya secara konkuren, sebuah bentuk yang tidak dirancang untuk dilayani murah oleh model pricing dan concurrency BigQuery.

Selesai jika

Anda bisa menyatakan ulang teka-tekinya dalam satu kalimat: pertanyaan funnel satu hari yang sama, diajukan ke baris yang sama, butuh 0.98 detik di BigQuery setelah scan-nya di-prune hingga 4.46 megabyte, dan 52 milidetik di ClickHouse -- dan jarak itu tidak dijelaskan oleh seberapa banyak data yang dibaca kedua sistem. Lanjut ke 02 Query di tempat.

Di halaman ini

Track your progress?

Optional. We email a link to confirm your address; progress records once you open it.

Please use your work email address, not a personal one.

Progress tracking also requires accepting the current Terms of Service in Privacy settings.

ID