Crea query continue
Questo documento descrive come eseguire una in BigQuery.
Le query continue di BigQuery sono istruzioni SQL che eseguono senza interruzioni. Le query continue consentono di analizzare i dati in entrata BigQuery in tempo reale, quindi esporta i risultati in Bigtable o Pub/Sub oppure scrivi i risultati in un Tabella BigQuery.
Scegli un tipo di account
Puoi creare ed eseguire un job di query continuo utilizzando un account utente oppure puoi creare un job di query continuo utilizzando un account utente ed eseguirlo mediante un account di servizio. Devi utilizzare un account di servizio per eseguire una query continua che esporta in un argomento Pub/Sub.
Quando utilizzi un account utente, l'esecuzione di una query continua per due giorni. Quando utilizzi un account di servizio, e l'esecuzione di una query continua fino a quando non viene annullata esplicitamente. Per ulteriori informazioni, vedi Autorizzazione.
Autorizzazioni obbligatorie
Questa sezione descrive le autorizzazioni necessarie per creare ed eseguire un una query continua. Come alternativa ai ruoli Identity and Access Management (IAM) di cui abbiamo parlato, potresti ottenere le autorizzazioni richieste ruoli personalizzati.
Autorizzazioni quando si utilizza un account utente
Questa sezione fornisce informazioni sui ruoli e sulle autorizzazioni richiesti per creare ed eseguire una query continua utilizzando un account utente.
Per creare un job in BigQuery, l'account utente deve avere
Autorizzazione IAM bigquery.jobs.create
. Ciascuno dei
i seguenti ruoli IAM concedeno l'autorizzazione bigquery.jobs.create
:
- Utente BigQuery (
roles/bigquery.user
) - Utente job BigQuery (
roles/bigquery.jobUser
) - Amministratore BigQuery (
roles/bigquery.admin
)
Per esportare i dati da una tabella BigQuery, l'account utente deve avere
l'autorizzazione IAM bigquery.tables.export
. Ciascuno dei
i seguenti ruoli IAM concedeno l'errore bigquery.tables.export
autorizzazione:
- Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) - Editor dati BigQuery (
roles/bigquery.dataEditor
) - Proprietario dati BigQuery (
roles/bigquery.dataOwner
) - Amministratore BigQuery (
roles/bigquery.admin
)
Per aggiornare i dati in una tabella BigQuery, l'account utente deve avere
l'autorizzazione IAM bigquery.tables.updateData
. Ciascuno dei
i seguenti ruoli IAM concedeno l'errore bigquery.tables.updateData
autorizzazione:
- Editor dati BigQuery (
roles/bigquery.dataEditor
) - Proprietario dati BigQuery (
roles/bigquery.dataOwner
) - Amministratore BigQuery (
roles/bigquery.admin
)
Se l'account utente deve abilitare le API richieste per
caso d'uso di query continue, l'account utente deve avere
Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin
)
ruolo.
Autorizzazioni quando si utilizza un account di servizio
Questa sezione fornisce informazioni sui ruoli e sulle autorizzazioni richiesti per: l'account utente che crea la query continua e l'account di servizio che esegue la query continua.
Autorizzazioni account utente
Per creare un job in BigQuery, l'account utente deve avere
Autorizzazione IAM bigquery.jobs.create
. Ciascuno dei seguenti
I ruoli IAM concedono l'autorizzazione bigquery.jobs.create
:
- Utente BigQuery (
roles/bigquery.user
) - Utente job BigQuery (
roles/bigquery.jobUser
) - Amministratore BigQuery (
roles/bigquery.admin
)
Per inviare un job che viene eseguito utilizzando un account di servizio, l'account utente deve avere il valore
Utente account di servizio (roles/iam.serviceAccountUser
)
ruolo. Se utilizzi lo stesso account utente per creare l'account di servizio,
allora l'account utente deve avere
Amministratore account di servizio (roles/iam.serviceAccountAdmin
)
ruolo. Per informazioni su come limitare l'accesso di un utente a un singolo account di servizio,
invece che a tutti gli account di servizio all'interno di un progetto, vedi
Assegna un singolo ruolo.
Se l'account utente deve abilitare le API richieste per
caso d'uso di query continue, l'account utente deve avere
Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin
)
ruolo.
Autorizzazioni account di servizio
Per esportare i dati da una tabella BigQuery, l'account di servizio deve
dispongono dell'autorizzazione IAM bigquery.tables.export
. Ciascuno dei
i seguenti ruoli IAM concedeno l'errore bigquery.tables.export
autorizzazione:
- Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) - Editor dati BigQuery (
roles/bigquery.dataEditor
) - Proprietario dati BigQuery (
roles/bigquery.dataOwner
) - Amministratore BigQuery (
roles/bigquery.admin
)
bigquery.tables.updateData
. Ciascuno dei
i seguenti ruoli IAM concedeno l'errore bigquery.tables.updateData
autorizzazione:
- Editor dati BigQuery (
roles/bigquery.dataEditor
) - Proprietario dati BigQuery (
roles/bigquery.dataOwner
) - Amministratore BigQuery (
roles/bigquery.admin
)
Prima di iniziare
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API BigQuery.
Crea una prenotazione
Crea una prenotazione per la versione Enterprise o Enterprise Plus.
e poi
creare un'assegnazione di prenotazione
con un tipo di prestazione CONTINUOUS
.
Esporta in Pub/Sub
Le API, le autorizzazioni IAM e le risorse Google Cloud aggiuntive vengono necessaria per esportare i dati in Pub/Sub. Per ulteriori informazioni, vedi Esporta in Pub/Sub.
Esporta in Bigtable
API aggiuntive, autorizzazioni IAM e Google Cloud sono necessarie risorse per esportare i dati in Bigtable. Per maggiori informazioni le informazioni, vedi Esporta in Bigtable.
Scrivi dati in una tabella BigQuery
Puoi scrivere dati in una tabella BigQuery utilizzando un
INSERT
.
Utilizzare le funzioni di IA
API aggiuntive, autorizzazioni IAM e Google Cloud e risorse sono necessarie per utilizzare supportata di AI generativa in una query continua. Per ulteriori informazioni, consulta uno dei i seguenti argomenti, in base al tuo caso d'uso:
- Generare testo utilizzando la funzione
ML.GENERATE_TEXT
- Generare incorporamenti di testo utilizzando la funzione
ML.GENERATE_EMBEDDING
- Comprendere il testo con la funzione
ML.UNDERSTAND_TEXT
- Tradurre il testo con la funzione
ML.TRANSLATE
Quando utilizzi una funzione di AI in una query continua, valuta se la query l'output rimarrà all'interno quota per la funzione. Se superi la quota, potresti dover gestire separatamente i record non vengono elaborati.
Esegui una query continua utilizzando un account utente
Questa sezione descrive come eseguire una query continua utilizzando un account utente. Quando è in esecuzione la query continua, puoi chiudere la console Google Cloud una finestra del terminale o un'applicazione senza interrompere l'esecuzione della query.
Per eseguire una query continua, segui questi passaggi:
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor query, fai clic su Altro.
Nella sezione Scegli la modalità di query, scegli Query continua.
Fai clic su Conferma.
Nell'editor di query, digita l'istruzione SQL per la query continua. L'istruzione SQL deve contenere solo operative supportate.
Fai clic su Esegui.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
In Cloud Shell, esegui la query continua utilizzando Comando
bq query
con il flag--continuous
:bq query --use_legacy_sql=false --continuous=true 'QUERY'
Sostituisci
QUERY
con l'istruzione SQL per una query continua. L'istruzione SQL deve contenere solo operative supportate.
API
Esegui la query continua chiamando il metodo
Metodo jobs.insert
.
Devi impostare il campo continuous
su true
nella
JobConfigurationQuery
della Job
risorsa che trasmetti.
curl --request POST \ 'https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs --header 'Authorization: Bearer $(gcloud auth application-default print-access-token)' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data '("configuration":("continuous":true,"useLegacySql":false,"query":"QUERY"))' --compressed
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progetto.QUERY
: l'istruzione SQL per una query continua. L'istruzione SQL deve contenere solo operative supportate.
Esegui una query continua utilizzando un account di servizio
Questa sezione descrive come eseguire una query continua utilizzando un account di servizio. Quando è in esecuzione la query continua, puoi chiudere la console Google Cloud una finestra del terminale o un'applicazione senza interrompere l'esecuzione della query.
Segui questi passaggi per utilizzare un account di servizio ed eseguire una query continua:
Console
- Crea un account di servizio.
- Concedi la licenza richiesta autorizzazioni all'account di servizio.
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor query, fai clic su Altro.
Nella sezione Scegli la modalità di query, scegli Query continua.
Fai clic su Conferma.
Nell'editor query, fai clic su Altro > Impostazioni query.
Nella sezione Query continua, utilizza la casella Account di servizio. per selezionare l'account di servizio che hai creato.
Fai clic su Salva.
Nell'editor di query, digita l'istruzione SQL per la query continua. L'istruzione SQL deve contenere solo operative supportate.
Fai clic su Esegui.
bq
- Crea un account di servizio.
- Concedi la licenza richiesta autorizzazioni all'account di servizio.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Nella riga di comando, esegui la query continua utilizzando Comando
bq query
con i seguenti flag:- Imposta il flag
--continuous
sutrue
per rendere la query continua. - Utilizza il flag
--connection_property
per specificare un account di servizio da utilizzare.
bq query --project_id=PROJECT_ID --use_legacy_sql=false \ --continuous=true --connection_property=service_account=SERVICE_ACCOUNT_EMAIL \ 'QUERY'
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progetto.SERVICE_ACCOUNT_EMAIL
: il servizio l'indirizzo email dell'account. Puoi ricevere l'email dell'account di servizio dal Pagina Account di servizio della console Google Cloud.QUERY
: l'istruzione SQL per una query continua. L'istruzione SQL deve contenere solo operative supportate.
- Imposta il flag
API
- Crea un account di servizio.
- Concedi la licenza richiesta autorizzazioni all'account di servizio.
Esegui la query continua chiamando il metodo Metodo
jobs.insert
. Imposta i seguenti campi nellaJobConfigurationQuery
risorsa della risorsaJob
che trasmetti:- Imposta il campo
continuous
sutrue
per rendere la query continua. - Utilizza il campo
connection_property
per specificare un account di servizio da usare.
curl --request POST \ 'https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs --header 'Authorization: Bearer $(gcloud auth print-access-token) \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data '("configuration":("query":"QUERY","useLegacySql":false,"continuous":true,"connectionProperties":["key": "service_account","value":"SERVICE_ACCOUNT_EMAIL"]))' \ --compressed
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progetto.QUERY
: l'istruzione SQL per una query continua. L'istruzione SQL deve contenere solo operative supportate.SERVICE_ACCOUNT_EMAIL
: il servizio l'indirizzo email dell'account. Puoi ricevere l'email dell'account di servizio sul Pagina Account di servizio della console Google Cloud.
- Imposta il campo
Esempi
I seguenti esempi di SQL mostrano casi d'uso comuni per le query continue.
Esporta i dati in un argomento Pub/Sub
L'esempio seguente mostra una query continua che filtra i dati da una la tabella BigQuery che riceve informazioni sulle corse dei taxi in streaming, e pubblica i dati in un argomento Pub/Sub in tempo reale:
EXPORT DATA OPTIONS ( format = 'CLOUD_PUBSUB', uri = 'https://pubsub.googleapis.com/projects/myproject/topics/taxi-real-time-rides') AS ( SELECT TO_JSON_STRING( STRUCT( ride_id, timestamp, latitude, longitude)) AS message FROM `myproject.real_time_taxi_streaming.taxi_rides` WHERE ride_status = 'enroute' );
Esporta i dati in una tabella Bigtable
L'esempio seguente mostra una query continua che filtra i dati da una la tabella BigQuery che riceve informazioni sulle corse dei taxi in streaming, ed esporta i dati in una tabella Bigtable in tempo reale:
EXPORT DATA OPTIONS ( format = 'CLOUD_BIGTABLE', truncate = TRUE, overwrite = TRUE, uri = 'https://bigtable.googleapis.com/projects/myproject/instances/mybigtableinstance/tables/taxi-real-time-rides') AS ( SELECT CAST(CONCAT(ride_id, timestamp, latitude, longitude) AS STRING) AS rowkey, STRUCT( timestamp, latitude, longitude, meter_reading, ride_status, passenger_count) AS features FROM `myproject.real_time_taxi_streaming.taxirides` WHERE ride_status = 'enroute' );
Scrivi dati in una tabella BigQuery
L'esempio seguente mostra una query continua che filtra e trasforma i dati da una tabella BigQuery che riceve una corsa in taxi in streaming e poi scrive i dati in un'altra tabella BigQuery in tempo reale. Ciò rende i dati disponibili per ulteriori analisi a valle.
INSERT INTO `myproject.real_time_taxi_streaming.transformed_taxirides` SELECT timestamp, meter_reading, ride_status, passenger_count, ST_Distance( ST_GeogPoint(pickup_longitude, pickup_latitude), ST_GeogPoint(dropoff_longitude, dropoff_latitude)) AS euclidean_trip_distance, SAFE_DIVIDE(meter_reading, passenger_count) AS cost_per_passenger FROM `myproject.real_time_taxi_streaming.taxirides` WHERE ride_status = 'dropoff';
Elabora i dati utilizzando un modello Vertex AI
L'esempio seguente mostra una query continua che utilizza un Modello Vertex AI per generare una pubblicità per i passeggeri di taxi in base alla latitudine e longitudine correnti, quindi esporta i risultati in un argomento Pub/Sub in tempo reale:
EXPORT DATA OPTIONS ( format = 'CLOUD_PUBSUB', uri = 'https://pubsub.googleapis.com/projects/myproject/topics/taxi-real-time-rides') AS ( SELECT TO_JSON_STRING( STRUCT( ride_id, timestamp, latitude, longitude, prompt, ml_generate_text_llm_result)) AS message FROM ML.GENERATE_TEXT( MODEL `myproject.real_time_taxi_streaming.taxi_ml_generate_model`, ( SELECT timestamp, ride_id, latitude, longitude, CONCAT( 'Generate an ad based on the current latitude of ', latitude, ' and longitude of ', longitude) AS prompt FROM `myproject.real_time_taxi_streaming.taxirides` WHERE ride_status = 'enroute' ), STRUCT( 50 AS max_output_tokens, 1.0 AS temperature, 40 AS top_k, 1.0 AS top_p, TRUE AS flatten_json_output)) AS ml_output );
Avvia una query continua da un determinato momento
Quando avvii una query continua, questa elabora tutte le righe della tabella
da cui stai selezionando ed elabora le nuove righe man mano che arrivano. Se
vuoi saltare l'elaborazione di alcuni o di tutti i dati esistenti, puoi utilizzare
APPENDS
funzione di cronologia delle modifiche per avviare l'elaborazione da un determinato momento.
L'esempio seguente mostra come avviare una query continua da una particolare
in un momento specifico utilizzando la funzione APPENDS
:
EXPORT DATA OPTIONS (format = 'CLOUD_PUBSUB', uri = 'https://pubsub.googleapis.com/projects/myproject/topics/taxi-real-time-rides') AS ( SELECT TO_JSON_STRING(STRUCT(ride_id, timestamp, latitude, longitude)) AS message FROM APPENDS(TABLE `myproject.real_time_taxi_streaming.taxi_rides`, '2024-06-12 01:23:03.652423 UTC', NULL) WHERE ride_status = 'enroute');
Modifica l'SQL di una query continua
Non puoi aggiornare il codice SQL utilizzato in una query continua è in esecuzione. Devi annullare il job di query continuo, modificare l'SQL, e poi avviare un nuovo job di query continuo dal punto in cui l'hai arrestato. del job di query continua originale.
Segui questi passaggi per modificare il codice SQL utilizzato in una query continua:
- Visualizza i dettagli del job per che vuoi aggiornare e prendi nota dell'ID job.
- Se possibile, metti in pausa la raccolta dei dati upstream. Se non puoi farlo, potrebbe verificarsi la duplicazione dei dati quando la query continua viene riavviata.
- Annulla la query continua che desideri modificare.
Ottieni il valore
end_time
per il job di query continua originale utilizzando il metodoINFORMATION_SCHEMA
JOBS
vista:SELECT end_time FROM `PROJECT_ID.region-REGION`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE EXTRACT(DATE FROM creation_time) = current_date() AND error_result.reason = 'stopped' AND job_id = 'JOB_ID';
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progetto.REGION
: la regione utilizzata dal tuo progetto.JOB_ID
: l'ID del job di query continua che identificati nel Passaggio 1.
Modifica l'istruzione SQL di query continua in avviare la query continua da un determinato momento, utilizzando il valore
end_time
recuperato al passaggio 5 come punto di partenza punto di accesso.Modifica l'istruzione SQL della query continua per riflettere le modifiche necessarie.
Esegui la query continua modificata.
Annulla una query continua
Puoi annullare una query continua come qualsiasi altro lavoro. Potrebbe volerci fino a un minuto prima che la query verrà interrotto dopo l'annullamento del job.