Creare sottoscrizioni BigQuery

Questo documento descrive come creare un abbonamento BigQuery. Puoi utilizzare la console Trusted Cloud , Google Cloud CLI, la libreria client o l'API Pub/Sub per creare una sottoscrizione BigQuery.

Prima di iniziare

Prima di leggere questo documento, assicurati di conoscere quanto segue:

Oltre alla tua familiarità con Pub/Sub e BigQuery, assicurati di soddisfare i seguenti prerequisiti prima di creare una sottoscrizione BigQuery:

  • Esiste una tabella BigQuery. In alternativa, puoi crearne uno quando crei l'abbonamento BigQuery, come descritto nelle sezioni successive di questo documento.

  • Compatibilità tra lo schema dell'argomento Pub/Sub e la tabella BigQuery. Se aggiungi una tabella BigQuery non compatibile, riceverai un messaggio di errore relativo alla compatibilità. Per saperne di più, consulta la sezione Compatibilità dello schema.

Ruoli e autorizzazioni richiesti

Di seguito è riportato un elenco di linee guida relative a ruoli e autorizzazioni:

  • Per creare un abbonamento, devi configurare il controllo dell'accesso a livello di progetto.

  • Hai bisogno anche delle autorizzazioni a livello di risorsa se gli abbonamenti e gli argomenti si trovano in progetti diversi, come descritto più avanti in questa sezione.

  • Per creare una sottoscrizione BigQuery, l'agente di servizio Pub/Sub o un account di servizio personalizzato deve disporre dell'autorizzazione di scrittura nella tabella BigQuery specifica. Per ulteriori informazioni su come concedere queste autorizzazioni, consulta la sezione successiva di questo documento.

  • Puoi configurare una sottoscrizione BigQuery in un progetto per scrivere in una tabella BigQuery in un altro progetto.

Per ottenere le autorizzazioni necessarie per creare abbonamenti BigQuery, chiedi all'amministratore di concederti il ruolo IAM Editor Pub/Sub (roles/pubsub.editor) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per creare abbonamenti BigQuery. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per creare abbonamenti BigQuery sono necessarie le seguenti autorizzazioni:

  • Pull da un abbonamento: pubsub.subscriptions.consume
  • Crea un abbonamento: pubsub.subscriptions.create
  • Eliminare un abbonamento: pubsub.subscriptions.delete
  • Acquista un abbonamento: pubsub.subscriptions.get
  • Elenca un abbonamento: pubsub.subscriptions.list
  • Aggiornare un abbonamento: pubsub.subscriptions.update
  • Allegare un abbonamento a un argomento: pubsub.topics.attachSubscription
  • Recupera il criterio IAM per un abbonamento: pubsub.subscriptions.getIamPolicy
  • Configura il criterio IAM per un abbonamento: pubsub.subscriptions.setIamPolicy

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Per consentire a un principal in un progetto di creare un abbonamento BigQuery in un altro progetto, devi concedere a questo principal il ruolo Editor Pub/Sub (roles/pubsub.editor) in entrambi i progetti. Questo ruolo fornisce le autorizzazioni necessarie per creare il nuovo abbonamento BigQuery e collegarlo all'argomento originale. Il ruolo Editor Pub/Sub (roles/pubsub.editor) nell'argomento ti aiuta anche ad allegare sottoscrizioni BigQuery in un progetto diverso all'argomento.

Assegnare ruoli ai service account

Alcuni servizi Trusted Cloud by S3NS hanno service account Trusted Cloudgestiti che consentono ai servizi di accedere alle tue risorse. Questi service account sono noti come service agent. Pub/Sub crea e gestisce un service agent per ogni progetto nel formato service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

Puoi scegliere se consentire all'agente di servizio Pub/Sub o a un account di servizio personalizzato di scrivere nella tabella BigQuery.

La concessione dell'autorizzazione all'agente di servizio Pub/Sub significa che qualsiasi utente che dispone dell'autorizzazione per creare una sottoscrizione nel tuo progetto può scrivere nella tabella BigQuery. Se vuoi fornire un'autorizzazione più granulare per la scrittura nella tabella BigQuery, configura un account di servizio personalizzato.

Per saperne di più su BigQuery IAM, consulta Ruoli e autorizzazioni BigQuery.

Assegnare ruoli BigQuery all'agente di servizio Pub/Sub

Se vuoi creare una sottoscrizione BigQuery utilizzando l'agente di servizio Pub/Sub, questo deve disporre dell'autorizzazione per scrivere nella tabella BigQuery specifica e leggere i metadati della tabella.

Concedi al service agent Pub/Sub il ruolo Editor dati BigQuery (roles/bigquery.dataEditor). Puoi concedere l'autorizzazione su una singola tabella o sull'intero progetto.

Tabella

  1. Nella console Trusted Cloud , vai a BigQuery Studio.

    Vai a BigQuery Studio

  2. Nella casella di ricerca del riquadro Explorer con l'etichetta Filtra per nome ed etichette, digita il nome della tabella e premi Invio.

  3. Fai clic sulla tabella a cui vuoi concedere l'autorizzazione.

  4. Per la tabella, seleziona Altre azioni > Condividi > Autorizzazioni.

    In alternativa, fai clic sulla tabella e nella pagina principale fai clic su Condivisione > Autorizzazioni.

    Si apre la finestra Autorizzazioni di condivisione.

  5. Fai clic su Aggiungi entità.

  6. In Aggiungi entità, inserisci il nome dell'agente di servizio Pub/Sub per il progetto contenente l'abbonamento. Il formato dell'agente di servizio è service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com. Ad esempio, per un progetto con project-number=112233445566, l'agente di servizio ha il formato service-112233445566@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

  7. Nel menu a discesa Seleziona un ruolo, inserisci BigQuery e seleziona il ruolo Editor dati BigQuery.

  8. Fai clic su Salva.

Progetto

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

    Vai a IAM

  2. Fai clic su Concedi accesso.

  3. Nella sezione Aggiungi entità, inserisci il nome dell'agente di servizio Pub/Sub. Il formato dell'agente di servizio è service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com. Ad esempio, per un progetto con project-number=112233445566, l'agente di servizio ha il formato service-112233445566@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

  4. Nella sezione Assegna ruoli, fai clic su Aggiungi un altro ruolo.

  5. Nel menu a discesa Seleziona un ruolo, inserisci BigQuery e seleziona il ruolo Editor dati BigQuery.

  6. Fai clic su Salva.

Assegna ruoli BigQuery a un account di servizio personalizzato

Se vuoi utilizzare un account di servizio personalizzato per scrivere in una tabella BigQuery, devi impostare le seguenti autorizzazioni:

  • Il account di servizio personalizzato deve disporre dell'autorizzazione di scrittura nella tabella BigQuery specifica e di lettura dei metadati della tabella.
  • L'agente di servizio Pub/Sub deve disporre dell'autorizzazione iam.serviceAccounts.getAccessToken per il account di servizio personalizzato.
  • L'utente che crea l'abbonamento deve disporre dell'autorizzazione iam.serviceAccounts.actAs per il account di servizio personalizzato.

Crea il account di servizio e concedi le autorizzazioni seguendo questi passaggi:

  1. Crea il service account personalizzato. L'account di servizio deve trovarsi nello stesso progetto della sottoscrizione.

  2. Concedi il ruolo Editor dati BigQuery (roles/bigquery.dataEditor) all'account di servizio personalizzato.

    Puoi concedere l'autorizzazione all'account di servizio su una singola tabella nel progetto o su tutte le tabelle del progetto. Per farlo, consulta la sezione appropriata in Assegnare ruoli BigQuery all'agente di servizio Pub/Sub. Nella procedura, sostituisci l'indirizzo email dell'agente di servizio Pub/Sub con l'indirizzo email dell'account di servizio personalizzato.

  3. Concedi all'agente di servizio Pub/Sub l'autorizzazione iam.serviceAccounts.getAccessToken sull'account di servizio personalizzato o su tutti gli account di servizio nel progetto. Puoi concedere questa autorizzazione assegnando il ruolo roles/iam.serviceAccountTokenCreator all'agente di servizio Pub/Sub.

    Scegli il metodo appropriato in base ai tuoi requisiti.

Service account

  1. Nella Trusted Cloud console, vai alla pagina Service account.

    Vai ad Account di servizio

  2. Inserisci il nome del account di servizio personalizzato nel Filtro.

  3. Seleziona l'account di servizio dall'elenco.

  4. Fai clic su Entità con accesso.

  5. Fai clic su Concedi accesso.

  6. Nella sezione Aggiungi entità, inserisci il nome dell'agente di servizio Pub/Sub per il progetto contenente l'abbonamento. Il formato dell'agente di servizio è service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com. Ad esempio, per un progetto con project-number=112233445566, l'agente di servizio ha il formato service-112233445566@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

  7. Nel menu a discesa Seleziona un ruolo, inserisci Service Account e seleziona il ruolo Creatore token account di servizio.

  8. Fai clic su Salva.

Progetto

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

    Vai a IAM

  2. Fai clic su Concedi accesso.

  3. Nella sezione Aggiungi entità, inserisci il nome del tuo account di servizio personalizzato.

  4. Nella sezione Assegna ruoli, fai clic su Aggiungi un altro ruolo.

  5. Nel menu a discesa Seleziona un ruolo, inserisci Service Account e seleziona il ruolo Creatore token account di servizio.

  6. Fai clic su Salva.

Se hai creato il account di servizio personalizzato, dovresti già disporre dell'autorizzazione iam.serviceAccounts.actAs necessaria. Se devi concedere a un'altra persona l'autorizzazione per il account di servizio:

  1. Nella Trusted Cloud console, vai alla pagina Service account.

    Vai ad Account di servizio

  2. Inserisci il nome del account di servizio personalizzato nel Filtro.

  3. Seleziona l'account di servizio dall'elenco.

  4. Fai clic su Entità con accesso.

  5. Fai clic su Concedi accesso.

  6. Nella sezione Aggiungi entità, inserisci il nome dell'account a cui vuoi concedere l'accesso.

  7. Nel menu a discesa Seleziona un ruolo, inserisci Service Account e seleziona il ruolo Utente service account.

  8. Inoltre, se la tabella BigQuery è una tabella Apache Iceberg, concedi all'account di servizio Pub/Sub il ruolo Amministratore Storage (roles/storage.admin) per accedere al bucket Cloud Storage.

  9. Fai clic su Salva.

Proprietà della sottoscrizione BigQuery

Quando configuri una sottoscrizione BigQuery, puoi specificare le seguenti proprietà.

Proprietà comuni

Scopri di più sulle proprietà comuni degli abbonamenti che puoi impostare per tutti gli abbonamenti.

Utilizza schema argomento

Questa opzione consente a Pub/Sub di utilizzare lo schema dell'argomento Pub/Sub a cui è collegata la sottoscrizione. Inoltre, Pub/Sub scrive i campi nei messaggi nelle colonne corrispondenti della tabella BigQuery.

Quando utilizzi questa opzione, ricorda di controllare i seguenti requisiti aggiuntivi:

  • I campi nello schema dell'argomento e nello schema BigQuery devono avere gli stessi nomi e i loro tipi devono essere compatibili tra loro.

  • Qualsiasi campo facoltativo nello schema dell'argomento deve essere facoltativo anche nello schema BigQuery.

  • I campi obbligatori nello schema dell'argomento non devono essere obbligatori nello schema BigQuery.

  • Se sono presenti campi BigQuery non presenti nello schema dell'argomento, questi campi BigQuery devono essere in modalità NULLABLE.

  • Se lo schema dell'argomento ha campi aggiuntivi che non sono presenti nello schema BigQuery e questi campi possono essere eliminati, seleziona l'opzione Elimina campi sconosciuti.

  • Puoi selezionare solo una delle proprietà dell'abbonamento, Usa schema argomento o Usa schema tabella.

Se non selezioni l'opzione Utilizza schema argomento o Utilizza schema tabella, assicurati che la tabella BigQuery abbia una colonna denominata data di tipo BYTES, STRING o JSON. Pub/Sub scrive il messaggio in questa colonna BigQuery.

Potresti non vedere immediatamente le modifiche allo schema degli argomenti Pub/Sub o allo schema della tabella BigQuery con i messaggi scritti nella tabella BigQuery. Ad esempio, se l'opzione Elimina campi sconosciuti è abilitata e un campo è presente nello schema Pub/Sub, ma non in quello BigQuery, i messaggi scritti nella tabella BigQuery potrebbero comunque non contenere il campo dopo averlo aggiunto allo schema BigQuery. Alla fine, gli schemi si sincronizzano e i messaggi successivi includono il campo.

Quando utilizzi l'opzione Utilizza schema dell'argomento per la sottoscrizione BigQuery, puoi anche usufruire dell'acquisizione dei dati delle modifiche (CDC) di BigQuery. CDC aggiorna le tabelle BigQuery elaborando e applicando le modifiche alle righe esistenti.

Per scoprire di più su questa funzionalità, vedi Aggiornare le tabelle di flusso con l'acquisizione delle modifiche ai dati.

Per scoprire come utilizzare questa funzionalità con gli abbonamenti BigQuery, consulta Acquisizione delle modifiche ai dati di BigQuery.

Utilizza schema tabella

Questa opzione consente a Pub/Sub di utilizzare lo schema della tabella BigQuery per scrivere i campi di un messaggio JSON nelle colonne corrispondenti. Quando utilizzi questa opzione, ricordati di controllare i seguenti requisiti aggiuntivi:

  • I nomi di ogni colonna della tabella BigQuery devono contenere solo lettere (a-z, A-Z), numeri (0-9) o trattini bassi (_).

  • I messaggi pubblicati devono essere in formato JSON.

  • Sono supportate le seguenti conversioni JSON:

    Tipo JSON Tipo di dati BigQuery
    string NUMERIC, BIGNUMERIC, DATE, TIME, DATETIME o TIMESTAMP
    number NUMERIC, BIGNUMERIC, DATE, TIME, DATETIME o TIMESTAMP
    • Quando utilizzi le conversioni number in DATE, DATETIME, TIME o TIMESTAMP, il numero deve rispettare le rappresentazioni supportate.
    • Quando utilizzi la conversione da number a NUMERIC o BIGNUMERIC, la precisione e l'intervallo di valori sono limitati a quelli accettati dallo standard IEEE 754 per l'aritmetica in virgola mobile. Se hai bisogno di un'elevata precisione o di una gamma più ampia di valori, utilizza le conversioni string in NUMERIC o BIGNUMERIC.
    • Quando utilizzi le conversioni da string a NUMERIC o BIGNUMERIC, Pub/Sub presuppone che la stringa sia un numero leggibile (ad es. "123.124"). Se l'elaborazione della stringa come numero leggibile non va a buon fine, Pub/Sub considera la stringa come byte codificati con BigDecimalByteStringEncoder.
  • Se all'argomento della sottoscrizione è associato uno schema, la proprietà di codifica dei messaggi deve essere impostata su JSON.

  • Se sono presenti campi BigQuery non presenti nei messaggi, questi campi BigQuery devono essere in modalità NULLABLE.

  • Se i messaggi hanno campi aggiuntivi non presenti nello schema BigQuery e questi campi possono essere eliminati, seleziona l'opzione Elimina campi sconosciuti.

  • Puoi selezionare solo una delle proprietà dell'abbonamento, Usa schema argomento o Usa schema tabella.

Se non selezioni l'opzione Utilizza schema argomento o Utilizza schema tabella, assicurati che la tabella BigQuery abbia una colonna denominata data di tipo BYTES, STRING o JSON. Pub/Sub scrive il messaggio in questa colonna BigQuery.

Potresti non vedere immediatamente le modifiche allo schema della tabella BigQuery con i messaggi scritti nella tabella BigQuery. Ad esempio, se l'opzione Ignora campi sconosciuti è abilitata e un campo è presente nei messaggi, ma non nello schema BigQuery, i messaggi scritti nella tabella BigQuery potrebbero comunque non contenere il campo dopo averlo aggiunto allo schema BigQuery. Alla fine, lo schema viene sincronizzato e i messaggi successivi includono il campo.

Quando utilizzi l'opzione Utilizza schema tabella per la tua sottoscrizione BigQuery, puoi anche usufruire di BigQuery Change Data Capture (CDC). CDC aggiorna le tabelle BigQuery elaborando e applicando le modifiche alle righe esistenti.

Per scoprire di più su questa funzionalità, vedi Aggiornare le tabelle di flusso con l'acquisizione delle modifiche ai dati.

Per scoprire come utilizzare questa funzionalità con gli abbonamenti BigQuery, consulta Acquisizione delle modifiche ai dati di BigQuery.

Rilascia campi sconosciuti

Questa opzione viene utilizzata con l'opzione Utilizza schema argomento o Utilizza schema tabella. Se questa opzione è abilitata, Pub/Sub ignora qualsiasi campo presente nello schema dell'argomento o nel messaggio, ma non nello schema BigQuery. I campi che non fanno parte dello schema BigQuery vengono eliminati durante la scrittura del messaggio nella tabella BigQuery.

Se l'opzione Elimina campi sconosciuti non è impostata, i messaggi con campi aggiuntivi non vengono scritti in BigQuery e rimangono nel backlog della sottoscrizione, a meno che non configuri un argomento messaggi non recapitabili.

L'impostazione Ignora campi sconosciuti non influisce sui campi non definiti nello schema dell'argomento Pub/Sub o nello schema della tabella BigQuery. In questo caso, alla sottoscrizione viene recapitato un messaggio Pub/Sub valido. Tuttavia, poiché BigQuery non ha colonne definite per questi campi aggiuntivi, questi campi vengono eliminati durante il processo di scrittura BigQuery. Per evitare questo comportamento, assicurati che qualsiasi campo contenuto nel messaggio Pub/Sub sia contenuto anche nello schema della tabella BigQuery.

Il comportamento relativo ai campi aggiuntivi può dipendere anche dal tipo di schema specifico (Avro, buffer di protocollo) e dalla codifica (JSON, binaria) utilizzati. Per informazioni su come questi fattori influiscono sulla gestione dei campi aggiuntivi, consulta la documentazione relativa al tipo di schema e alla codifica specifici.

Scrivi metadati

Questa opzione consente a Pub/Sub di scrivere i metadati di ogni messaggio in colonne aggiuntive della tabella BigQuery. In caso contrario, i metadati non vengono scritti nella tabella BigQuery.

Se selezioni l'opzione Scrivi metadati, assicurati che la tabella BigQuery contenga i campi descritti nella tabella seguente.

Se non selezioni l'opzione Scrivi metadati, la tabella BigQuery di destinazione richiede solo il campo data, a meno che use_topic_schema non sia true. Se selezioni le opzioni Scrivi metadati e Utilizza schema argomento, lo schema dell'argomento non deve contenere campi con nomi corrispondenti a quelli dei parametri dei metadati. Questa limitazione include le versioni camel case di questi parametri snake case.

Parametri
subscription_name

STRING

Nome di un abbonamento.

message_id

STRING

ID di un messaggio

publish_time

TIMESTAMP

L'ora di pubblicazione di un messaggio.

data

BYTES, STRING o JSON

Il corpo del messaggio.

Il campo data è obbligatorio per tutte le tabelle BigQuery di destinazione che non selezionano Utilizza schema argomento o Utilizza schema tabella. Se il campo è di tipo JSON, il corpo del messaggio deve essere un JSON valido.

attributes

STRING o JSON

Un oggetto JSON contenente tutti gli attributi del messaggio. Contiene anche campi aggiuntivi che fanno parte del messaggio Pub/Sub, inclusa la chiave di ordinamento, se presente.

Creare una sottoscrizione BigQuery

Gli esempi riportati di seguito mostrano come creare un abbonamento con la distribuzione BigQuery.

Console

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

    Vai agli abbonamenti

  2. Fai clic su Crea sottoscrizione.

  3. Per il campo ID sottoscrizione, inserisci un nome. Per informazioni su come denominare un abbonamento, consulta le linee guida per assegnare un nome a un argomento o a un abbonamento.

  4. Scegli o crea un argomento dal menu a discesa. La sottoscrizione riceve i messaggi dall'argomento.

  5. Seleziona Tipo di pubblicazione come Scrivi su BigQuery.

  6. Seleziona il progetto per la tabella BigQuery.

  7. Seleziona un set di dati esistente o creane uno nuovo. Per informazioni su come creare un set di dati, consulta Creazione di set di dati.

  8. Seleziona una tabella esistente o creane una nuova. Per informazioni su come creare una tabella, vedi Creare tabelle.

  9. Ti consigliamo vivamente di attivare la coda di messaggi non recapitabili per gestire gli errori dei messaggi. Per saperne di più, consulta Argomento di messaggi non recapitabili.

  10. Fai clic su Crea.

Puoi anche creare una sottoscrizione dalla pagina Argomenti. Questa scorciatoia è utile per associare argomenti alle sottoscrizioni.

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

    Vai ad Argomenti

  2. Fai clic su accanto all'argomento per cui vuoi creare un abbonamento.

  3. Dal menu contestuale, seleziona Crea abbonamento.

  4. Seleziona Tipo di pubblicazione come Scrivi su BigQuery.

  5. Seleziona il progetto per la tabella BigQuery.

  6. Seleziona un set di dati esistente o creane uno nuovo. Per informazioni su come creare un set di dati, consulta Creazione di set di dati.

  7. Seleziona una tabella esistente o creane una nuova. Per informazioni su come creare un set di dati, vedi Creare tabelle.

  8. Ti consigliamo vivamente di attivare la coda di messaggi non recapitabili per gestire gli errori dei messaggi. Per saperne di più, consulta Argomento di messaggi non recapitabili.

  9. Fai clic su Crea.

gcloud

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

    Activate Cloud Shell

    1. Per creare una sottoscrizione Pub/Sub, utilizza il comando gcloud pubsub subscriptions create:

      gcloud pubsub subscriptions create SUBSCRIPTION_ID \
          --topic=TOPIC_ID \
          --bigquery-table=PROJECT_ID.DATASET_ID.TABLE_ID
      

      Se vuoi utilizzare un account di servizio personalizzato, forniscilo come argomento aggiuntivo:

      gcloud pubsub subscriptions create SUBSCRIPTION_ID \
          --topic=TOPIC_ID \
          --bigquery-table=PROJECT_ID.DATASET_ID.TABLE_ID 
          --bigquery-service-account-email=SERVICE_ACCOUNT_NAME
      

      Sostituisci quanto segue:

      • SUBSCRIPTION_ID: specifica l'ID dell'abbonamento.
      • TOPIC_ID: specifica l'ID dell'argomento. L'argomento richiede uno schema.
      • PROJECT_ID: specifica l'ID del progetto.
      • DATASET_ID: specifica l'ID di un set di dati esistente. Per creare un set di dati, vedi Creare set di dati.
      • TABLE_ID: specifica l'ID di una tabella esistente. Se l'argomento non ha uno schema, la tabella richiede un campo data. Per creare una tabella, vedi Creare una tabella vuota con una definizione dello schema.
      • SERVICE_ACCOUNT_NAME: specifica il nome dell'account di servizio da utilizzare per scrivere in BigQuery.

    C++

    Prima di provare questo esempio, segui le istruzioni di configurazione di C++ nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.

    namespace pubsub = ::google::cloud::pubsub;
    namespace pubsub_admin = ::google::cloud::pubsub_admin;
    [](pubsub_admin::SubscriptionAdminClient client,
       std::string const& project_id, std::string const& topic_id,
       std::string const& subscription_id, std::string const& table_id) {
      google::pubsub::v1::Subscription request;
      request.set_name(
          pubsub::Subscription(project_id, subscription_id).FullName());
      request.set_topic(pubsub::Topic(project_id, topic_id).FullName());
      request.mutable_bigquery_config()->set_table(table_id);
      auto sub = client.CreateSubscription(request);
      if (!sub) {
        if (sub.status().code() == google::cloud::StatusCode::kAlreadyExists) {
          std::cout << "The subscription already exists\n";
          return;
        }
        throw std::move(sub).status();
      }
    
      std::cout << "The subscription was successfully created: "
                << sub->DebugString() << "\n";
    }

    C#

    Prima di provare questo esempio, segui le istruzioni di configurazione di C# nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.

    
    using Google.Cloud.PubSub.V1;
    
    public class CreateBigQuerySubscriptionSample
    {
        public Subscription CreateBigQuerySubscription(string projectId, string topicId, string subscriptionId, string bigqueryTableId)
        {
            SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
            TopicName topicName = TopicName.FromProjectTopic(projectId, topicId);
            SubscriptionName subscriptionName = SubscriptionName.FromProjectSubscription(projectId, subscriptionId);
    
            var subscriptionRequest = new Subscription
            {
                SubscriptionName = subscriptionName,
                TopicAsTopicName = topicName,
                BigqueryConfig = new BigQueryConfig
                {
                    Table = bigqueryTableId
                }
            };
            var subscription = subscriber.CreateSubscription(subscriptionRequest);
            return subscription;
        }
    }

    Vai

    L'esempio seguente utilizza la versione principale della libreria client Go Pub/Sub (v2). Se utilizzi ancora la libreria v1, consulta la guida alla migrazione alla v2. Per visualizzare un elenco di esempi di codice della versione 1, consulta gli esempi di codice ritirati.

    Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Go.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/pubsub/v2"
    	"cloud.google.com/go/pubsub/v2/apiv1/pubsubpb"
    )
    
    // createBigQuerySubscription creates a Pub/Sub subscription that exports messages to BigQuery.
    func createBigQuerySubscription(w io.Writer, projectID, topic, subscription, table string) error {
    	// projectID := "my-project"
    	// topic := "projects/my-project-id/topics/my-topic"
    	// subscription := "projects/my-project/subscriptions/my-sub"
    	// table := "my-project-id.dataset_id.table_id"
    	ctx := context.Background()
    	client, err := pubsub.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("pubsub.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	sub, err := client.SubscriptionAdminClient.CreateSubscription(ctx, &pubsubpb.Subscription{
    		Name:  subscription,
    		Topic: topic,
    		BigqueryConfig: &pubsubpb.BigQueryConfig{
    			Table:         table,
    			WriteMetadata: true,
    		},
    	})
    	if err != nil {
    		return fmt.Errorf("failed to create subscription: %w", err)
    	}
    	fmt.Fprintf(w, "Created BigQuery subscription: %v\n", sub)
    
    	return nil
    }
    

    Java

    Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Java di Pub/Sub.

    import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
    import com.google.pubsub.v1.BigQueryConfig;
    import com.google.pubsub.v1.ProjectSubscriptionName;
    import com.google.pubsub.v1.ProjectTopicName;
    import com.google.pubsub.v1.Subscription;
    import java.io.IOException;
    
    public class CreateBigQuerySubscriptionExample {
      public static void main(String... args) throws Exception {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
        String topicId = "your-topic-id";
        String subscriptionId = "your-subscription-id";
        String bigqueryTableId = "your-project.your-dataset.your-table";
    
        createBigQuerySubscription(projectId, topicId, subscriptionId, bigqueryTableId);
      }
    
      public static void createBigQuerySubscription(
          String projectId, String topicId, String subscriptionId, String bigqueryTableId)
          throws IOException {
        try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
    
          ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
          ProjectSubscriptionName subscriptionName =
              ProjectSubscriptionName.of(projectId, subscriptionId);
    
          BigQueryConfig bigqueryConfig =
              BigQueryConfig.newBuilder().setTable(bigqueryTableId).setWriteMetadata(true).build();
    
          Subscription subscription =
              subscriptionAdminClient.createSubscription(
                  Subscription.newBuilder()
                      .setName(subscriptionName.toString())
                      .setTopic(topicName.toString())
                      .setBigqueryConfig(bigqueryConfig)
                      .build());
    
          System.out.println("Created a BigQuery subscription: " + subscription.getAllFields());
        }
      }
    }

    Node.js

    Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    // const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';
    // const bigqueryTableId = 'YOUR_TABLE_ID';
    
    // Imports the Google Cloud client library
    const {PubSub} = require('@google-cloud/pubsub');
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createBigQuerySubscription(
      topicNameOrId,
      subscriptionNameOrId,
      bigqueryTableId,
    ) {
      const options = {
        bigqueryConfig: {
          table: bigqueryTableId,
          writeMetadata: true,
        },
      };
    
      await pubSubClient
        .topic(topicNameOrId)
        .createSubscription(subscriptionNameOrId, options);
    
      console.log(`Subscription ${subscriptionNameOrId} created.`);
    }

    Node.ts

    Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    // const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';
    // const bigqueryTableId = 'YOUR_TABLE_ID';
    
    // Imports the Google Cloud client library
    import {PubSub, CreateSubscriptionOptions} from '@google-cloud/pubsub';
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createBigQuerySubscription(
      topicNameOrId: string,
      subscriptionNameOrId: string,
      bigqueryTableId: string,
    ) {
      const options: CreateSubscriptionOptions = {
        bigqueryConfig: {
          table: bigqueryTableId,
          writeMetadata: true,
        },
      };
    
      await pubSubClient
        .topic(topicNameOrId)
        .createSubscription(subscriptionNameOrId, options);
    
      console.log(`Subscription ${subscriptionNameOrId} created.`);
    }

    PHP

    Prima di provare questo esempio, segui le istruzioni di configurazione di PHP nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub PHP.

    use Google\Cloud\PubSub\PubSubClient;
    use Google\Cloud\PubSub\V1\BigQueryConfig;
    
    /**
     * Creates a Pub/Sub BigQuery subscription.
     *
     * @param string $projectId  The Google project ID.
     * @param string $topicName  The Pub/Sub topic name.
     * @param string $subscriptionName  The Pub/Sub subscription name.
     * @param string $table      The BigQuery table to which to write.
     */
    function create_bigquery_subscription($projectId, $topicName, $subscriptionName, $table)
    {
        $pubsub = new PubSubClient([
            'projectId' => $projectId,
        ]);
        $topic = $pubsub->topic($topicName);
        $subscription = $topic->subscription($subscriptionName);
        $config = new BigQueryConfig(['table' => $table]);
        $subscription->create([
            'bigqueryConfig' => $config
        ]);
    
        printf('Subscription created: %s' . PHP_EOL, $subscription->name());
    }

    Python

    Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Python.

    from google.cloud import pubsub_v1
    
    # TODO(developer)
    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    # subscription_id = "your-subscription-id"
    # bigquery_table_id = "your-project.your-dataset.your-table"
    
    publisher = pubsub_v1.PublisherClient()
    subscriber = pubsub_v1.SubscriberClient()
    topic_path = publisher.topic_path(project_id, topic_id)
    subscription_path = subscriber.subscription_path(project_id, subscription_id)
    
    bigquery_config = pubsub_v1.types.BigQueryConfig(
        table=bigquery_table_id, write_metadata=True
    )
    
    # Wrap the subscriber in a 'with' block to automatically call close() to
    # close the underlying gRPC channel when done.
    with subscriber:
        subscription = subscriber.create_subscription(
            request={
                "name": subscription_path,
                "topic": topic_path,
                "bigquery_config": bigquery_config,
            }
        )
    
    print(f"BigQuery subscription created: {subscription}.")
    print(f"Table for subscription is: {bigquery_table_id}")

    Ruby

    Il seguente esempio utilizza la libreria client Ruby Pub/Sub v3. Se utilizzi ancora la libreria v2, consulta la guida alla migrazione alla v3. Per visualizzare un elenco di esempi di codice Ruby v2, consulta gli esempi di codice ritirati.

    Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby nella guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Ruby.

    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    # subscription_id = "your-subscription-id"
    # bigquery_table_id = "my-project:dataset-id.table-id"
    
    pubsub = Google::Cloud::PubSub.new project_id: project_id
    subscription_admin = pubsub.subscription_admin
    
    subscription = subscription_admin.create_subscription \
      name: pubsub.subscription_path(subscription_id),
      topic: pubsub.topic_path(topic_id),
      bigquery_config: {
        table: bigquery_table_id,
        write_metadata: true
      }
    
    puts "BigQuery subscription created: #{subscription_id}."
    puts "Table for subscription is: #{bigquery_table_id}"

Monitorare una sottoscrizione BigQuery

Cloud Monitoring fornisce una serie di metriche per monitorare gli abbonamenti.

Per un elenco di tutte le metriche disponibili relative a Pub/Sub e le relative descrizioni, consulta la documentazione di Monitoring per Pub/Sub.

Puoi anche monitorare gli abbonamenti all'interno di Pub/Sub.

Passaggi successivi