Formatar a saída da CLI cbt

Neste documento, descrevemos como formatar tipos específicos de dados armazenados em linhas do Bigtable quando exibidos pela CLI cbt.

Exemplos de formatação

A partir da versão 0.12.0, a CLI cbt pode formatar determinados tipos complexos de dados armazenados em linhas da tabela. Quando você usa o comando cbt read ou cbt lookup, a CLI cbt pode "estilizar a formatação" dos valores armazenados nas linhas.

O exemplo a seguir mostra a saída dos dados da CLI cbt sem formatação.

----------------------------------------
r1
  fam1:col1                                 @ 2022/03/09-11:19:45.966000
    "\n\x05Brave\x10\x02"
  fam1:col2                                 @ 2022/03/14-11:17:20.014000
    "{\"name\": \"Brave\", \"age\": 2}"

O exemplo a seguir mostra a saída de dados da CLI cbt com formatação.

r1
  fam1:col1                                 @ 2022/03/09-11:19:45.966000
    name: "Brave"
    age: 2
  fam1:col2                                 @ 2022/03/14-11:17:20.014000
    age:     2.00
    name:   "Brave"

Para formatar uma coluna ou um grupo de colunas, forneça um arquivo YAML que especifique a formatação dela. Ao chamar cbt lookup ou cbt read, você passa o caminho para o arquivo YAML com o argumento format-file. O snippet a seguir mostra um exemplo de como chamar cbt lookup com o argumento format-file fornecido.

cbt lookup my-table r1 format-file=/path/to/formatting.yml

Definir formatos de dados de colunas em YAML

O arquivo YAML de formatação precisa conectar os nomes das colunas ou dos nomes das colunas aos tipos de dados armazenados nelas. O snippet a seguir mostra um exemplo de um arquivo de formatação YAML.

protocol_buffer_definitions:
  - cat.proto
protocol_buffer_paths:
  - testdata/

columns:
  col1:
    encoding: ProtocolBuffer
    type: Cat

  col2:
    encoding: json

O snippet a seguir mostra o conteúdo de "cat.proto".

syntax = "proto3";
package cats;

option go_package = "github.com/protocolbuffers/protobuf/examples/go/tutorialpb";

message Cat {
  string name = 1;
  int32 age = 2;
}

Analisando o exemplo:

  • O campo protocol_buffer_definitions fornece uma lista de arquivos .proto que podem conter tipos de mensagem de buffer de protocolo a serem usados para decodificar dados protobuf.
  • O campo protocol_buffer_paths fornece uma lista de caminhos locais que podem conter arquivos .proto para decodificar tipos de buffer de protocolo. Não é necessário especificar os locais das importações de buffer de protocolo padrão, como mensagens no pacote google/protobuf.
  • O campo columns contém uma lista de nomes de colunas com os tipos de dados correspondentes para cada coluna:

    • A coluna protobuf tem o encoding definido como "ProtocolBuffer" e o type está definido como "Cat". A CLI cbt interpreta e formata todos os valores armazenados nessa coluna como um tipo de mensagem proto Cat. O tipo precisa corresponder a um tipo de mensagem definido em um dos arquivos .proto fornecidos para o campo protocol_buffer_definition.
    • A coluna json tem o campo encoding definido como "json". O cbt interpreta e formata todos os valores armazenados nessa coluna como uma estrutura JSON.

Outros campos que você pode fornecer:

  • default_encoding: este campo define uma formatação padrão para todas as colunas de uma tabela ou todas as colunas de um grupo.
  • default_type: este campo define um tipo de dados padrão para o buffer de protocolo, as colunas codificadas big-endian e little-endian.
  • families: este campo define codificações e tipos para todas as colunas em um grupo. Você pode fornecer um default_encoding e um default_type para um grupo de colunas. Também é possível modificar essas codificações no nível da coluna fornecendo um campo columns que liste as colunas por nome com os tipos de codificação e dados apropriados, conforme mostrado no snippet a seguir:

    families:
      family1:
        default_encoding: BigEndian
        default_type: INT64
        columns:
          address:
            encoding: PROTO
            type: tutorial.Person
    

Tipos de dados compatíveis

A CLI cbt é compatível com a formatação para vários tipos de dados complexos. A tabela a seguir lista os tipos de dados e strings compatíveis para fornecer no arquivo YAML para cada um dos tipos de lista. Os valores de string não diferenciam maiúsculas de minúsculas.

Tipo de dado Como formatar o valor para YAML
Codificação Hex, H
Big-endian BigEndian, B
Little-endian LittleEndian, L
Buffer de protocolo ProtocolBuffer, P, PROTO
JSON JSON, J

Tabela 1. Tipos de dados compatíveis com formatação na saída cbt.

  • A codificação hexadecimal é do tipo agnóstico. Os dados são exibidos como uma representação hexadecimal bruta dos dados armazenados.
  • Os tipos disponíveis para as codificações big-endian e little-endian são int8 ,int16 ,int32 ,int64 ,uint8 ,uint16 ,uint32 ,uint64 ,float32 e float64. O comprimento de dados armazenados precisa ser um múltiplo do tipo dimensionado em bytes. Os dados serão exibidos como escalares se o comprimento armazenado corresponder ao tamanho do tipo. Caso contrário, os dados serão matrizes. Os nomes dos tipos não diferenciam maiúsculas de minúsculas.
  • Os tipos fornecidos para a codificação buffer de protocolo precisam corresponder aos tipos de mensagens definidos nos arquivos de definição do buffer de protocolo fornecidos. Os tipos não diferenciam maiúsculas de minúsculas. Se nenhum tipo for especificado, o padrão será o nome da coluna para os dados da coluna que estão sendo exibidos.
  • Os valores de formatação para YAML não diferenciam maiúsculas de minúsculas.