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 JOIN yang didukung; bentuk lain, seperti LEFT atau FULL OUTER, tidak didukung.
  • Setiap sisi operasi INNER JOIN harus menentukan waktu mulai untuk kueri berkelanjutan.
  • Selain kunci gabungan (misalnya, table1.user_id = table2.user_id), klausa JOIN harus 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 APPENDS yang didukung. Fungsi CHANGES tidak 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