Questo documento descrive come creare una sottoscrizione BigQuery. Puoi utilizzare la console Google 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 avere familiarità con quanto segue:
Come funzionano gli abbonamenti.
Il flusso di lavoro per le sottoscrizioni BigQuery.
Come configurare un argomento messaggi non recapitabili per gestire gli errori dei messaggi.
Oltre ad avere 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 la sottoscrizione 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 Compatibilità dello schema.
Ruoli e autorizzazioni richiesti
Per ottenere le autorizzazioni necessarie per creare una sottoscrizione BigQuery, chiedi all'amministratore di concederti il ruolo IAM Pub/Sub Editor (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 una sottoscrizione BigQuery. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per creare una sottoscrizione BigQuery sono necessarie le seguenti autorizzazioni:
-
pubsub.subscriptions.createsul progetto -
pubsub.topics.attachSubscriptionsull'argomento
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Sottoscrizioni tra progetti
Se crei una sottoscrizione in un progetto per un argomento in un altro progetto, devi disporre dell'autorizzazione pubsub.subscriptions.create per il progetto in cui crei la sottoscrizione e dell'autorizzazione pubsub.topics.attachSubscription per l'argomento.
Concedi i ruoli IAM al account di servizio
Pub/Sub utilizza un account di servizio Identity and Access Management (IAM) per accedere alle risorse Google Cloud . Per impostazione predefinita, utilizza l'agente di servizio Pub/Sub (service-PROJECT_NUMBER@gcp-sa-pubsub.).
Per consentire a Pub/Sub di scrivere in una tabella BigQuery,
il account di servizio richiede il ruolo Editor dati BigQuery
(roles/bigquery.dataEditor). Puoi concedere le autorizzazioni al account di servizio per il progetto o per la tabella, come segue:
Progetto
Nella console Google Cloud vai alla pagina IAM.
Seleziona Includi concessioni di ruoli fornite da Google.
Individua la riga del account di servizio Cloud Pub/Sub e fai clic su Modifica entità.
Fai clic su Aggiungi un altro ruolo e seleziona il ruolo BigQuery Data Editor.
Per ulteriori informazioni, consulta Concedi un ruolo IAM utilizzando la console.
Tabella
Nella console Google Cloud , vai a BigQuery Studio.
Nella casella di ricerca del riquadro Explorer con l'etichetta Filtra per nome ed etichette, digita il nome della tabella e premi Invio.
Nei risultati di ricerca, fai clic sul nome della tabella per cui vuoi concedere l'autorizzazione.
Nel riquadro dei dettagli, fai clic su Condividi > Gestisci autorizzazioni.
Fai clic su Aggiungi entità, quindi inserisci l'identificatore del account di servizio nel seguente formato:
service-PROJECT_NUMBER@gcp-sa-pubsub..Nell'elenco Assegna ruoli, seleziona BigQuery Data Editor.
Fai clic su Salva. All'entità viene concesso il ruolo sulla risorsa.
Utilizzo di un account di servizio personalizzato
Se concedi il ruolo BigQuery Data Editor al account di servizio Cloud Pub/Sub, qualsiasi utente autorizzato a creare una sottoscrizione nel tuo progetto può scrivere nella tabella BigQuery. Se vuoi fornire autorizzazioni più granulari, configura invece un service account gestito dall'utente.
Per configurare un service account gestito dall'utente per la scrittura in BigQuery sono necessarie le seguenti autorizzazioni:
Il account di servizio gestito dall'utente deve avere il ruolo BigQuery Data Editor.
Il account di servizio Cloud Pub/Sub deve disporre dell'autorizzazione
iam.serviceAccounts.getAccessTokensul service account gestito dall'utente.L'utente che crea la sottoscrizione deve disporre dell'autorizzazione
iam.serviceAccounts.actAssul account di servizio gestito dall'utente.
Quando crei la sottoscrizione, specifica il account di servizio gestito dall'utente come service account della sottoscrizione.
Proprietà delle sottoscrizioni BigQuery
Le sottoscrizioni BigQuery supportano tutte le proprietà delle sottoscrizioni comuni. Le sezioni seguenti descrivono le proprietà specifiche delle sottoscrizioni BigQuery.
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 dei messaggi nelle colonne corrispondenti della tabella BigQuery.
Quando utilizzi questa opzione, ricorda di verificare i seguenti requisiti aggiuntivi:
I campi nello schema dell'argomento e nello schema BigQuery devono avere gli stessi nomi e i relativi 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 contiene campi aggiuntivi che non sono presenti nello schema BigQuery e questi campi possono essere ignorati, seleziona l'opzione Ignora campi sconosciuti.
Puoi selezionare solo una delle proprietà della sottoscrizione, Utilizza schema argomento o Utilizza 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.
Le modifiche allo schema degli argomenti Pub/Sub o allo schema della tabella BigQuery potrebbero non essere applicate immediatamente ai messaggi scritti nella tabella BigQuery. Ad esempio, se l'opzione Ignora 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 argomento per la tua sottoscrizione BigQuery, puoi anche usufruire di Change Data Capture (CDC) di BigQuery. CDC aggiorna le tabelle BigQuery elaborando e applicando le modifiche alle righe esistenti.
Per scoprire di più su questa funzionalità, consulta Esegui lo streaming degli aggiornamenti delle tabelle con Change Data Capture.
Per scoprire come utilizzare questa funzionalità con le sottoscrizioni BigQuery, consulta Change Data Capture 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, ricorda 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.
Se una colonna di una tabella BigQuery ha il tipo di dati
JSON, il campo corrispondente nel messaggio Pub/Sub deve essere un JSON valido in una stringa con escape. Ad esempio, per una colonna denominatamyData, il campo del messaggio deve essere"myData": "{\"key\":\"value\"}". BigQuery rifiuta i messaggi che non contengono JSON valido.Sono supportate le seguenti conversioni JSON:
Tipo JSON Tipo di dati BigQuery stringNUMERIC,BIGNUMERIC,DATE,TIME,DATETIMEoTIMESTAMPnumberNUMERIC,BIGNUMERIC,DATE,TIME,DATETIMEoTIMESTAMP- Quando utilizzi le conversioni da
numberaDATE,DATETIME,TIMEoTIMESTAMP, il numero deve rispettare le rappresentazioni supportate. - Quando utilizzi la conversione da
numberaNUMERICoBIGNUMERIC, 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 un intervallo di valori più ampio, utilizza invece le conversioni dastringaNUMERICoBIGNUMERIC. - Quando utilizzi le conversioni da
stringaNUMERICoBIGNUMERIC, 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 tratta la stringa come byte codificati con BigDecimalByteStringEncoder.
- Quando utilizzi le conversioni da
Se l'argomento della sottoscrizione ha uno schema associato, la proprietà di codifica del messaggio deve essere impostata su
JSON.Se sono presenti campi BigQuery che non sono presenti nei messaggi, questi campi BigQuery devono essere in modalità
NULLABLE.Se i messaggi contengono campi aggiuntivi che non sono presenti nello schema BigQuery e questi campi possono essere ignorati, seleziona l'opzione Ignora campi sconosciuti.
Puoi selezionare solo una delle proprietà della sottoscrizione, Utilizza schema argomento o Utilizza 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.
Le modifiche allo schema della tabella BigQuery potrebbero non essere applicate immediatamente ai messaggi scritti nella tabella BigQuery. Ad esempio, se l'opzione Elimina 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 si sincronizza e i messaggi successivi includono il campo.
Quando utilizzi l'opzione Utilizza lo schema della tabella per la tua sottoscrizione BigQuery, puoi anche usufruire di Change Data Capture (CDC) di BigQuery. CDC aggiorna le tabelle BigQuery elaborando e applicando le modifiche alle righe esistenti.
Per scoprire di più su questa funzionalità, consulta Esegui lo streaming degli aggiornamenti delle tabelle con Change Data Capture.
Per scoprire come utilizzare questa funzionalità con le sottoscrizioni BigQuery, consulta Change Data Capture di BigQuery.
Rilascia campi sconosciuti
Questa opzione viene utilizzata con l'opzione Utilizza schema argomento o Utilizza schema tabella. Se abilitata, questa opzione consente a Pub/Sub di ignorare qualsiasi campo presente nello schema o nel messaggio dell'argomento, ma non nello schema BigQuery. I campi che non fanno parte dello schema BigQuery vengono ignorati durante la scrittura del messaggio nella tabella BigQuery.
Se non imposti Elimina campi sconosciuti, 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 di BigQuery. Per evitare questo comportamento, assicurati che tutti i campi contenuti nel messaggio Pub/Sub siano contenuti 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, binario) 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 entrambe 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 camelCase di questi parametri snake_case.
| Parametri | |
|---|---|
subscription_name |
STRING Nome di una sottoscrizione. |
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 |
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. |
Service account
Per scrivere messaggi in una tabella BigQuery, hai a disposizione le seguenti opzioni:
Configura un service account personalizzato in modo che solo gli utenti con l'autorizzazione
iam.serviceAccounts.actAssul account di servizio possano creare una sottoscrizione che scrive nella tabella. Un esempio di ruolo che include l'autorizzazioneiam.serviceAccounts.actAsè il ruolo Service Account User (roles/iam.serviceAccountUser).Utilizza l'agente di servizio Pub/Sub predefinito che consente a qualsiasi utente con la possibilità di creare sottoscrizioni nel progetto di creare una sottoscrizione che scrive nella tabella. L'agente di servizio Pub/Sub è l'impostazione predefinita quando non specifichi un account di servizio personalizzato.
Creare una sottoscrizione BigQuery
Per creare una sottoscrizione con distribuzione BigQuery, segui questi passaggi.
Console
Nella console Google Cloud , vai alla pagina Crea sottoscrizione.
Nel campo ID sottoscrizione, inserisci un nome. Per informazioni su come assegnare un nome a una sottoscrizione, consulta Linee guida per assegnare un nome a un argomento o a una sottoscrizione.
Nella casella Seleziona un argomento Cloud Pub/Sub, digita o seleziona l'argomento da cui ricevere i messaggi.
Per Tipo di distribuzione, seleziona Scrivi in BigQuery.
Seleziona la tabella BigQuery:
In Progetto, seleziona il progetto Google Cloud che contiene la tabella BigQuery.
In Set di dati, seleziona un set di dati esistente o fai clic su Crea nuovo set di dati per crearne uno nuovo. Per informazioni sulla creazione di un set di dati, consulta Crea set di dati.
Nel campo Table (Tabella), inserisci il nome della tabella. Per creare una nuova tabella, fai clic sul link che ti indirizza alla pagina Crea nuova tabella di BigQuery. La pagina si apre in una scheda separata. Per informazioni sulla creazione di una tabella, consulta Crea e utilizza le tabelle.
In Configurazione schema, seleziona una delle seguenti opzioni:
Non utilizzare uno schema. Pub/Sub scrive i byte del messaggio in una colonna denominata
data.Utilizza schema argomento. Pub/Sub utilizza lo schema associato all'argomento. Per saperne di più, consulta Utilizza lo schema degli argomenti.
Utilizza schema tabella. Pub/Sub utilizza lo schema della tabella BigQuery. Per saperne di più, consulta Utilizza lo schema della tabella.
Facoltativo. Per scrivere i metadati dei messaggi nella tabella BigQuery, seleziona Scrivi metadati. Per saperne di più, consulta Scrivi i metadati.
Facoltativo. Per eliminare i campi non presenti nello schema della tabella BigQuery, seleziona Elimina campi sconosciuti. Per saperne di più, consulta Elimina campi sconosciuti.
Configura le proprietà comuni degli abbonamenti in base alle tue esigenze. Ti consigliamo vivamente di attivare la funzionalità Messaggi non recapitabili per gestire gli errori dei messaggi. Per saperne di più, consulta Argomento di messaggi non recapitabili.
Fai clic su Crea.
gcloud
-
Nella console Google Cloud , attiva Cloud Shell.
Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
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_IDSe 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_NAMESostituisci quanto segue:
SUBSCRIPTION_ID: specifica l'ID della sottoscrizione.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, consulta Crea set di dati.TABLE_ID: specifica l'ID di una tabella esistente. La tabella richiede un campodatase l'argomento non ha uno schema. Per creare una tabella, consulta Crea una tabella vuota con una definizione di schema.SERVICE_ACCOUNT_NAME: specifica il nome del 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 saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub C++.
C#
Prima di provare questo esempio, segui le istruzioni di configurazione di C# nella Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub C#.
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 deprecati.
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.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java in Guida rapida: utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Java di Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella Guida rapida: utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Node.ts
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella Guida rapida: utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
PHP
Prima di provare questo esempio, segui le istruzioni di configurazione di PHP nella Guida rapida: utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub PHP.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella Guida rapida: utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Python di Pub/Sub.
Ruby
L'esempio seguente 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 deprecati.
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.
Monitora una sottoscrizione BigQuery
Cloud Monitoring fornisce una serie di metriche per monitorare le sottoscrizioni.
Per un elenco di tutte le metriche disponibili relative a Pub/Sub e delle relative descrizioni, consulta la documentazione di Monitoring per Pub/Sub.
Puoi anche monitorare le sottoscrizioni all'interno di Pub/Sub.
Passaggi successivi
- Crea o modifica una sottoscrizione con i comandi
gcloud. - Crea o modifica un abbonamento con le API REST.
- Risolvi i problemi relativi a una sottoscrizione BigQuery.