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 periode. 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_CONCAT_AGGAVGBIT_ANDBIT_ORBIT_XORCORRCOUNTCOUNTIFCOVAR_POPCOVAR_SAMPLOGICAL_ANDLOGICAL_ORMAXMAX_BYMINMIN_BYSTDDEVSTDDEV_POPSTDDEV_SAMPSUMVAR_POPVAR_SAMPVARIANCE
Fungsi agregasi yang tidak didukung
Fungsi agregasi berikut tidak didukung:
ARRAY_AGGAVG(Privasi Diferensial)COUNT(Privasi Diferensial)- Fungsi yang berisi ekspresi
DISTINCT. GROUPINGPERCENTILE_CONT(Privasi Diferensial)ST_CENTROID_AGGST_EXTENTST_UNION_AGGSTRING_AGGSUM(Privasi Diferensial)
Fungsi TUMBLE
Fungsi TUMBLE menetapkan data ke dalam interval waktu yang tidak tumpang-tindih (tumbling window) dengan ukuran yang ditentukan. Misalnya, periode 5 menit mengelompokkan acara ke dalam interval terpisah 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 tidak berurutan 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 dienkapsulasi dalam fungsiAPPENDS. KataTABLEharus mendahului argumen ini.timestamp_column: LiteralSTRINGyang menentukan nama kolom dalam tabel input yang berisi waktu acara. 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 jendela bergulir. 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 berjalan.
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 5 menit pada tabel
user_clickstream, hasil untuk interval [10:15; 10:20) hanya
dikeluarkan setelah kueri memproses rekaman dengan _CHANGE_TIMESTAMP 10:20 atau
lebih baru. Pada saat itu, BigQuery menganggap jendela sudah ditutup.
Selain itu, jendela terbuka dan mulai mengumpulkan data saat rekaman
pertama yang termasuk dalam rentang waktu tertentu tersebut muncul.
Selama jendela tetap terbuka, BigQuery harus mempertahankan hasil agregasi perantara. Hal ini memerlukan penyimpanan status, yang berarti BigQuery harus mempertahankan hasil agregasi menengah. 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 BYdalam 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.