Esportare i dati in Pub/Sub (reverse ETL)
L'esportazione dei dati in Pub/Sub richiede l'utilizzo delle query continue di BigQuery. Per registrarti all'anteprima delle query continue, compila il modulo di richiesta. Per fornire un feedback o richiedere assistenza per questa funzionalità, contatta bq-continuous-queries-feedback@google.com.
Questo documento descrive come configurare l'estrazione, la trasformazione e il caricamento (RETL) inverso da BigQuery a Pub/Sub.
Per farlo, utilizza l'
istruzione EXPORT DATA
in una query continua per
esportare i dati da BigQuery in un
argomento Pub/Sub.
Puoi utilizzare un flusso di lavoro RETL per Pub/Sub per combinare le funzionalità di analisi di BigQuery con il servizio di messaggistica globale asincrono e scalabile di Pub/Sub. Questo flusso di lavoro consente di pubblicare i dati in applicazioni e servizi a valle in modo basato su eventi.
Prerequisiti
Devi creare un account di servizio. Per eseguire una query continua che esporta i risultati in un argomento Pub/Sub è necessario un account di servizio.
Devi creare un argomento Pub/Sub per ricevere i risultati delle query continue sotto forma di messaggi e una sottoscrizione Pub/Sub che l'applicazione di destinazione può utilizzare per ricevere questi messaggi.
Ruoli obbligatori
Questa sezione fornisce informazioni sui ruoli e sulle autorizzazioni richiesti dall'account utente che crea la query continua e dall'account di servizio che esegue la query continua.
Autorizzazioni dell'account utente
Per creare un job in BigQuery, l'account utente deve disporre dell'autorizzazione IAM bigquery.jobs.create
. Ciascuno dei seguenti ruoli IAM concede 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 disporre del ruolo Utente account di servizio (roles/iam.serviceAccountUser
). Se utilizzi lo stesso account utente per creare l'account di servizio, questo deve disporre del ruolo Amministratore account di servizio (roles/iam.serviceAccountAdmin
). Per informazioni su come limitare l'accesso di un utente a un singolo account di servizio,
piuttosto che a tutti gli account di servizio all'interno di un progetto, consulta
Concedere un singolo ruolo.
Se l'account utente deve attivare le API richieste per il tuo caso d'uso di query continue, deve disporre del ruolo Amministratore utilizzo servizio (roles/serviceusage.serviceUsageAdmin
).
Autorizzazioni service account
Per esportare i dati da una tabella BigQuery, l'account di servizio deve avere l'autorizzazione IAM bigquery.tables.export
. Ciascuno dei seguenti ruoli IAM concede l'autorizzazione bigquery.tables.export
:
- Visualizzatore dei dati BigQuery (
roles/bigquery.dataViewer
) - BigQuery Data Editor (
roles/bigquery.dataEditor
) - Proprietario dei dati BigQuery (
roles/bigquery.dataOwner
) - Amministratore BigQuery (
roles/bigquery.admin
)
Affinché l'account di servizio possa accedere a Pub/Sub, devi concedergli entrambi i seguenti ruoli IAM:
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati.
Prima di iniziare
Enable the BigQuery and Pub/Sub APIs.
Esporta in Pub/Sub
Utilizza l'
istruzione EXPORT DATA
per esportare i dati in un argomento Pub/Sub:
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor delle query, fai clic su Altro > Impostazioni query.
Nella sezione Query continua, seleziona la casella di controllo Utilizza la modalità di query continua.
Nella casella Account di servizio, seleziona l'account di servizio che hai creato.
Fai clic su Salva.
Nell'editor di query, inserisci la seguente istruzione:
EXPORT DATA OPTIONS ( format = 'CLOUD_PUBSUB', uri = 'https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID' ) AS ( QUERY );
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progetto.TOPIC_ID
: l'ID argomento Pub/Sub. Puoi ottenere l'ID argomento dalla pagina Argomenti della console Google Cloud.QUERY
: l'istruzione SQL per selezionare i dati da esportare. L'istruzione SQL deve contenere solo operazioni 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.
Nella riga di comando, esegui la query continua utilizzando il 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 \ 'EXPORT DATA OPTIONS (format = "CLOUD_PUBSUB", uri = "https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID") AS (QUERY);'
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progetto.SERVICE_ACCOUNT_EMAIL
: l'indirizzo email dell'account di servizio. Puoi recuperare l'indirizzo email dell'account di servizio nella pagina Account di servizio della console Google Cloud.QUERY
: l'istruzione SQL per selezionare i dati da esportare. L'istruzione SQL deve contenere solo operazioni supportate.
- Imposta il flag
API
Esegui la query continua chiamando il metodo
jobs.insert
. Imposta i seguenti campi nella risorsaJobConfigurationQuery
della risorsaJob
che passi:- Imposta il campo
continuous
sutrue
per rendere la query continua. - Utilizza il campo
connection_property
per specificare un account di servizio da utilizzare.
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":"EXPORT DATA OPTIONS (format = 'CLOUD_PUBSUB', uri = 'https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID') AS (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 selezionare i dati da esportare. L'istruzione SQL deve contenere solo operazioni supportate.SERVICE_ACCOUNT_EMAIL
: l'indirizzo email dell'account di servizio. Puoi recuperare l'indirizzo email dell'account di servizio nella pagina Account di servizio della console Google Cloud.
- Imposta il campo
Esportare più colonne in Pub/Sub
Se vuoi includere più colonne nell'output, puoi creare una colonna struct per contenere i valori delle colonne e poi convertire il valore della struct in una stringa JSON utilizzando la funzione TO_JSON_STRING
.
L'esempio seguente esporta i dati da quattro colonne, formattati come stringa JSON:
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' );
Ottimizzazione dell'esportazione
Se il rendimento del job di query continua sembra essere limitato dalle risorse di calcolo disponibili, prova ad aumentare le dimensioni dell'CONTINUOUS
assegnazione della prenotazione dello slot di BigQuery.
Limitazioni
- I dati esportati devono essere costituiti da una singola colonna
STRING
oBYTES
. Il nome della colonna può essere qualsiasi. - Devi utilizzare una query continua per eseguire l'esportazione in Pub/Sub.
- Non puoi passare uno schema a un argomento Pub/Sub nella query continua.
- Non puoi esportare dati in un argomento Pub/Sub che utilizza uno schema.
- Non puoi esportare dati che contengono valori
NULL
. Puoi escludere i valoriNULL
dai risultati della query includendo un filtroWHERE message IS NOT NULL
nella query continua. - I dati esportati non devono superare le quote di Pub/Sub.
Prezzi
Quando esporti i dati in una query continua, la fatturazione avviene in base ai prezzi di calcolo della capacità di BigQuery.
Per eseguire query continue, devi disporre di una
prenotazione che utilizzi la
versione Enterprise o Enterprise Plus,
e di un'assegnazione della prenotazione
che utilizzi il tipo di job CONTINUOUS
.
Una volta esportati i dati, ti vengono addebitati i costi per l'utilizzo di Pub/Sub. Per ulteriori informazioni, consulta la sezione Prezzi di Pub/Sub.