Crea e gestisci schemi Avro
Gli schemi Apache Avro in Bigtable ti consentono di eseguire query su singoli campi all'interno dei record Avro che Bigtable archivia come byte serializzati nelle colonne. Per eseguire query su questi campi, carica gli schemi Avro in formato JSON in un bundle di schemi, una risorsa a livello di tabella che contiene uno o più schemi di record Avro. Per saperne di più sugli schemi Apache Avro, consulta la documentazione di Apache Avro.
Il caricamento di un bundle di schemi Avro non modifica il modo in cui scrivi i dati in Bigtable. Continui a scrivere record Avro come byte serializzati. Il payload della cella deve contenere solo i byte non elaborati, senza uno schema incorporato o un fingerprint dello schema.
Dopo aver caricato un bundle di schemi in Bigtable, puoi eseguire query sui dati Avro utilizzando GoogleSQL per Bigtable, viste materializzate continue o viste logiche.
Prima di iniziare
Prima di creare e gestire i bundle di schemi Avro, segui questi passaggi:
- Installa Google Cloud CLI.
Inizializza gcloud CLI:
gcloud initAssicurati di avere un'istanza e una tabella Bigtable.
Abilita l'API Cloud Bigtable e l'API Cloud Bigtable Admin:
gcloud services enable bigtable.googleapis.com bigtableadmin.googleapis.com
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 Administrator (roles/bigtable.admin) sulla tabella.
Per ottenere l'accesso di sola lettura ai bundle di schemi ed eseguire query sui record Avro utilizzando GoogleSQL per Bigtable, chiedi all'amministratore di concederti il ruolo Bigtable Reader (roles/bigtable.reader) o Bigtable User (roles/bigtable.user) sulla tabella.
Questi ruoli predefiniti contengono le autorizzazioni necessarie per lavorare con i bundle di schemi ed eseguire query sui dati Avro. Per visualizzare le autorizzazioni richieste, espandi la sezione Autorizzazioni richieste:
Autorizzazioni obbligatorie
Per creare e gestire i bundle di schemi, devi disporre delle seguenti autorizzazioni a livello di tabella o di bundle di schemi, a seconda dell'operazione:
bigtable.schemaBundles.create: crea bundle di schemi per una tabellabigtable.schemaBundles.update: aggiorna la definizione di un bundle di schemibigtable.schemaBundles.delete: elimina un bundle di schemibigtable.schemaBundles.get: ottieni informazioni su un bundle di schemibigtable.schemaBundles.list: elenca i bundle di schemi in una tabellabigtable.schemaBundles.getIamPolicy: recupera la policy IAM per un bundle di schemibigtable.schemaBundles.setIamPolicy: imposta la policy IAM per un bundle di schemi
Per leggere o filtrare i record Avro utilizzando GoogleSQL per Bigtable, devi disporre delle seguenti autorizzazioni:
bigtable.tables.readRowsbigtable.instances.executeQuery
Puoi anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Per saperne di più sui ruoli e sulle autorizzazioni di Bigtable, consulta Controllo dell'accesso con IAM.
Prepara i file di schema Avro
Prima di creare un bundle di schemi Avro, prepara uno o più file di schema Avro formattati in JSON nel formato file AVSC o JSON. Ogni file deve contenere uno schema Avro record valido e autonomo al livello più alto con tutte le dipendenze in linea. Se più file di un bundle incorporano lo stesso record o enum nello stesso spazio dei nomi, le definizioni devono corrispondere, inclusi doc e aliases.
Crea un bundle di schemi Avro
Per creare un bundle di schemi Avro in una tabella, utilizza il comando gcloud bigtable schema-bundles create:
gcloud bigtable schema-bundles create SCHEMA_BUNDLE_ID \
--instance=INSTANCE_ID \
--table=TABLE_ID \
--avro-schema-path=AVRO_SCHEMA_PATH
Sostituisci quanto segue:
SCHEMA_BUNDLE_ID: un ID univoco per il bundle di schemi. L'ID deve avere una lunghezza compresa tra 1 e 50 caratteri, può contenere solo lettere, numeri, trattini bassi e trattini, non può iniziare con un trattino e non può contenere un punto (.).INSTANCE_ID: l'ID dell'istanza che contiene la tabella.TABLE_ID: l'ID della tabella in cui creare il bundle di schemi.AVRO_SCHEMA_PATH: il percorso di un file di schema Avro in formato JSON o di una directory contenente uno o più file di schema Avro. Ogni file deve essere un oggetto JSON autonomo con tutte le dipendenze incorporate.
Visualizza informazioni sui bundle di schemi
Puoi visualizzare le informazioni sui bundle di schemi in una tabella recuperando la definizione di un singolo bundle di schemi o elencando tutti i bundle di schemi nella tabella.
Ottieni una definizione del bundle di schemi Avro
Per recuperare la definizione dello schema Avro in formato JSON per 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 schemiINSTANCE_ID: l'ID dell'istanzaTABLE_ID: l'ID della tabella
Elenca i bundle di schemi in una tabella
Per elencare gli ID di tutti i bundle di schemi in una tabella, inclusi i bundle di schemi Avro e protobuf, 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'istanzaTABLE_ID: l'ID della tabella
Per esaminare le definizioni dello schema sottostante per un bundle di schemi specifico dall'elenco, esegui il comando gcloud bigtable schema-bundles describe.
Aggiorna un bundle di schemi Avro
Per aggiornare un bundle di schemi Avro, utilizza il comando gcloud bigtable schema-bundles update. Puoi solo aggiungere nuove definizioni di record o enum Avro a un bundle di schemi Avro esistente e non puoi modificare il tipo di un bundle di schemi tra Avro e protobuf. Quando aggiorni il bundle, devi passare un file o una directory che includa sia i nuovi schemi sia tutti quelli esistenti.
gcloud bigtable schema-bundles update SCHEMA_BUNDLE_ID \
--instance=INSTANCE_ID \
--table=TABLE_ID \
--avro-schema-path=AVRO_SCHEMA_PATH
Sostituisci quanto segue:
SCHEMA_BUNDLE_ID: l'ID del bundle di schemi da aggiornareINSTANCE_ID: l'ID dell'istanza che contiene il bundle di schemiTABLE_ID: l'ID della tabella che contiene il bundle di schemiAVRO_SCHEMA_PATH: il percorso di un file di schema Avro in formato JSON o di una directory contenente uno o più file di schema Avro
Elimina un bundle di schemi Avro
Se una vista materializzata continua o una vista logica fa riferimento a un bundle di schemi, non puoi eliminare il bundle. Prima di eliminare il bundle, elimina tutte le viste materializzate continue che fanno riferimento al bundle. Per tutte le visualizzazioni logiche che fanno riferimento al bundle, aggiornale per rimuovere il riferimento o eliminale. Per saperne di più, consulta Crea e gestisci viste materializzate continue o Crea e gestisci viste logiche.
Per eliminare un bundle di schemi Avro, 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 eliminareINSTANCE_ID: l'ID dell'istanza che contiene il bundle di schemiTABLE_ID: l'ID della tabella che contiene il bundle di schemi
Prezzi
Non sono previsti costi aggiuntivi per la creazione o la gestione dei bundle di schemi Avro. Per le richieste e le risposte vengono applicati i costi standard per la larghezza di banda di rete. Se utilizzi il serverless computing di Data Boost per leggere i dati da Bigtable, paghi per le risorse di computing utilizzate dalle query. Per saperne di più, consulta i prezzi di Bigtable.
Limitazioni
I bundle di schemi Avro presentano le seguenti limitazioni:
- Puoi leggere ed eseguire query su una colonna come record Avro utilizzando GoogleSQL per Bigtable, viste materializzate continue e viste logiche. L'API Bigtable
ReadRowse le tabelle esterne BigQuery non supportano l'analisi Avro lato server. - Puoi creare fino a 10 bundle di schemi per tabella. Questo limite si applica sia ai bundle di schemi Avro che a quelli di Protobuf.
- La dimensione totale degli schemi Avro in formato JSON all'interno di un singolo bundle di schemi non può superare i 4 MB. Bigtable converte anche il bundle in un set di descrittori protobuf interno, che non può superare i 4 MB.
- Bigtable non supporta i seguenti tipi di schema, strutture e pattern di denominazione Avro:
- Il tipo
fixede i tipi logici, comedate,duration,time-microseuuid. - Unioni con più rami con più di un tipo non null. Sono supportate solo le unioni nullable, come
["null", "string"]. - Raccolte nidificate, come array o mappe, che contengono altri array o mappe.
- Array con elementi nullable. Le mappe con valori nullable, come
{"type": "map", "values": ["null", "string"]}, sono supportate. - Array con elementi di record vuoti e senza campi.
- Definizioni di record cicliche o ricorsive o riferimenti a record e oggetti JSON complessi, come record, array, mappe ed enum in linea, nidificati a più di 32 livelli.
- Trattini bassi (
_) nei valori Avronamespace. - Nomi di simboli
enumduplicati in diversi tipi dienumnello stesso spazio dei nomi. - Più campi
mapnello stesso record i cui nomi vengono convertiti nella stessa stringa in notazione a cammello, ad esempiomy_map,myMapemy__map.
- Il tipo
- Quando esegue query sui dati, Bigtable ignora alcuni attributi dello schema Avro, come i valori predefiniti dei campi (
default),aliases,doce l'ordinamento (order). Tuttavia, se più file in un bundle definiscono lo stessorecordoenumnello stesso spazio dei nomi, le loro definizioni devono corrispondere, inclusidocealiases.
Passaggi successivi
- Scopri come eseguire query sui dati Avro.
- Scopri come creare e gestire gli schemi Protobuf.
- Leggi la panoramica di GoogleSQL per Bigtable.