Menggunakan gabungan stream-ke-stream dalam kueri berkelanjutan
Untuk meminta dukungan atau memberikan masukan terkait fitur ini, kirim email ke bq-continuous-queries-feedback@google.com.
Kueri berkelanjutan mendukung JOIN sebagai operasi stateful. Operasi stateful
memungkinkan kueri berkelanjutan melakukan analisis kompleks yang memerlukan retensi
informasi di beberapa baris atau interval waktu. Kemampuan ini memungkinkan Anda mengorelasikan peristiwa dari berbagai aliran dengan menyimpan data yang diperlukan dalam memori saat kueri berjalan. Untuk mengetahui informasi selengkapnya tentang operasi stateful, lihat
Operasi stateful yang didukung.
Gabungan streaming-ke-streaming adalah operasi gabungan antara dua tabel atau lebih yang menerima penyerapan data berorientasi waktu.
Jenis JOIN yang didukung
Jenis JOIN berikut didukung oleh kueri berkelanjutan:
- JOIN stream-ke-stream-operasi gabungan antara dua tabel atau lebih yang menerima penyerapan data berorientasi waktu.
- INNER JOIN.
Jenis JOIN yang tidak didukung
Jenis JOIN berikut tidak didukung oleh kueri berkelanjutan:
- Penggabungan stream-ke-tabel statis-penggabungan yang setidaknya satu tabel yang digabungkan adalah tabel statis yang tidak menerima penyerapan data berorientasi waktu. Contoh tabel statis adalah tabel dimensi.
- Bentuk operasi JOIN lainnya selain
INNER. - JOIN yang tidak memiliki klausa JOIN berorientasi waktu.
Menggabungkan data dari beberapa aliran
Kueri berikut menunjukkan cara menggabungkan tabel perjalanan taksi ke tabel permintaan taksi dan mengidentifikasi taksi terdekat yang tersedia bagi pemohon dalam jangka waktu 5 menit, serta mengekspor data ini ke tabel BigQuery lain:
INSERT INTO
`real_time_taxi_streaming.matched_rides`
SELECT
requests.timestamp AS request_time,
requests.request_id,
taxis.taxi_id,
ST_DISTANCE(
ST_GEOGPOINT(requests.longitude, requests.latitude),
ST_GEOGPOINT(taxis.longitude, taxis.latitude)
) AS distance_in_meters,
taxis.timestamp AS taxi_available_time
FROM
APPENDS (TABLE `real_time_taxi_streaming.ride_requests`,
CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE) AS requests
INNER JOIN
APPENDS (TABLE `real_time_taxi_streaming.taxirides`,
CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE) AS taxis
ON
requests.geohash = taxis.geohash
WHERE
taxis.ride_status = 'available'
AND taxis._CHANGE_TIMESTAMP BETWEEN(requests._CHANGE_TIMESTAMP - INTERVAL 5 MINUTE) AND requests._CHANGE_TIMESTAMP
AND ST_DWITHIN(
ST_GEOGPOINT(requests.longitude, requests.latitude),
ST_GEOGPOINT(taxis.longitude, taxis.latitude),
2000 -- Distance in meters
);
Pertimbangan bergabung
Bagian berikut menjelaskan pertimbangan yang diperlukan saat melakukan penggabungan stream-ke-stream.
Batasan
- Hanya operasi
INNER JOINyang didukung; bentuk lain, sepertiLEFTatauFULL OUTER, tidak didukung. - Setiap sisi operasi
INNER JOINharus menentukan waktu mulai untuk kueri berkelanjutan. - Selain kunci gabungan (misalnya,
table1.user_id = table2.user_id), klausaJOINharus menyertakan kondisi untuk membatasi kolom stempel waktu ke interval konstan. Kondisi ini membatasi durasi sistem menunggu peristiwa yang cocok tiba di aliran data lainnya. Misalnya, Anda dapat menentukan bahwa peristiwa dari satu aliran hanya dapat digabungkan dengan peristiwa dari aliran lain jika stempel waktunya berada dalam interval 5 menit. Anda tidak terbatas pada interval simetris. Misalnya, Anda dapat menggunakan interval 5 menit di satu sisi kondisi gabungan dan interval 1 jam di sisi lainnya. - Saat memulai kueri berkelanjutan dengan gabungan stream-ke-stream, hanya fungsi
APPENDSyang didukung. FungsiCHANGEStidak didukung. - Kolom waktu sistem BigQuery, yang ditentukan oleh
_CHANGE_TIMESTAMP, adalah satu-satunya kolom stempel waktu yang didukung untuk operasi penggabungan. Kolom yang ditentukan pengguna tidak didukung. - Jika digunakan bersama dengan agregasi berperiode, Anda harus mengikuti semua batasan agregasi berperiode yang didokumentasikan.
Pertimbangan harga
Kueri berkelanjutan BigQuery ditagih berdasarkan kapasitas
komputasi (slot) yang digunakan saat
pekerjaan sedang berjalan. Model berbasis komputasi ini juga berlaku untuk operasi stateful seperti penggabungan. Karena penggabungan memerlukan sistem
untuk menyimpan "status" saat kueri aktif, penggabungan menggunakan resource
slot tambahan. Konteks atau data lainnya yang disimpan dalam gabungan—misalnya, saat Anda menggunakan interval waktu yang lebih panjang dalam klausa JOIN atau WHERE—memerlukan lebih banyak status yang dipertahankan, sehingga menyebabkan pemanfaatan slot yang lebih tinggi.
Langkah berikutnya
- Pelajari lebih lanjut kueri berkelanjutan BigQuery.
- Pelajari cara menggunakan agregasi jendela.
- Pelajari cara melakukan JOIN, agregasi, dan windowing.