Esporta dati in Pub/Sub (ETL inverso)
Questo documento descrive come configurare l'estrazione inversa, la trasformazione e il caricamento
(RETL) da
da BigQuery a Pub/Sub.
Puoi eseguire questa operazione utilizzando
Dichiarazione EXPORT DATA
in una query continua
esportare dati da BigQuery a
Argomento Pub/Sub.
Puoi utilizzare un flusso di lavoro RETL in Pub/Sub per combinare le funzionalità di analisi di BigQuery con il protocollo Pub/Sub servizio di messaggistica globale asincrono e scalabile. Questo flusso di lavoro consente e fornire dati ad applicazioni e servizi downstream in base a eventi.
Prerequisiti
Devi creare un account di servizio. R account di servizio necessaria per eseguire una query continua che esporta i risultati in una Pub/Sub.
Devi creare un'istanza Argomento Pub/Sub per ricevere i risultati delle query continue sotto forma di messaggi e 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 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
)
Affinché l'account di servizio possa accedere a Pub/Sub, devi concedere la classe account di servizio per entrambi i seguenti ruoli IAM:
Potresti anche riuscire a ottenere le autorizzazioni richieste ruoli personalizzati.
Prima di iniziare
Abilita le API BigQuery and Pub/Sub.
Esporta in Pub/Sub
Utilizza la
Dichiarazione EXPORT DATA
per esportare i dati in un argomento Pub/Sub:
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor query, fai clic su Altro > Impostazioni query.
Nella sezione Query continua, seleziona il Casella di controllo Utilizza la modalità di query continua.
Nella casella Account di servizio, seleziona l'account di servizio è stato creato.
Fai clic su Salva.
Nell'editor 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 dal Pagina Argomenti della console Google Cloud.QUERY
: l'istruzione SQL per selezionare i dati da esportare. 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.
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 \ '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
: il servizio l'indirizzo email dell'account. Puoi ricevere l'email dell'account di servizio sul Pagina Account di servizio della console Google Cloud.QUERY
: l'istruzione SQL per selezionare i dati da esportare. L'istruzione SQL deve contenere solo operative supportate.
- Imposta il flag
API
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":"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 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
Esporta più colonne in Pub/Sub
Per includere più colonne nell'output, puoi creare uno struct
colonna per contenere i valori della colonna e converti il valore struct
in una stringa JSON utilizzando
Funzione TO_JSON_STRING
.
L'esempio seguente esporta i dati da quattro colonne, formattate come JSON
stringa:
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 le prestazioni del job di query continua sembrano essere limitate
risorse di computing disponibili,
prova ad aumentare le dimensioni
Assegnazione di una prenotazione di slot per CONTINUOUS
.
Limitazioni
- I dati esportati devono essere costituiti da un'unica
STRING
oppure ColonnaBYTES
. Puoi scegliere il nome della colonna. - Devi utilizzare un parametro una query continua su e esportarlo in Pub/Sub.
- Non puoi passare uno schema a un argomento Pub/Sub nella una query continua.
- Non puoi esportare i dati in un argomento Pub/Sub che utilizza un .
- Non puoi esportare dati che contengono
NULL
valori. Puoi escludereNULL
dai risultati della query includendo unWHERE 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, gli addebiti vengono effettuati utilizzando
Prezzi di calcolo della capacità di BigQuery.
Per eseguire query continue, è necessario avere un
prenotazione che utilizza
Versione Enterprise o Enterprise Plus,
e un'assegnazione di prenotazione
che utilizza il tipo di job CONTINUOUS
.
Dopo l'esportazione dei dati, ti viene addebitato il costo per l'utilizzo di Pub/Sub. Per ulteriori informazioni, vedi Prezzi di Pub/Sub.