Formatear la salida de la CLI de cbt
En este documento se describe cómo dar formato a tipos de datos específicos almacenados en filas de Bigtable cuando se muestran con la CLI de cbt
.
Ejemplos de formato
A partir de la versión 0.12.0, la cbt
CLI
puede dar formato a determinados tipos complejos de datos almacenados en filas de tablas.
Cuando usas el comando cbt read
o cbt lookup
, la cbt
CLI
puede
aplicar un formato de impresión bonito a los valores almacenados en las filas.
En el siguiente ejemplo se muestran los datos de salida de la CLI cbt
sin formato.
----------------------------------------
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}"
En el siguiente ejemplo se muestran los datos de salida de la CLI de cbt
con formato.
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"
Imprimir filas con formato
Para dar formato a una columna o a una familia de columnas, debe proporcionar un archivo YAML que especifique el formato de esa columna. Cuando llamas a cbt lookup
o cbt read
, debes indicar la ruta al archivo YAML con el argumento format-file
. En el siguiente fragmento de código se muestra un ejemplo de llamada a cbt lookup
con el argumento format-file
.
cbt lookup my-table r1 format-file=/path/to/formatting.yml
Definir formatos de datos de columna en YAML
El archivo YAML de formato debe conectar los nombres de las columnas o de las familias de columnas con los tipos de datos almacenados en ellas. El siguiente fragmento muestra un ejemplo de archivo de formato YAML.
protocol_buffer_definitions:
- cat.proto
protocol_buffer_paths:
- testdata/
columns:
col1:
encoding: ProtocolBuffer
type: Cat
col2:
encoding: json
En el siguiente fragmento se muestra el contenido 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;
}
Analicemos el ejemplo:
- El campo
protocol_buffer_definitions
proporciona una lista de archivos .proto que pueden contener tipos de mensajes de búfer de protocolo que se pueden usar para decodificar datos de protobuf. - El campo
protocol_buffer_paths
proporciona una lista de rutas locales que pueden contener archivos .proto para decodificar tipos de búfer de protocolo. No es necesario que especifiques las ubicaciones de las importaciones de búferes de protocolo estándar, como los mensajes del paquetegoogle/protobuf
. El campo
columns
contiene una lista de nombres de columnas con los tipos de datos correspondientes de cada columna:- La columna
protobuf
tiene el valor "ProtocolBuffer" enencoding
y el valor "Cat" entype
. La CLI decbt
interpreta y da formato a todos los valores almacenados en esta columna como un tipo de mensaje protoCat
. El tipo debe corresponder a un tipo de mensaje definido en uno de los archivos .proto proporcionados para el campoprotocol_buffer_definition
. - La columna
json
tiene el campoencoding
con el valor "json".cbt
interpreta y da formato a todos los valores almacenados en esta columna como una estructura JSON.
- La columna
Otros campos que puedes proporcionar:
default_encoding
: este campo define un formato predeterminado para todas las columnas de una tabla o de una familia de columnas.default_type
: este campo define un tipo de datos predeterminado para las columnas codificadas con búfer de protocolo, big-endian y little-endian.families
: este campo define las codificaciones y los tipos de todas las columnas de una familia de columnas. Puedes proporcionar undefault_encoding
y undefault_type
para una familia de columnas. También puede anular estas codificaciones a nivel de columna proporcionando un campocolumns
que enumere las columnas por nombre con la codificación y los tipos de datos adecuados, como se muestra en el siguiente fragmento:families: family1: default_encoding: BigEndian default_type: INT64 columns: address: encoding: PROTO type: tutorial.Person
Tipos de datos admitidos
La
CLI cbt
admite el formato de varios tipos de datos complejos. En la siguiente tabla se muestran los tipos de datos y las cadenas que se pueden proporcionar en el archivo YAML para cada tipo de lista. Los valores de cadena no distinguen entre mayúsculas y minúsculas.
Tipo de datos | Formato de valor para YAML |
---|---|
Hexadecimal | Hex , H |
Big-endian | BigEndian , B |
Little-endian | LittleEndian , L |
Búfer de protocolo | ProtocolBuffer , P , PROTO |
JSON | JSON , J |
Tabla 1. Tipos de datos admitidos para el formato en la salida cbt
.
- La codificación hexadecimal es independiente del tipo. Los datos se muestran como una representación hexadecimal sin formato de los datos almacenados.
- Los tipos disponibles para las codificaciones big-endian y little-endian son
int8
,int16
,int32
,int64
,uint8
,uint16
,uint32
,uint64
,float32
yfloat64
. La longitud de los datos almacenados debe ser un múltiplo del tamaño del tipo en bytes. Los datos se muestran como escalares si la longitud almacenada coincide con el tamaño del tipo o como matrices en caso contrario. Los nombres de los tipos no distinguen entre mayúsculas y minúsculas. - Los tipos proporcionados para la codificación protocol-buffer deben coincidir con los tipos de mensaje definidos en los archivos de definición de búfer de protocolo proporcionados. Los tipos no distinguen entre mayúsculas y minúsculas. Si no se especifica ningún tipo, se usará de forma predeterminada el nombre de la columna de los datos que se muestran.
- Los valores de formato de YAML no distinguen entre mayúsculas y minúsculas.