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_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 packagegoogle/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 colonneprotobuf
est défini sur "ProtocolBuffer" et son champtype
sur "Cat". La CLIcbt
interprè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
encoding
de la colonnejson
est défini sur "json". L'interpréteurcbt
interprè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_encoding
et unedefault_type
pour une famille de colonnes. Vous pouvez également ignorer ces encodages au niveau des colonnes en fournissant un champcolumns
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
etfloat64
. 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.