Protobuf
输入 | 输出 | 别名 |
---|---|---|
✔ | ✔ |
描述
Protobuf
格式是 Protocol Buffers 格式。
该格式需要一个外部格式架构,在查询之间进行缓存。
ClickHouse 支持:
proto2
和proto3
语法。Repeated
/optional
/required
字段。
示例用法
基本示例
使用示例:
其中 schemafile.proto
文件内容如下:
为了找到表列与 Protocol Buffers 消息类型字段之间的对应关系,ClickHouse 会比较它们的名称。
这个比较是不区分大小写的,并且字符 _
(下划线)和 .
(点)被视为相等。
如果列和 Protocol Buffers 消息字段的类型不同,将应用必要的转换。
支持嵌套消息。例如,对于以下消息类型中的字段 z
:
ClickHouse 会尝试找到名为 x.y.z
(或 x_y_z
或 X.y_Z
等)的列。
嵌套消息适合用于输入或输出 嵌套数据结构。
在 protobuf 架构中定义的默认值(如下所示)不会应用,而是使用 表默认值 替代:
ClickHouse 以 length-delimited
格式输入和输出 protobuf 消息。
这意味着,在每条消息之前,其长度应该作为 可变宽度整数 (varint) 写入。
另见: 如何在流行语言中读取/写入 length-delimited protobuf 消息。
使用自动生成的架构
如果您没有外部的 Protobuf 架构用于您的数据,您仍然可以使用自动生成的架构以 Protobuf 格式输出/输入数据。
例如:
在这种情况下,ClickHouse 将根据表结构使用函数 structureToProtobufSchema
自动生成 Protobuf 架构。
然后将使用此架构将数据序列化为 Protobuf 格式。
您还可以读取使用自动生成架构创建的 Protobuf 文件。在这种情况下,文件必须使用相同的架构创建:
设置 format_protobuf_use_autogenerated_schema
默认启用,并在未设置 format_schema
的情况下应用。
您还可以在输入/输出时使用设置 output_format_schema
将自动生成的架构保存到文件中。例如:
在这种情况下,自动生成的 Protobuf 架构将保存在文件 path/to/schema/schema.capnp
中。
删除 Protobuf 缓存
要重新加载从 format_schema_path
加载的 Protobuf 架构,请使用 SYSTEM DROP ... FORMAT CACHE
语句。