跳到主要内容
跳到主要内容

Protobuf

Not supported in ClickHouse Cloud
输入输出别名

描述

Protobuf 格式是 Protocol Buffers 格式。

该格式需要一个外部格式架构,在查询之间进行缓存。

ClickHouse 支持:

  • proto2proto3 语法。
  • Repeated / optional / required 字段。

示例用法

基本示例

使用示例:

其中 schemafile.proto 文件内容如下:

为了找到表列与 Protocol Buffers 消息类型字段之间的对应关系,ClickHouse 会比较它们的名称。 这个比较是不区分大小写的,并且字符 _(下划线)和 .(点)被视为相等。 如果列和 Protocol Buffers 消息字段的类型不同,将应用必要的转换。

支持嵌套消息。例如,对于以下消息类型中的字段 z

ClickHouse 会尝试找到名为 x.y.z(或 x_y_zX.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 语句。

格式设置