Criar e gerenciar esquemas protobuf
Neste documento, descrevemos como criar e realizar operações em pacotes de esquemas.
No Bigtable, é possível usar esquemas de protocol buffer (protobuf) para consultar campos individuais em mensagens protobuf armazenadas como bytes nas colunas. Para isso, faça upload dos seus esquemas em um pacote de esquemas, um recurso no nível da tabela que contém um ou mais dos seus esquemas protobuf.
O uso de pacotes de esquema oferece os seguintes benefícios:
- Economia de tempo e esforço: com buffers de protocolo, você define sua estrutura de dados uma vez em um arquivo proto e usa o código-fonte gerado para gravar e ler seus dados.
- Melhora a consistência dos dados: ao usar um arquivo proto como uma única fonte de verdade, você garante que todos os aplicativos e serviços estejam usando o mesmo modelo de dados.
- Elimina a duplicação de dados: é possível usar buffers de protocolo em projetos definindo tipos de mensagens em arquivos proto que residem fora de uma base de código de projeto específica.
O processo de uso de esquemas no Bigtable começa com seus arquivos proto. Um arquivo proto é um arquivo de texto em que você define a estrutura dos seus dados. Use a ferramenta de compilador protobuf, também chamada de protoc, para gerar um conjunto de descritores de arquivos protobuf, que é um esquema legível por máquina do arquivo proto. Em seguida, use esse conjunto de descritores para criar um pacote de esquema.
Para exemplos de arquivos proto e os conjuntos de descritores correspondentes, consulte Dados de exemplo.
O diagrama a seguir mostra o processo de uso de esquemas no Bigtable:
É possível criar pacotes de esquemas usando a Google Cloud CLI. Depois de fazer upload de um pacote de esquema para o Bigtable, é possível consultar seus dados usando o criador de consultas do Bigtable Studio, o GoogleSQL para Bigtable ou tabelas externas do Bigtable no BigQuery.
Antes de começar
Siga estas etapas se você planeja usar a CLI gcloud:
- Instale a CLI do Google Cloud.
Inicialize a CLI gcloud.
gcloud init
Funções exigidas
Para receber as permissões necessárias para criar e gerenciar pacotes de esquemas, peça
ao administrador para conceder a você o papel do
Identity and Access Management (IAM) de Administrador do Bigtable (roles/bigtable.admin)
na tabela.
Esse papel predefinido contém as permissões necessárias para o Bigtable trabalhar com pacotes de esquemas. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
bigtable.schemaBundles.createbigtable.schemaBundles.updatebigtable.schemaBundles.deletebigtable.schemaBundles.getbigtable.schemaBundles.list
Essas permissões também podem ser concedidas com papéis personalizados ou outros papéis predefinidos.
Para mais informações sobre papéis e permissões do Bigtable, consulte Controle de acesso com o IAM.
Gerar um conjunto de descritores de arquivo protobuf
Antes de criar um pacote de esquema, gere um conjunto de descritores dos arquivos proto com a ferramenta de compilador protobuf.
- Para instalar o compilador, baixe o pacote e siga as instruções no arquivo README.
Execute o compilador:
protoc --proto_path=IMPORT_PATH --include_imports \ --descriptor_set_out=DESCRIPTOR_OUTPUT_LOCATION PATH_TO_PROTOSubstitua:
IMPORT_PATH: o diretório em que o compilador protoc pesquisa arquivos proto.DESCRIPTOR_OUTPUT_LOCATION: o diretório em que o compilador protoc salva o conjunto de descritores gerado.PATH_TO_PROTO: o caminho para o arquivo proto.
Por exemplo, para criar um conjunto de descritores chamado library.pb para o
arquivo library.proto no diretório atual, use o seguinte comando:
protoc --include_imports --descriptor_set_out=library.pb
library.proto
Criar um pacote de esquemas
gcloud
Para criar um pacote de esquemas, use o 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
Substitua:
SCHEMA_BUNDLE_ID: um ID exclusivo para o novo pacote de esquema que não pode conter nenhum caractere de ponto ('.').INSTANCE_ID: o ID da instância em que o pacote de esquema será criado.TABLE_ID: o ID da tabela em que o pacote de esquema será criado.PROTO_DESCRIPTORS_FILE: o caminho para o conjunto de descritores gerado na etapa anterior.
Java
Para criar um pacote de esquemas, use o método createSchemaBundle:
Para saber como instalar e usar a biblioteca de cliente do Bigtable, consulte Bibliotecas de cliente do Bigtable.
Para autenticar no Bigtable, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Ver informações sobre pacotes de esquemas
Antes de ver informações sobre pacotes de esquema, você precisa ter uma tabela do Bigtable com pelo menos um pacote de esquema. É possível receber informações sobre pacotes de esquema em uma tabela recuperando a definição de um único pacote ou listando todos os pacotes de esquema em uma tabela.
Receber definição do pacote de esquema
gcloud
Para ver detalhes sobre um pacote de esquemas, use o comando
gcloud bigtable schema-bundles describe:
gcloud bigtable schema-bundles describe SCHEMA_BUNDLE_ID \
--instance=INSTANCE_ID \
--table=TABLE_ID
Substitua:
SCHEMA_BUNDLE_ID: o ID do pacote de esquemas.INSTANCE_ID: o ID da instância.TABLE_ID: o código da tabela.
Java
Para receber a definição de um pacote de esquema, use o método getSchemaBundle.
Esse método retorna um objeto SchemaBundle que contém a definição de esquema.
O exemplo a seguir mostra como receber um pacote de esquema e desserializar o conjunto de descritores para imprimir o conteúdo do esquema:
Para saber como instalar e usar a biblioteca de cliente do Bigtable, consulte Bibliotecas de cliente do Bigtable.
Para autenticar no Bigtable, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
O resultado será o seguinte:
--------- Deserialized FileDescriptorSet ---------
File: my_schema.proto
Package: my_package
Message: MyMessage
--------------------------------------------------
Listar pacotes de esquema em uma tabela
gcloud
Para ver uma lista de pacotes de esquema de uma tabela, use o
comando gcloud bigtable schema-bundles list:
gcloud bigtable schema-bundles list \
--instance=INSTANCE_ID \
--table=TABLE_ID
Substitua:
INSTANCE_ID: o ID da instância.TABLE_ID: o código da tabela.
Java
Para conferir uma lista de todos os pacotes de esquema em uma tabela, use o método listSchemaBundles. Esse método retorna uma lista de IDs de pacote de esquema.
O exemplo a seguir mostra como listar os pacotes de esquema em uma tabela:
Para saber como instalar e usar a biblioteca de cliente do Bigtable, consulte Bibliotecas de cliente do Bigtable.
Para autenticar no Bigtable, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
O resultado será o seguinte:
my-schema-bundle-1
my-schema-bundle-2
Atualizar um pacote de esquemas
Ao atualizar um pacote de esquema, o Bigtable verifica se o novo conjunto de descritores é compatível com versões anteriores do conjunto atual. Se for incompatível, a atualização vai falhar com um erro FailedPrecondition. Recomendamos que você
reserve os números de campos excluídos para evitar a reutilização deles. Para mais informações, consulte
Práticas recomendadas do Proto na documentação do protobuf.
Se você tiver certeza de que as mudanças incompatíveis são seguras e quiser forçar uma
atualização, use a flag --ignore-warnings com a CLI gcloud.
gcloud
Para atualizar um pacote de esquema e usar um conjunto de descritores diferente, use o 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
Substitua:
SCHEMA_BUNDLE_ID: o ID do pacote de esquemas a ser atualizado.INSTANCE_ID: o ID da instância que contém o pacote de esquema.TABLE_ID: o ID da tabela que contém o pacote de esquema.PROTO_DESCRIPTORS_FILE: o caminho para o novo arquivo de conjunto de descritores.
Opcional: para forçar a atualização mesmo que haja mudanças incompatíveis, anexe
o comando com a flag --ignore-warnings.
Java
Para saber como instalar e usar a biblioteca de cliente do Bigtable, consulte Bibliotecas de cliente do Bigtable.
Para autenticar no Bigtable, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Excluir um pacote de esquemas
gcloud
Para excluir um pacote de esquema, use o comando gcloud bigtable schema-bundles delete:
gcloud bigtable schema-bundles delete SCHEMA_BUNDLE_ID \
--instance=INSTANCE_ID \
--table=TABLE_ID
Substitua:
SCHEMA_BUNDLE_ID: o ID do pacote de esquemas a ser excluído.INSTANCE_ID: o ID da instância que contém o pacote de esquema.TABLE_ID: o ID da tabela que contém o pacote de esquema.
Java
Para saber como instalar e usar a biblioteca de cliente do Bigtable, consulte Bibliotecas de cliente do Bigtable.
Para autenticar no Bigtable, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Limitações
Os pacotes de esquemas têm as seguintes limitações:
- É possível criar no máximo 10 pacotes de esquema por tabela.
- O tamanho total dos descritores de buffer de protocolo serializados em um pacote de esquema não pode exceder 4 MB. Não há um limite direto para o número de esquemas individuais que podem ser incluídos em um pacote, desde que o tamanho total do pacote não exceda esse limite.
A seguir
- Saiba como consultar dados do protobuf.
- Saiba mais sobre consultas incertas ou que mudam.
- Consulte a visão geral do GoogleSQL para Bigtable.