Memahami agregasi jendela dalam kueri berkelanjutan
Untuk meminta dukungan atau memberikan masukan terkait fitur ini, kirim email ke bq-continuous-queries-feedback@google.com.
Kueri berkelanjutan BigQuery mendukung agregasi dan windowing sebagai operasi stateful. Operasi stateful memungkinkan kueri berkelanjutan melakukan analisis kompleks yang memerlukan penyimpanan informasi di beberapa baris atau interval waktu. Kemampuan ini memungkinkan Anda menghitung metrik dari waktu ke waktu—seperti rata-rata 30 menit—dengan menyimpan data yang diperlukan dalam memori saat kueri berjalan.
Fungsi windowing menetapkan data ke dalam komponen logis, atau jendela, berdasarkan
waktu sistem, yang menunjukkan waktu penerapan transaksi yang membuat
perubahan. Di BigQuery, fungsi ini adalah fungsi bernilai tabel (TVF) yang menampilkan tabel yang mencakup semua kolom asli dan dua kolom tambahan: window_start dan window_end. Kolom ini mengidentifikasi interval waktu untuk setiap jendela. Untuk mengetahui informasi selengkapnya tentang operasi stateful, lihat Operasi stateful yang didukung.
TVF jendela hanya didukung dengan kueri berkelanjutan BigQuery.
TVF windowing berbeda dengan panggilan fungsi jendela.
Fungsi agregasi yang didukung
Fungsi agregasi berikut didukung:
ANY_VALUEAPPROX_COUNT_DISTINCTAPPROX_QUANTILESAPPROX_TOP_COUNTAPPROX_TOP_SUMARRAY_AGGdengan persyaratan berikut:- Klausul
LIMITwajib diisi, dengan nilai maksimum 100. - Klausa
ORDER BYbersifat opsional.
- Klausul
ARRAY_CONCAT_AGGAVGBIT_ANDBIT_ORBIT_XORCORRCOUNTCOUNTIFCOVAR_POPCOVAR_SAMPLOGICAL_ANDLOGICAL_ORMAXMAX_BYMINMIN_BYSTDDEVSTDDEV_POPSTDDEV_SAMPSTRING_AGGdengan persyaratan berikut:- Klausul
LIMITwajib diisi, dengan nilai maksimum 100. - Klausa
ORDER BYbersifat opsional.
- Klausul
SUMVAR_POPVAR_SAMPVARIANCE
Fungsi agregasi yang tidak didukung
Fungsi agregasi berikut tidak didukung:
AVG(Privasi Diferensial)COUNT(Privasi Diferensial)- Fungsi yang berisi ekspresi
DISTINCT. GROUPINGPERCENTILE_CONT(Privasi Diferensial)ST_CENTROID_AGGST_EXTENTST_UNION_AGGSUM(Privasi Diferensial)
Fungsi TUMBLE
Fungsi TUMBLE menetapkan data ke dalam interval waktu yang tidak tumpang-tindih (periode tumbling) dengan ukuran yang ditentukan. Misalnya, periode 5 menit mengelompokkan peristiwa ke dalam interval diskrit seperti [2026-01-01 12:00:00, 2026-01-01 12:05:00) dan [2026-01-01 12:05:00, 2026-01-01 12:10:00). Baris dengan nilai stempel waktu 2026-01-01 12:03:18 ditetapkan ke periode pertama. Karena periode ini terpisah dan tidak tumpang-tindih, setiap elemen dengan stempel waktu ditetapkan ke tepat satu periode.
Diagram berikut menunjukkan cara fungsi TUMBLE menetapkan peristiwa ke dalam
interval waktu yang tidak tumpang-tindih:
Anda dapat menggunakan fungsi ini dalam pemrosesan peristiwa real-time untuk mengelompokkan peristiwa menurut rentang waktu sebelum melakukan agregasi.
Sintaksis
TUMBLE(TABLE table, "timestamp_column", window_size)
Definisi
table: Nama tabel BigQuery. Ini harus berupa tabel BigQuery standar yang di-wrap dalam fungsiAPPENDS. KataTABLEharus mendahului argumen ini.timestamp_column: LiteralSTRINGyang menentukan nama kolom dalam tabel input yang berisi waktu peristiwa. Nilai dalam kolom ini menetapkan setiap baris ke jendela. Kolom_CHANGE_TIMESTAMP, yang menentukan waktu sistem BigQuery, adalah satu-satunyatimestamp_columnyang didukung. Kolom yang ditentukan pengguna tidak didukung.window_size: NilaiINTERVALyang menentukan durasi setiap periode geser. Ukuran jendela dapat mencapai maksimum 24 jam. Misalnya:INTERVAL 30 SECOND.
Output
Fungsi TUMBLE menampilkan output dengan kolom berikut:
Semua kolom tabel input pada saat kueri dijalankan.
window_start: NilaiTIMESTAMPyang menunjukkan waktu mulai inklusif periode yang menjadi bagian dari data.window_end: NilaiTIMESTAMPyang menunjukkan waktu berakhir eksklusif periode tempat data berada.
Materialisasi output
Dalam kueri berkelanjutan BigQuery, agregasi berwindow tidak menghasilkan output untuk interval waktu tertentu hingga BigQuery menyelesaikan atau menutup window tersebut. Perilaku ini memastikan bahwa BigQuery hanya mengeluarkan hasil gabungan setelah memproses semua data yang relevan untuk periode tersebut.
Misalnya, jika Anda melakukan agregasi jendela TUMBLE selama 5 menit pada tabel
user_clickstream, hasil untuk interval [10:15; 10:20) hanya akan
dikeluarkan setelah kueri memproses rekaman dengan _CHANGE_TIMESTAMP 10:20 atau
lebih baru. Pada saat itu, BigQuery menganggap jendela telah ditutup.
Selain itu, jendela dibuka dan mulai mengumpulkan data saat rekaman
pertama yang termasuk dalam rentang waktu tertentu muncul.
Selama jendela tetap terbuka, BigQuery harus mempertahankan hasil agregasi perantara. Hal ini memerlukan penyimpanan status, yang berarti BigQuery harus mempertahankan hasil agregasi sementara. Karena status ini harus tetap berada dalam memori aktif hingga jendela ditutup, penggunaan durasi jendela yang lebih lama atau pemrosesan aliran bervolume tinggi menyebabkan pemanfaatan slot yang lebih tinggi untuk mengelola peningkatan jumlah konteks yang disimpan. Untuk mengetahui informasi selengkapnya, lihat Pertimbangan harga.
Batasan
- Fungsi
TUMBLEhanya didukung dalam kueri berkelanjutan BigQuery. - Saat memulai kueri berkelanjutan dengan fungsi
TUMBLE, Anda hanya dapat menggunakan fungsiAPPENDS. FungsiCHANGEStidak didukung. - Kolom waktu sistem BigQuery yang ditentukan oleh
_CHANGE_TIMESTAMPadalah satu-satunyatimestamp_columnyang didukung. Kolom yang ditentukan pengguna tidak didukung. - Ukuran jendela dapat mencapai maksimum 24 jam.
- Saat fungsi windowing
TUMBLEberjalan, fungsi ini akan menghasilkan dua kolom output tambahan:window_startdanwindow_end. Anda harus menyertakan setidaknya satu kolom ini dalam pernyataanGROUP BYdi dalam pernyataanSELECTyang melakukan agregasi jendela. - Saat menggunakan fungsi
TUMBLEdengan gabungan kueri berkelanjutan, Anda harus mengikuti semua batasan gabungan kueri berkelanjutan.
Pertimbangan harga
Kueri berkelanjutan BigQuery menagih Anda berdasarkan kapasitas komputasi (slot) yang digunakan saat tugas berjalan. Model berbasis komputasi ini juga berlaku untuk operasi stateful seperti windowing. Karena memerlukan BigQuery untuk menyimpan "status" saat kueri aktif, pemberian jendela menggunakan resource slot tambahan. Secara umum, semakin banyak konteks atau data yang disimpan dalam jendela—seperti saat menggunakan durasi jendela yang lebih panjang—semakin banyak status yang harus dipertahankan BigQuery. Hal ini menghasilkan pemanfaatan slot yang lebih tinggi.
Contoh
Kueri berikut menunjukkan cara mengkueri tabel perjalanan taksi untuk mendapatkan jumlah perjalanan rata-rata streaming, jumlah penumpang, dan tarif rata-rata per taksi setiap 30 menit, serta mengekspor data ini ke dalam tabel di BigQuery:
INSERT INTO
`real_time_taxi_streaming.driver_stats`
WITH ride_completions AS (
SELECT
_CHANGE_TIMESTAMP as bq_changed_ts,
CAST(timestamp AS DATE) AS ride_date,
taxi_id,
meter_reading,
passenger_count
FROM
APPENDS(TABLE `real_time_taxi_streaming.taxirides`,
CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE)
WHERE
ride_status = 'dropoff')
SELECT
ride_date,
window_end,
taxi_id,
COUNT(taxi_id) AS total_rides_per_half_hour,
ROUND(AVG(meter_reading),2) AS avg_fare_per_half_hour,
SUM(passenger_count) AS total_passengers_per_half_hour
FROM
tumble(TABLE ride_completions,"bq_changed_ts",INTERVAL 30 MINUTE)
GROUP BY
window_end,
ride_date,
taxi_id
Langkah berikutnya
- Pelajari cara melakukan JOIN, agregasi, dan windowing.
- Pelajari lebih lanjut kueri berkelanjutan BigQuery.
- Pelajari cara menggabungkan data dari beberapa aliran.