Formatta output dall'interfaccia a riga di comando cbt

Questo documento descrive come formattare tipi specifici di dati archiviati nelle righe di Bigtable quando vengono visualizzati dall'interfaccia a riga di comando cbt.

Esempi di formattazione

A partire dalla versione 0.12.0, l'interfaccia a riga di comando cbt può formattare alcuni tipi complessi di dati archiviati nelle righe della tabella. Quando utilizzi il comando cbt read o cbt lookup, l'interfaccia a riga di comando cbt può "pretty print" i valori archiviati nelle righe.

L'esempio seguente mostra l'output dei dati dall'interfaccia a riga di comando cbt senza formattazione.

----------------------------------------
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}"

L'esempio seguente mostra l'output dei dati dall'interfaccia a riga di comando cbt con la formattazione.

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"

Per formattare una famiglia di colonne o famiglia di colonne, devi fornire un file YAML che specifichi la formattazione di quella colonna. Quando chiami cbt lookup o cbt read, passi il percorso del file YAML con l'argomento format-file. Lo snippet seguente mostra un esempio di chiamata a cbt lookup con l'argomento format-file fornito.

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

Definisci i formati dei dati delle colonne in YAML

Il file YAML di formattazione deve connettere i nomi delle colonne o i nomi famiglia di colonne ai tipi di dati archiviati al loro interno. Lo snippet seguente mostra un esempio di file di formattazione YAML.

protocol_buffer_definitions:
  - cat.proto
protocol_buffer_paths:
  - testdata/

columns:
  col1:
    encoding: ProtocolBuffer
    type: Cat

  col2:
    encoding: json

Lo snippet seguente mostra i contenuti di "cat.proto".

syntax = "proto3";
package cats;

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

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

Osservando l'esempio:

  • Il campo protocol_buffer_definitions fornisce un elenco di file .proto che possono contenere tipi di messaggi del buffer di protocollo da utilizzare per la decodifica dei dati protobuf.
  • Il campo protocol_buffer_paths fornisce un elenco di percorsi locali che possono contenere file .proto per la decodifica dei tipi di buffer di protocollo. Non è necessario specificare la posizione delle importazioni del buffer di protocollo standard, come i messaggi nel pacchetto google/protobuf.
  • Il campo columns contiene un elenco di nomi di colonna con i tipi di dati corrispondenti per ogni colonna:

    • Il valore encoding della colonna protobuf è impostato su "ProtocolBuffer" e il relativo type è impostato su "Cat". L'interfaccia a riga di comando cbt interpreta e formatta tutti i valori memorizzati in questa colonna come tipo di messaggio proto Cat. Il tipo deve corrispondere a un tipo di messaggio definito in uno dei file .proto forniti per il campo protocol_buffer_definition.
    • Il campo encoding della colonna json è impostato su "json". L'elemento cbt interpreta e formatta tutti i valori archiviati in questa colonna come una struttura JSON.

Altri campi che puoi fornire:

  • default_encoding: questo campo definisce una formattazione predefinita per tutte le colonne di una tabella o per tutte le colonne di una famiglia di colonne.
  • default_type: questo campo definisce un tipo di dati predefinito per le colonne con codifica buffer di protocollo, big-endian e low-endian.
  • families: questo campo definisce le codifiche e i tipi di tutte le colonne di una famiglia di colonne. Puoi specificare default_encoding e default_type per una famiglia di colonne. Puoi anche sostituire queste codifiche a livello di colonna fornendo un campo columns che elenca le colonne per nome con la codifica e i tipi di dati appropriati, come mostrato nel seguente snippet:

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

Tipi di dati supportati

L'interfaccia a riga di comando cbt supporta la formattazione per diversi tipi di dati complessi. Nella tabella seguente sono elencati i tipi di dati e le stringhe supportati da fornire nel file YAML per ciascuno dei tipi di elenco. I valori stringa non sono sensibili alle maiuscole.

Tipo di dati Valore di formattazione per YAML
Esadecimale Hex, H
Big-endian BigEndian, B
Little-endian LittleEndian, L
Buffer di protocollo ProtocolBuffer, P, PROTO
JSON JSON, J

Tabella 1. Tipi di dati supportati per la formattazione nell'output cbt.

  • La codifica esadecimale è indipendente dal tipo. I dati vengono visualizzati come rappresentazione esadecimale non elaborata dei dati archiviati.
  • I tipi disponibili per le codifiche big-endian e small-endian sono int8, int16, int32, int64, uint8, uint16, uint32, uint64, float32 e float64. La lunghezza dei dati archiviati deve essere un multiplo del tipo, misurato in byte. I dati vengono visualizzati come scalari se la lunghezza archiviata corrisponde alla dimensione del tipo o come array. I nomi dei tipi non sono sensibili alle maiuscole.
  • I tipi di codifica forniti per la codifica del buffer di protocollo devono corrispondere ai tipi di messaggi definiti nei file di definizione del buffer di protocollo forniti. I tipi non fanno distinzione tra maiuscole e minuscole. Se non viene specificato alcun tipo, il valore predefinito è il nome della colonna per i dati della colonna visualizzati.
  • I valori di formattazione per YAML non sono sensibili alle maiuscole.