Formater la sortie à partir de la CLI cbt

Ce document explique comment mettre en forme des types de données spécifiques stockés dans les lignes Bigtable lorsqu'ils sont affichés par la CLI cbt.

Exemples de mise en forme

À partir de la version 0.12.0, la CLI cbt peut mettre en forme certains types complexes de données stockées dans des lignes de table. Lorsque vous exécutez la commande cbt read ou cbt lookup, la CLI cbt peut effectuer une "impression élégante" des valeurs stockées dans les lignes.

L'exemple suivant montre des données de sortie de la CLI cbt sans formatage.

----------------------------------------
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'exemple suivant montre les données de sortie de la CLI cbt avec formatage.

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"

Pour mettre en forme une colonne ou une famille de colonnes, vous devez fournir un fichier YAML qui spécifie la mise en forme de cette colonne. Lorsque vous appelez cbt lookup ou cbt read, vous transmettez le chemin d'accès au fichier YAML avec l'argument format-file. L'extrait de code suivant montre un exemple d'appel de cbt lookup avec l'argument format-file fourni.

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

Définir les formats de données de colonne en YAML

Le fichier de mise en forme YAML doit associer les noms des colonnes ou les noms des familles de colonnes aux types de données qu'ils contiennent. L'extrait de code suivant montre un exemple de fichier de mise en forme YAML.

protocol_buffer_definitions:
  - cat.proto
protocol_buffer_paths:
  - testdata/

columns:
  col1:
    encoding: ProtocolBuffer
    type: Cat

  col2:
    encoding: json

L'extrait suivant montre le contenu 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;
}

Examinons l'exemple :

  • Le champ protocol_buffer_definitions fournit une liste de fichiers .proto pouvant contenir des types de messages de tampon de protocole à utiliser pour le décodage des données protobuf.
  • Le champ protocol_buffer_paths fournit la liste des chemins d'accès locaux pouvant contenir des fichiers .proto pour le décodage des types de tampons de protocole. Il n'est pas nécessaire de spécifier les emplacements des importations de tampon de protocole standards, tels que les messages dans le package google/protobuf.
  • Le champ columns contient la liste des noms de colonnes avec les types de données correspondants pour chaque colonne :

    • Le champ encoding de la colonne protobuf est défini sur "ProtocolBuffer" et son champ type sur "Cat". La CLI cbt interprète et met en forme toutes les valeurs stockées dans cette colonne en tant que message proto Cat. Le type doit correspondre à un type de message défini dans l'un des fichiers .proto fournis pour le champ protocol_buffer_definition.
    • Le champ encoding de la colonne json est défini sur "json". L'interpréteur cbt interprète et met en forme toutes les valeurs stockées dans cette colonne en tant que structure JSON.

Autres champs que vous pouvez fournir :

  • default_encoding : ce champ définit une mise en forme par défaut pour toutes les colonnes d'une table ou toutes les colonnes d'une famille de colonnes.
  • default_type : ce champ définit un type de données par défaut pour les colonnes de protocole de protocole de tampon ainsi que les colonnes "big-endian" et "little-endian".
  • families : ce champ définit les encodages et les types de toutes les colonnes d'une famille de colonnes. Vous pouvez fournir une default_encoding et une default_type pour une famille de colonnes. Vous pouvez également ignorer ces encodages au niveau des colonnes en fournissant un champ columns qui répertorie les colonnes par nom avec les types de données et d'encodage appropriés, comme illustré dans l'extrait suivant :

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

Types de données acceptés

La CLI cbt accepte la mise en forme de plusieurs types de données complexes. Le tableau suivant répertorie les types de données et les chaînes compatibles à inclure dans le fichier YAML pour chacun des types de liste. Les valeurs de chaîne ne sont pas sensibles à la casse.

Type de données Valeur de mise en forme pour YAML
Hexadécimal Hex, H
Big-endian BigEndian, B
Little-endian LittleEndian, L
Tampon de protocole ProtocolBuffer, P et PROTO
JSON JSON, J

Table 1. Types de données compatibles avec le formatage dans la sortie cbt.

  • L'encodage hexadécimal est indépendant du type. Les données s'affichent sous forme de représentation hexadécimale brute des données stockées.
  • Les types disponibles pour les encodages "big-endian" et "little-endian" sont les suivants : int8, int16, int32,int64, uint8, uint16, uint32, uint64, float32 et float64. La longueur des données stockées doit être un multiple de la taille du type, en octets. Les données sont affichées sous forme de scalaires si la longueur stockée correspond à la taille du type, ou sous forme de tableaux dans le cas contraire. Les noms de types ne sont pas sensibles à la casse.
  • Les types indiqués pour l'encodage protocol-buffer doivent correspondre aux types de messages définis dans les fichiers de définition de tampon de protocole fournis. Les types ne sont pas sensibles à la casse. Si aucun type n'est spécifié, le nom de la colonne pour les données de colonne à afficher est utilisé par défaut.
  • Les valeurs de mise en forme pour YAML ne sont pas sensibles à la casse.