Mettre en forme la sortie de la CLI cbt
Ce document explique comment mettre en forme des types de données spécifiques stockés dans des 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 formater certains types complexes de données stockées dans des lignes de table.
Lorsque vous utilisez la commande cbt read ou cbt lookup, la CLI cbt peut "mettre en forme" des valeurs stockées dans les lignes.
L'exemple suivant montre une sortie de données de la CLI cbt sans mise en forme.
----------------------------------------
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 une sortie de données de la CLI cbt avec mise en forme.
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"
Imprimer les lignes avec mise en forme
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_definitionsfournit 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_pathsfournit 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 packagegoogle/protobuf. Le champ
columnscontient la liste des noms de colonnes avec les types de données correspondants pour chaque colonne :- Le champ
encodingde la colonneprotobufest défini sur "ProtocolBuffer" et son champtypesur "Cat". La CLIcbtinterprète et met en forme toutes les valeurs stockées dans cette colonne en tant que type de message protoCat. Le type doit correspondre à un type de message défini dans l'un des fichiers .proto fournis pour le champprotocol_buffer_definition. - Le champ
encodingde la colonnejsonest défini sur "json". L'interpréteurcbtinterprète et met en forme toutes les valeurs stockées dans cette colonne en tant que structure JSON.
- Le champ
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 unedefault_encodinget unedefault_typepour une famille de colonnes. Vous pouvez également ignorer ces encodages au niveau des colonnes en fournissant un champcolumnsqui 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,float32etfloat64. 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.