Menggunakan gabungan stream-ke-stream dalam kueri berkelanjutan
Di BigQuery, Anda dapat menggunakan gabungan stream-to-stream dalam kueri berkelanjutan untuk menganalisis dan menghubungkan data dari dua atau beberapa aliran data real-time. Gabungan stream-ke-stream adalah operasi gabungan antara dua tabel atau lebih yang menerima penyerapan data berorientasi waktu.
Kasus penggunaan umum untuk penggabungan stream-to-stream mencakup deteksi penipuan keuangan, membangun profil pelanggan, dan mengoptimalkan pengelolaan supply chain. Gabungan ini adalah jenis utama operasi stateful. Untuk mengetahui informasi selengkapnya tentang operasi stateful, lihat Operasi stateful yang didukung.
Jenis JOIN yang didukung
Jenis JOIN berikut didukung oleh kueri berkelanjutan:
- JOIN stream-ke-stream—operasi join 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:
- JOIN stream-ke-tabel-statis—gabungan 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 data
Kueri berikut menunjukkan cara menggabungkan tabel perjalanan taksi ke tabel permintaan taksi dan mengidentifikasi taksi terdekat yang tersedia untuk 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 penggabungan
Bagian berikut menjelaskan pertimbangan yang diperlukan saat melakukan gabungan 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 berapa lama sistem menunggu peristiwa yang cocok tiba di aliran data lain. Misalnya, Anda dapat menentukan bahwa peristiwa dari satu aliran data hanya dapat digabungkan dengan peristiwa dari aliran data 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 join 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 join. Kolom yang ditentukan pengguna tidak didukung. - Jika digunakan bersama dengan agregasi berjendela, Anda harus mengikuti semua batasan agregasi jendela yang terdokumentasi.
Pertimbangan harga
Kueri berkelanjutan BigQuery ditagih berdasarkan kapasitas komputasi (slot) yang digunakan saat tugas berjalan. Model berbasis komputasi ini juga berlaku untuk operasi stateful seperti join. Karena gabungan mengharuskan sistem
menyimpan "status" saat kueri aktif, gabungan menggunakan resource slot
tambahan. Lebih banyak konteks atau data yang disimpan dalam join—misalnya, saat Anda menggunakan
interval waktu yang lebih lama dalam klausa JOIN atau WHERE—memerlukan lebih banyak
status, yang 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.