Esportare dati in Pub/Sub (ETL inversa)
L'esportazione dei dati in Pub/Sub richiede l'utilizzo di query continue di BigQuery.
Questo documento descrive come configurare l'estrazione, la trasformazione e il caricamento inversi
(RETL) da
BigQuery a Pub/Sub.
Puoi farlo utilizzando l'istruzione
EXPORT DATA
in una query continua per
esportare i dati da BigQuery a un
argomento Pub/Sub.
Puoi utilizzare un flusso di lavoro RETL in 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 ti consente di fornire dati ad applicazioni e servizi downstream in modo basato sugli eventi.
Prerequisiti
Devi creare un service account. Per eseguire una query continua che esporta i risultati in un argomento Pub/Sub è necessario un service account.
Devi creare un argomento Pub/Sub per ricevere i risultati della query continua come 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 dalaccount di serviziot che esegue la query continua.
Autorizzazioni 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
) - BigQuery Admin (
roles/bigquery.admin
)
Per inviare un job che viene eseguito utilizzando un account di servizio, l'account utente deve disporre del ruolo
Utente service account (roles/iam.serviceAccountUser
). Se utilizzi lo stesso account utente per creare il account di servizio,
l'account utente deve disporre del ruolo
Amministratore service account (roles/iam.serviceAccountAdmin
). Per informazioni su come limitare l'accesso di un utente a un singolo account di servizio anziché a tutti gli account di servizio all'interno di un progetto, consulta Concedere un singolo ruolo.
Se l'account utente deve abilitare le API richieste per il tuo
caso d'uso delle query continue, deve disporre del
ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin
).
Autorizzazioni service account
Per esportare i dati da una tabella BigQuery, il account di servizio deve disporre dell'autorizzazione IAM bigquery.tables.export
. Ciascuno dei
seguenti ruoli IAM concede l'autorizzazione
bigquery.tables.export
:
- BigQuery Data Viewer (
roles/bigquery.dataViewer
) - Editor dati BigQuery (
roles/bigquery.dataEditor
) - Proprietario dati BigQuery (
roles/bigquery.dataOwner
) - BigQuery Admin (
roles/bigquery.admin
)
Affinché il 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 Trusted 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 Service account, seleziona il 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 Trusted Cloud .QUERY
: l'istruzione SQL per selezionare i dati da esportare. L'istruzione SQL deve contenere solo operazioni supportate. Devi utilizzare la funzioneAPPENDS
nella clausolaFROM
di una query continua per specificare il punto nel tempo in cui iniziare a elaborare i dati.
Fai clic su Esegui.
bq
-
In the Trusted Cloud console, activate Cloud Shell.
Nella riga di comando, esegui la query continua utilizzando il comando
bq query
con i seguenti flag:- Imposta il flag
--continuous
sutrue
per rendere continua la query. - 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'email del service account. Puoi ottenere l'email del account di servizio nella pagina Service account della Trusted Cloud console.QUERY
: l'istruzione SQL per selezionare i dati da esportare. L'istruzione SQL deve contenere solo operazioni supportate. Devi utilizzare la funzioneAPPENDS
nella clausolaFROM
di una query continua per specificare il punto nel tempo in cui iniziare a elaborare i dati.
- Imposta il flag
Esegui la query continua chiamando il metodo
jobs.insert
. Imposta i seguenti campi nella risorsaJobConfigurationQuery
della risorsaJob
che trasmetti:- Imposta il campo
continuous
sutrue
per rendere continua la query. - 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. Devi utilizzare la funzioneAPPENDS
nella clausolaFROM
di una query continua per specificare il punto nel tempo in cui iniziare a elaborare i dati.SERVICE_ACCOUNT_EMAIL
: l'email del service account. Puoi ottenere l'email del account di servizio nella pagina Service account della Trusted Cloud console.
- Imposta il campo
API
Esportare più colonne in Pub/Sub
Se vuoi includere più colonne nell'output, puoi creare una colonna struct
per contenere i valori delle colonne, quindi convertire il valore struct
in una stringa JSON utilizzando la
funzione TO_JSON_STRING
.
Il seguente esempio 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 APPENDS(TABLE `myproject.real_time_taxi_streaming.taxi_rides`, -- Configure the APPENDS TVF start_timestamp to specify when you want to -- start processing data using your continuous query. -- This example starts processing at 10 minutes before the current time. CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE) 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 degli slot BigQuery.
Limitazioni
- I dati esportati devono essere costituiti da una singola colonna
STRING
oBYTES
. Il nome della colonna può essere quello che preferisci. - Per esportare in Pub/Sub, devi utilizzare una query continua.
- 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.
- Quando esporti in Pub/Sub, puoi esportare record in formato JSON
in cui alcuni valori sono
NULL
, ma non puoi esportare record composti solo da valoriNULL
. Puoi escludere i recordNULL
dai risultati della query includendo un filtroWHERE message IS NOT NULL
nella query continua. - Quando esporti i dati in un argomento Pub/Sub configurato con un endpoint basato sulla località, l'endpoint deve essere configurato all'interno dello stesso confine Trusted Cloud regionale del set di dati BigQuery che contiene la tabella che stai interrogando.
- I dati esportati non devono superare le quote di Pub/Sub.
Prezzi
Quando esporti i dati in una query continua, la fatturazione viene eseguita utilizzando
i prezzi di calcolo della capacità di BigQuery.
Per eseguire query continue, devi disporre di una
prenotazione che utilizzi
Enterprise o Enterprise Plus,
e di un assegnazione di prenotazione
che utilizzi il tipo di job CONTINUOUS
.
Dopo l'esportazione dei dati, ti viene addebitato l'utilizzo di Pub/Sub. Per ulteriori informazioni, consulta la pagina Prezzi di Pub/Sub.