设置 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 文件的路径。以下代码段展示了使用所提供的 format-file 参数调用 cbt lookup 的示例。
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”。cbtCLI 会将存储在此列中的所有值解释并设置格式为Catproto 消息类型。该类型必须与为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 的格式值不区分大小写。