设置 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”。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 的格式值不区分大小写。