Utilizzare i join stream-to-stream nelle query continue
Per richiedere assistenza o fornire un feedback su questa funzionalità, invia un'email all'indirizzo bq-continuous-queries-feedback@google.com.
Le query continue supportano JOIN come operazione stateful. Le operazioni stateful
consentono alle query continue di eseguire analisi complesse che richiedono la conservazione
di informazioni su più righe o intervalli di tempo. Questa funzionalità ti consente di correlare eventi di stream diversi memorizzando i dati necessari in memoria durante l'esecuzione della query. Per saperne di più sulle operazioni stateful, consulta
Operazioni stateful supportate.
I join stream-to-stream sono un'operazione di join tra due o più tabelle che ricevono l'importazione dati orientati al tempo.
Tipi di JOIN supportati
I seguenti tipi di JOIN sono supportati dalle query continue:
- JOIN da stream a stream: un'operazione di join tra due o più tabelle che ricevono l'importazione dati orientati al tempo.
- INNER JOIN.
Tipi di JOIN non supportati
I seguenti tipi di JOIN non sono supportati dalle query continue:
- JOIN da flusso a tabella statica: un'unione in cui almeno una tabella unita è una tabella statica che non riceve l'importazione datii orientati al tempo. Un esempio di tabella statica è una tabella delle dimensioni.
- Altre forme di operazioni JOIN oltre a
INNER. - JOIN che non hanno clausole JOIN orientate al tempo.
Unire i dati di più stream
La seguente query mostra come unire una tabella delle corse in taxi a una tabella delle richieste di taxi e identificare il taxi disponibile più vicino al richiedente entro un intervallo di tempo di 5 minuti ed esportare questi dati in un'altra tabella BigQuery:
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
);
Considerazioni per la partecipazione
Le sezioni seguenti descrivono le considerazioni necessarie quando esegui un'unione stream-to-stream.
Limitazioni
- Sono supportate solo le operazioni
INNER JOIN; altre forme, comeLEFToFULL OUTER, non sono supportate. - Ogni lato dell'operazione
INNER JOINdeve specificare un'ora di inizio per la query continua. - Oltre a una chiave di join (ad esempio
table1.user_id = table2.user_id), la clausolaJOINdeve includere una condizione per limitare la colonna del timestamp a un intervallo costante. Questa condizione limita il tempo in cui il sistema attende l'arrivo di un evento corrispondente nell'altro stream. Ad esempio, puoi specificare che un evento di un flusso può essere unito a un evento di un altro solo se i relativi timestamp rientrano in un intervallo di 5 minuti. Non sei limitato a intervalli simmetrici. Ad esempio, puoi utilizzare un intervallo di 5 minuti su un lato della condizione di join e un intervallo di 1 ora sull'altro. - Quando avvii una query continua con un'unione stream-to-stream, è supportata solo la funzione
APPENDS. La funzioneCHANGESnon è supportata. - La colonna dell'ora di sistema BigQuery, definita da
_CHANGE_TIMESTAMP, è l'unica colonna timestamp supportata per le operazioni di join. Le colonne definite dall'utente non sono supportate. - Se utilizzate insieme alle aggregazioni in finestra, dovete rispettare tutte le limitazioni documentate per l'aggregazione in finestra.
Considerazioni sui prezzi
Le query continue di BigQuery vengono fatturate in base alla capacità di calcolo (slot) consumata durante l'esecuzione del
job. Questo modello basato sul calcolo
si applica anche alle operazioni stateful come i join. Poiché i join richiedono al sistema
di memorizzare lo "stato" mentre la query è attiva, consumano risorse slot aggiuntive. Un contesto o dati più ampi memorizzati all'interno di un'unione, ad esempio quando utilizzi
intervalli di tempo più lunghi nella clausola JOIN o WHERE, richiedono di conservare più
stato, il che comporta un maggiore utilizzo degli slot.
Passaggi successivi
- Scopri di più sulle query continue di BigQuery.
- Scopri come utilizzare l'aggregazione delle finestre.
- Scopri come eseguire JOIN, aggregazioni e finestre.