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:

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:

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.

Enable the APIs

Esporta in Pub/Sub

Utilizza l'istruzione EXPORT DATA per esportare i dati in un argomento Pub/Sub:

Console

  1. Nella console Trusted Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor delle query, fai clic su Altro > Impostazioni query.

  3. Nella sezione Query continua, seleziona la casella di controllo Utilizza la modalità di query continua.

  4. Nella casella Service account, seleziona il account di servizio che hai creato.

  5. Fai clic su Salva.

  6. 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 funzione APPENDS nella clausola FROM di una query continua per specificare il punto nel tempo in cui iniziare a elaborare i dati.
  7. Fai clic su Esegui.

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. Nella riga di comando, esegui la query continua utilizzando il comando bq query con i seguenti flag:

    • Imposta il flag --continuous su true 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 funzione APPENDS nella clausola FROM di una query continua per specificare il punto nel tempo in cui iniziare a elaborare i dati.
  3. API

    1. Esegui la query continua chiamando il metodo jobs.insert. Imposta i seguenti campi nella risorsa JobConfigurationQuery della risorsa Job che trasmetti:

      • Imposta il campo continuous su true 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 funzione APPENDS nella clausola FROM 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.

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'CONTINUOUSassegnazione della prenotazione degli slot BigQuery.

Limitazioni

  • I dati esportati devono essere costituiti da una singola colonna STRING o BYTES. 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 valori NULL. Puoi escludere i record NULL dai risultati della query includendo un filtro WHERE 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.