Ausgabe der cbt-Befehlszeile formatieren

In diesem Dokument wird beschrieben, wie bestimmte Datentypen, die in Bigtable-Zeilen gespeichert sind, formatiert werden, wenn sie von der cbt-Befehlszeile angezeigt werden.

Beispiele für Formatierungen

Ab Version 0.12.0 kann die cbt-Befehlszeile bestimmte komplexe Datentypen formatieren, die in Tabellenzeilen gespeichert sind. Wenn Sie den Befehl cbt read oder cbt lookup verwenden, kann die cbt-Befehlszeile die in den Zeilen gespeicherten Werte „praktisch drucken“.

Das folgende Beispiel zeigt die Datenausgabe über die cbt-Befehlszeile ohne Formatierung.

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

Das folgende Beispiel zeigt die Datenausgabe der cbt-Befehlszeile mit Formatierung.

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"

Wenn Sie eine Spalte oder Spaltenfamilie formatieren möchten, müssen Sie eine YAML-Datei bereitstellen, die die Formatierung für diese Spalte angibt. Wenn Sie cbt lookup oder cbt read aufrufen, übergeben Sie den Pfad an die YAML-Datei mit dem Argument format-file. Das folgende Snippet zeigt ein Beispiel für den Aufruf von cbt lookup mit dem angegebenen Argument format-file.

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

Spaltendatenformate in YAML definieren

Die YAML-Formatierungsdatei muss die Spaltennamen oder die Namen der Spaltenfamilie mit den darin gespeicherten Datentypen verbinden. Das folgende Snippet zeigt ein Beispiel für eine YAML-Formatierungsdatei.

protocol_buffer_definitions:
  - cat.proto
protocol_buffer_paths:
  - testdata/

columns:
  col1:
    encoding: ProtocolBuffer
    type: Cat

  col2:
    encoding: json

Das folgende Snippet zeigt den Inhalt von „cat.proto“.

syntax = "proto3";
package cats;

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

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

Sehen Sie sich das Beispiel an:

  • Das Feld protocol_buffer_definitions enthält eine Liste der .proto-Dateien, die Nachrichtentypen für den Protokollpuffer enthalten können, die für die Decodierung von Protobuf-Daten verwendet werden können.
  • Das Feld protocol_buffer_paths enthält eine Liste lokaler Pfade, die .proto-Dateien zum Decodieren von Protokollpuffertypen enthalten können. Sie müssen die Speicherorte der standardmäßigen Protokollpufferimporte nicht angeben, z. B. Nachrichten im Paket google/protobuf.
  • Das Feld columns enthält eine Liste von Spaltennamen mit den entsprechenden Datentypen für jede Spalte:

    • In der Spalte protobuf ist encoding auf „ProtocolBuffer“ und der type auf „Cat“ gesetzt. Die cbt-Befehlszeile interpretiert und formatiert alle in dieser Spalte gespeicherten Werte als Cat-Proto-Nachrichtentyp. Der Typ muss einem Nachrichtentyp entsprechen, der in einer der .proto-Dateien definiert ist, die für das Feld protocol_buffer_definition angegeben sind.
    • In der Spalte json ist das Feld encoding auf „json“ gesetzt. Der cbt interpretiert und formatiert alle in dieser Spalte gespeicherten Werte als JSON-Struktur.

Andere Felder, die Sie angeben können:

  • default_encoding: Dieses Feld definiert eine Standardformatierung für alle Spalten in einer Tabelle oder alle Spalten in einer Spaltenfamilie.
  • default_type: Dieses Feld definiert einen Standarddatentyp für Protokollpuffer-, Big-Endian- und Little-Endian-codierte Spalten.
  • families: Dieses Feld definiert Codierungen und Typen für alle Spalten in einer Spaltenfamilie. Sie können eine default_encoding und default_type für eine Spaltenfamilie angeben. Sie können diese Codierungen auch auf Spaltenebene überschreiben. Geben Sie dazu das Feld columns an, das Spalten nach Namen mit der entsprechenden Codierung und Datentypen auflistet, wie im folgenden Snippet gezeigt:

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

Unterstützte Datentypen

Die cbt-Befehlszeile unterstützt die Formatierung mehrerer komplexer Datentypen. In der folgenden Tabelle sind die unterstützten Datentypen und Strings aufgeführt, die in der YAML-Datei für jeden Listentyp bereitgestellt werden sollen. Bei den Stringwerten wird nicht zwischen Groß- und Kleinschreibung unterschieden.

Datentyp Formatierungswert für YAML
Hexadezimal Hex, H
Big-endian BigEndian, B
Little-endian LittleEndian, L
Protokollpuffer ProtocolBuffer, P, PROTO
JSON JSON, J

Tabelle 1. Datentypen, die für die Formatierung in der cbt-Ausgabe unterstützt werden.

  • Die hexadezimale Codierung ist vom Typ unabhängig. Daten werden als Hexadezimal-Rohdaten der gespeicherten Daten angezeigt.
  • Verfügbare Typen für Big-Endian- und Little-Endian-Codierungen sind int8, int16, int32, int64, uint8, uint16, uint32, uint64, float32 und float64. Die Länge der gespeicherten Daten muss ein Vielfaches der Typgröße in Byte sein. Daten werden als Skalare angezeigt, wenn die gespeicherte Länge mit der Typgröße übereinstimmt, oder andernfalls als Arrays. Bei Typnamen wird die Groß- und Kleinschreibung nicht berücksichtigt.
  • Die für die Protokollpuffercodierung angegebenen Typen müssen mit den in den bereitgestellten Protokollpufferdefinitionsdateien definierten Nachrichtentypen übereinstimmen. Bei Typen wird die Groß- und Kleinschreibung nicht berücksichtigt. Wenn kein Typ angegeben ist, wird standardmäßig der Spaltenname für die angezeigten Spaltendaten verwendet.
  • Bei den Formatierungswerten für YAML wird nicht zwischen Groß- und Kleinschreibung unterschieden.