Creare e gestire schemi protobuf
Questo documento descrive come creare ed eseguire operazioni sui bundle di schemi.
In Bigtable, puoi utilizzare gli schemi buffer di protocollo (protobuf) per eseguire query sui singoli campi all'interno dei messaggi protobuf archiviati come byte nelle colonne. A questo scopo, carica gli schemi in un bundle di schemi, una risorsa a livello di tabella che contiene uno o più schemi protobuf.
L'utilizzo dei bundle di schemi offre i seguenti vantaggi:
- Risparmia tempo e fatica: con i protocol buffer, definisci la struttura dei dati una sola volta in un file proto e poi utilizzi il codice sorgente generato per scrivere e leggere i dati.
- Migliora la coerenza dei dati: utilizzando un file proto come unica fonte di verità, puoi assicurarti che tutte le applicazioni e tutti i servizi utilizzino lo stessomodello dei datiti.
- Elimina la duplicazione dei dati: puoi utilizzare i protocol buffer in più progetti definendo i tipi di messaggio nei file proto che si trovano al di fuori del codebase di un progetto specifico.
Il processo di utilizzo degli schemi in Bigtable inizia con i file proto. Un file proto è un file di testo in cui definisci la struttura dei tuoi dati. Utilizzi lo strumento compilatore protobuf, chiamato anche protoc, per generare un set di descrittori del file protobuf, ovvero uno schema leggibile da macchina del tuo file .proto. Utilizzi quindi questo set di descrittori per creare un bundle di schema.
Per esempi di file proto e dei relativi set di descrittori, consulta Dati di esempio.
Il seguente diagramma mostra il processo di utilizzo degli schemi in Bigtable:
Puoi creare bundle di schemi utilizzando la console Google Cloud o Google Cloud CLI. Dopo aver caricato un bundle di schema in Bigtable, puoi eseguire query sui dati utilizzando lo strumento di creazione di query Bigtable Studio, GoogleSQL per Bigtable o tabelle esterne Bigtable in BigQuery.
Prima di iniziare
Se prevedi di utilizzare gcloud CLI, segui questi passaggi:
- Installa Google Cloud CLI.
Inizializza gcloud CLI:
gcloud init
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per creare e gestire i bundle di schemi, chiedi all'amministratore di concederti il ruolo IAM (Identity and Access Management) Bigtable Admin (roles/bigtable.admin) sulla tabella.
Questo ruolo predefinito contiene le autorizzazioni richieste da Bigtable per lavorare con i bundle di schema. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
bigtable.schemaBundles.createbigtable.schemaBundles.updatebigtable.schemaBundles.deletebigtable.schemaBundles.getbigtable.schemaBundles.list
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Per saperne di più sui ruoli e sulle autorizzazioni Bigtable, consulta Controllo dell'accesso con IAM.
Generare un set di descrittori di file protobuf
Prima di poter creare un bundle di schemi, devi generare un set di descrittori dai file proto con lo strumento di compilazione protobuf.
- Per installare il compilatore, scarica il pacchetto e segui le istruzioni nel file README.
Esegui il compilatore:
protoc --proto_path=IMPORT_PATH --include_imports \ --descriptor_set_out=DESCRIPTOR_OUTPUT_LOCATION PATH_TO_PROTOSostituisci quanto segue:
IMPORT_PATH: la directory in cui il compilatore protoc cerca i file proto.DESCRIPTOR_OUTPUT_LOCATION: la directory in cui il compilatore protoc salva il set di descrittori generato.PATH_TO_PROTO: il percorso del file proto.
Ad esempio, per creare un set di descrittori denominato library.pb per il file library.proto nella directory corrente, puoi utilizzare il seguente comando:
protoc --include_imports --descriptor_set_out=library.pb
library.proto
Crea un bundle di schemi
Console
Nella console Google Cloud , apri l'elenco delle istanze Bigtable.
Seleziona un'istanza dall'elenco.
Nel riquadro di navigazione, fai clic su Bigtable Studio.
Nel riquadro Explorer, accanto alla tabella in cui vuoi creare un bundle di schema, fai clic sul menu Azioni more_vert e poi su Crea bundle di schema.
Nella finestra di dialogo Crea pacchetto di schemi, nel campo ID pacchetto di schemi, inserisci un identificatore univoco per il pacchetto di schemi.
L'ID deve essere compreso tra 1 e 50 caratteri, può contenere solo lettere, numeri, trattini bassi e trattini, non può iniziare con un trattino e non può contenere il carattere punto (
.).Nel campo Set di descrittori del file (file .pb), fai clic su Sfoglia per selezionare il set di descrittori del file protobuf che hai creato nella sezione Genera un set di descrittori del file protobuf di questo documento. Le dimensioni del file non possono superare i 4 MB.
Fai clic su Crea.
Il bundle dello schema si apre in una nuova scheda.
gcloud
Per creare un bundle di schema, utilizza il comando
gcloud bigtable schema-bundles create:
gcloud bigtable schema-bundles create SCHEMA_BUNDLE_ID \
--instance=INSTANCE_ID \
--table=TABLE_ID \
--proto-descriptors-file=PROTO_DESCRIPTORS_FILE
Sostituisci quanto segue:
SCHEMA_BUNDLE_ID: un ID univoco per il nuovo bundle di schemi che non può contenere caratteri punto (".").INSTANCE_ID: l'ID dell'istanza in cui crei il bundle di schema.TABLE_ID: l'ID della tabella in cui crei il bundle di schema.PROTO_DESCRIPTORS_FILE: il percorso del set di descrittori del file che hai creato nella sezione Genera un set di descrittori di file protobuf di questo documento.
Java
Per creare un bundle di schemi, utilizza il metodo createSchemaBundle:
Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.
Per eseguire l'autenticazione in Bigtable, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Visualizza informazioni sui bundle di schemi
Prima di poter visualizzare le informazioni sui bundle di schemi, devi avere una tabella Bigtable con almeno un bundle di schemi. Puoi ottenere informazioni sui bundle di schemi in una tabella recuperando la definizione di un singolo bundle di schemi o elencando tutti i bundle di schemi in una tabella.
Ottieni la definizione del bundle di schemi
Console
Nella console Google Cloud , apri l'elenco delle istanze Bigtable.
Seleziona un'istanza dall'elenco.
Nel riquadro di navigazione, fai clic su Bigtable Studio.
Nel riquadro Explorer, espandi la tabella che contiene il bundle di schema, quindi espandi Bundle di schema.
Fai clic sul pacchetto di schemi che vuoi visualizzare o sul menu Azioni more_vert accanto al pacchetto di schemi, quindi fai clic su Visualizza dettagli.
Si apre una scheda che mostra la definizione del bundle di schema.
(Facoltativo) Per aprire una scheda dell'editor di query SQL con una query di esempio che utilizza il bundle di schema, fai clic sul menu Azioni more_vert accanto al bundle di schema, quindi fai clic su Query di esempio.
gcloud
Per ottenere i dettagli di un bundle di schemi, utilizza il comando
gcloud bigtable schema-bundles describe:
gcloud bigtable schema-bundles describe SCHEMA_BUNDLE_ID \
--instance=INSTANCE_ID \
--table=TABLE_ID
Sostituisci quanto segue:
SCHEMA_BUNDLE_ID: l'ID del bundle di schemi.INSTANCE_ID: l'ID dell'istanza.TABLE_ID: l'ID della tabella.
Java
Per ottenere la definizione di un bundle di schema, utilizza il metodo getSchemaBundle.
Questo metodo restituisce un oggetto SchemaBundle che contiene la definizione dello schema.
L'esempio seguente mostra come ottenere un bundle di schemi e deserializzare il set di descrittori per stampare i contenuti dello schema:
Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.
Per eseguire l'autenticazione in Bigtable, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
L'output è simile al seguente:
--------- Deserialized FileDescriptorSet ---------
File: my_schema.proto
Package: my_package
Message: MyMessage
--------------------------------------------------
Elenca i bundle di schemi in una tabella
Console
Nella console Google Cloud , apri l'elenco delle istanze Bigtable.
Seleziona un'istanza dall'elenco.
Nel riquadro di navigazione, fai clic su Bigtable Studio.
Nel riquadro Explorer, espandi la tabella che contiene i bundle di schema che vuoi visualizzare.
Espandi Bundle di schemi.
Viene visualizzato l'elenco dei bundle di schemi nella tabella. Se la tabella non contiene bundle di schemi, l'elenco Bundle di schemi non viene visualizzato.
gcloud
Per visualizzare un elenco di bundle di schemi per una tabella, utilizza il comando
gcloud bigtable schema-bundles list:
gcloud bigtable schema-bundles list \
--instance=INSTANCE_ID \
--table=TABLE_ID
Sostituisci quanto segue:
INSTANCE_ID: l'ID dell'istanza.TABLE_ID: l'ID della tabella.
Java
Per visualizzare un elenco di tutti i bundle di schemi in una tabella, utilizza il metodo listSchemaBundles. Questo metodo restituisce un elenco di ID bundle di schemi.
Il seguente esempio mostra come elencare i bundle di schemi in una tabella:
Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.
Per eseguire l'autenticazione in Bigtable, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
L'output è simile al seguente:
my-schema-bundle-1
my-schema-bundle-2
Aggiorna un bundle di schemi
Quando aggiorni un bundle di schemi, Bigtable verifica se il nuovo
set di descrittori è compatibile con quello esistente. Se Bigtable
rileva incompatibilità, l'aggiornamento non va a buon fine e viene visualizzato un errore FailedPrecondition. Ti
consigliamo di riservare i numeri dei campi eliminati per impedirne il riutilizzo. Per
maggiori informazioni, consulta Best practice per Proto nella documentazione di protobuf.
Se hai la certezza che le modifiche incompatibili siano sicure e vuoi forzare un
aggiornamento, puoi utilizzare il flag --ignore-warnings con gcloud CLI.
Tuttavia, non puoi forzare modifiche incompatibili se il bundle di schema è in uso da una vista materializzata continua o da una vista logica. Le viste dipendono dalle definizioni dei messaggi del bundle di schema per analizzare ed eseguire query sui dati, pertanto le modifiche incompatibili interromperebbero le query sulle viste logiche e causerebbero l'errore delle viste materializzate continue durante l'elaborazione dei dati. Per apportare
modifiche incompatibili con le versioni precedenti a un bundle di schemi a cui fa riferimento una vista,
devi prima aggiornare o eliminare le viste di riferimento.
Console
Nella console Google Cloud , apri l'elenco delle istanze Bigtable.
Seleziona un'istanza dall'elenco.
Nel riquadro di navigazione, fai clic su Bigtable Studio.
Nel riquadro Explorer, espandi la tabella che contiene il bundle di schema, quindi espandi Bundle di schema.
Accanto al bundle di schemi da aggiornare, fai clic sul menu Azioni more_vert, quindi fai clic su Aggiorna.
Nella finestra di dialogo Aggiorna bundle di schemi, nel campo Set di descrittori di file (file .pb), seleziona il nuovo set di descrittori di file protobuf. Le dimensioni del file non possono superare i 4 MB.
Fai clic su Salva.
gcloud
Per aggiornare un bundle di schema in modo che utilizzi un set di descrittori diverso, utilizza il comando
gcloud bigtable schema-bundles update:
gcloud bigtable schema-bundles update SCHEMA_BUNDLE_ID \
--instance=INSTANCE_ID \
--table=TABLE_ID \
--proto-descriptors-file=PROTO_DESCRIPTORS_FILE
Sostituisci quanto segue:
SCHEMA_BUNDLE_ID: l'ID del bundle di schema da aggiornare.INSTANCE_ID: l'ID dell'istanza che contiene il bundle di schema.TABLE_ID: l'ID della tabella che contiene il bundle di schema.PROTO_DESCRIPTORS_FILE: il percorso del nuovo file del set di descrittori.
(Facoltativo) Per forzare l'aggiornamento anche in presenza di modifiche incompatibili, aggiungi
il flag --ignore-warnings al comando. Non puoi forzare modifiche
incompatibili se il bundle di schema è utilizzato da una vista materializzata continua o
da una vista logica.
Java
Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.
Per eseguire l'autenticazione in Bigtable, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Eliminare un bundle di schemi
Non puoi eliminare un bundle di schemi se è utilizzato da una vista materializzata continua o da una vista logica. L'eliminazione del bundle causerebbe l'esito negativo delle query sulle viste logiche e impedirebbe alle viste materializzate continue di elaborare i dati in arrivo. Per eliminare il bundle di schemi, devi prima eliminare tutte le visualizzazioni che fanno riferimento al bundle o aggiornarle per rimuovere il riferimento.
Console
Nella console Google Cloud , apri l'elenco delle istanze Bigtable.
Seleziona un'istanza dall'elenco.
Nel riquadro di navigazione, fai clic su Bigtable Studio.
Nel riquadro Explorer, espandi la tabella che contiene il bundle di schema, quindi espandi Bundle di schema.
Accanto al bundle di schemi che vuoi eliminare, fai clic sul menu azioni more_vert, quindi fai clic su Elimina.
Nella finestra di dialogo di conferma, fai clic su Elimina.
gcloud
Per eliminare un bundle di schemi, utilizza il
comando
gcloud bigtable schema-bundles delete:
gcloud bigtable schema-bundles delete SCHEMA_BUNDLE_ID \
--instance=INSTANCE_ID \
--table=TABLE_ID
Sostituisci quanto segue:
SCHEMA_BUNDLE_ID: l'ID del bundle di schemi da eliminare.INSTANCE_ID: l'ID dell'istanza che contiene il bundle di schema.TABLE_ID: l'ID della tabella che contiene il bundle di schema.
Java
Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.
Per eseguire l'autenticazione in Bigtable, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Limitazioni
I bundle di schemi presentano le seguenti limitazioni:
- Puoi creare un massimo di 10 bundle di schemi per tabella.
- Le dimensioni totali dei descrittori del buffer di protocollo serializzato all'interno di un bundle di schemi non possono superare i 4 MB. Non esiste un limite diretto al numero di singoli schemi che puoi includere in un bundle, a condizione che la dimensione totale del bundle non superi questo limite.
Passaggi successivi
- Scopri come eseguire query sui dati protobuf.
- Scopri di più sulle query variabili o incerte.
- Consulta la panoramica di GoogleSQL per Bigtable.