Da formato a los resultados de la CLI de cbt
En este documento, se describe cómo dar formato a tipos específicos de datos almacenados en filas de Bigtable cuando los muestra la CLI de cbt.
Ejemplos de formato
A partir de la versión 0.12.0, la CLI de cbt puede dar formato a ciertos tipos complejos de datos almacenados en filas de tablas.
Cuando usas los comandos cbt read o cbt lookup, la CLI de cbt puede “imprimir con formato estilístico” los valores almacenados en las filas.
En el siguiente ejemplo, se muestra el resultado de los datos de la CLI de 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 muestra el resultado de los datos 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"
Imprime filas con formato
Para dar formato a una columna o familia de columnas, debes proporcionar un archivo YAML que especifique el formato de esa columna. Cuando llamas a cbt lookup o a cbt read, pasas la ruta al archivo YAML con el argumento format-file. En el siguiente fragmento, se muestra un ejemplo de llamada a cbt lookup con el argumento format-file proporcionado.
cbt lookup my-table r1 format-file=/path/to/formatting.yml
Define los formatos de datos de columna en YAML
El archivo YAML de formato debe conectar los nombres de las columnas o la familia de columnas con los tipos de datos almacenados en ellas. En el siguiente fragmento, se muestra un ejemplo de un 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;
}
Lo siguiente se observa en el ejemplo:
- El campo
protocol_buffer_definitionsproporciona una lista de archivos .proto que pueden contener tipos de mensajes de búfer de protocolo para usar en la decodificación de datos protobuf. - El campo
protocol_buffer_pathsproporciona una lista de rutas de acceso locales que pueden contener archivos .proto para decodificar tipos de búferes de protocolo. No es necesario que especifiques las ubicaciones de las importaciones estándar de búferes de protocolo, como los mensajes en el paquetegoogle/protobuf. El campo
columnscontiene una lista de nombres de columnas con los tipos de datos correspondientes para cada columna:- La columna
protobuftieneencodingconfigurado como “ProtocolBuffer” y sutypecomo “Cat”. La CLI decbtinterpreta y formatea 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
jsontiene su campoencodingconfigurado como “json”.cbtinterpreta y formatea 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 todas las columnas de una familia de columnas.default_type: Este campo define un tipo de datos predeterminado para las columnas con codificación big-endian, little-endian y búfer de protocolo.families: Este campo define las codificaciones y los tipos para todas las columnas dentro de una familia de columnas. Puedes proporcionar undefault_encodingy undefault_typepara una familia de columnas. También puedes anular estas codificaciones a nivel de columna mediante un campocolumnsque enumere las columnas por nombre con los tipos de datos y de codificación 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 de cbt admite el formato para varios tipos de datos complejos. En la siguiente tabla, se enumeran los tipos de datos admitidos y las strings que deben proporcionarse en el archivo YAML para cada uno de los tipos de listas. Los valores de string no distinguen mayúsculas de minúsculas.
| Data type | Valor de formato 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 compatibles con el formato en resultados de cbt.
- La codificación hexadecimal es independiente del tipo. Los datos se muestran como una representación hexadecimal sin procesar de los datos almacenados.
- Los tipos de codificaciones big-endian y little-endian disponibles son los siguientes:
int8,int16,int32,int64,uint8,uint16,uint32,uint64,float32yfloat64. 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, de lo contrario, como arrays. Los nombres de tipos no distinguen mayúsculas de minúsculas. - Los tipos proporcionados para la codificación protocol-buffer deben coincidir con los tipos de mensajes definidos en los archivos de definición de protocol-buffer proporcionados. Los tipos no distinguen mayúsculas de minúsculas. Si no se especifica ningún tipo, el valor predeterminado de los datos de las columnas que se muestran es el nombre predeterminado de la columna.
- Los valores de formato para YAML no distinguen mayúsculas de minúsculas.