设置 cbt CLI 的输出的格式
本文档介绍了如何在 cbt
CLI 显示 Bigtable 行中存储的特定类型的数据时设置其格式。
格式设置示例
从 0.12.0 版开始,cbt
CLI 可以设置表行中存储的特定复杂类型的数据的格式。使用 cbt read
或 cbt lookup
命令时,
cbt
CLI
罐
“美观输出”存储在各行中的值。
以下示例展示了 cbt
CLI 的不带格式的数据输出。
----------------------------------------
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}"
以下示例展示了 cbt
CLI 的带格式的数据输出。
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"
输出带格式的行
要设置列或列族的格式,您必须提供一个 YAML 文件,
用于指定该列的格式。调用 cbt lookup
或 cbt read
时,您可以使用 format-file
参数传入 YAML 文件的路径。以下代码段显示了一个使用以下代码调用 cbt lookup
的示例:
提供的 format-file
参数。
cbt lookup my-table r1 format-file=/path/to/formatting.yml
在 YAML 中定义列数据格式
YAML 格式设置文件必须将列名称或列族名称与其中存储的数据类型相关联。以下代码段展示了 YAML 格式设置文件的示例。
protocol_buffer_definitions:
- cat.proto
protocol_buffer_paths:
- testdata/
columns:
col1:
encoding: ProtocolBuffer
type: Cat
col2:
encoding: json
以下代码段显示了“cat.proto”的内容。
syntax = "proto3";
package cats;
option go_package = "github.com/protocolbuffers/protobuf/examples/go/tutorialpb";
message Cat {
string name = 1;
int32 age = 2;
}
我们来看一下示例:
protocol_buffer_definitions
字段提供了 .proto 文件列表,其中可包含用于对 protobuf 数据进行解码的协议缓冲区消息类型。protocol_buffer_paths
字段提供一系列本地路径,其中可以包含用于解码协议缓冲区类型的 .proto 文件。 您无需指定标准协议缓冲区的位置 导入,例如google/protobuf
软件包中的消息。columns
字段包含列名称列表以及每列对应的数据类型:protobuf
列的encoding
设置为“ProtocolBuffer”,type
设置为“Cat”。通过cbt
CLI 解析存储的所有值并设置其格式 作为Cat
proto 消息类型。该类型必须与为protocol_buffer_definition
字段提供的某个 .proto 文件中定义的消息类型相对应。json
列的encoding
字段设置为“json”。cbt
将此列中存储的所有值解释并设置为 JSON 结构。
您可以提供的其他字段包括:
default_encoding
:此字段用于为表中的所有列或列族中的所有列定义默认格式。default_type
:此字段定义了协议缓冲区、大端字节序和小端字节序编码列的默认数据类型。families
:此字段会定义其中所有列的编码和类型 列族。您可以提供default_encoding
和default_type
。 。您还可以在列级别替换这些编码,方法是提供一个columns
字段,其中按名称列出列以及相应的编码和数据类型,如以下代码段所示:families: family1: default_encoding: BigEndian default_type: INT64 columns: address: encoding: PROTO type: tutorial.Person
支持的数据类型
通过
cbt
CLI
支持为几种复杂数据类型设置格式。下表列出了 YAML 文件中为每种列表类型提供的支持的数据类型和字符串。字符串值不区分大小写。
数据类型 | YAML 的格式值 |
---|---|
十六进制 | Hex 、H |
大端字节序 | BigEndian 、B |
小端字节序 | LittleEndian 、L |
协议缓冲区 | ProtocolBuffer 、P 、PROTO |
JSON | JSON 、J |
表 1:支持在 cbt
输出中设置格式的数据类型。
- 十六进制编码与类型无关。数据显示为 所存储数据的十六进制表示形式。
- big-endian 和 little-endian 编码的可用类型为
int8
、int16
、int32
、int64
、uint8
、uint16
、uint32
、uint64
、float32
和float64
。存储的数据长度必须是类型大小的倍数,以字节为单位。如果存储的 长度与类型大小匹配,否则为数组。类型名称不 区分大小写。 - 为协议缓冲区编码提供的类型必须与提供的协议缓冲区定义文件中定义的消息类型相匹配。类型不区分大小写。 如果未指定类型,则默认为所显示的列数据的列名称。
- YAML 的格式值不区分大小写。