跳转到主要内容

说明

CapnProto 格式是一种二进制消息格式,类似于 Protocol BuffersThrift,但不同于 JSONMessagePack。 CapnProto 消息具有严格的类型约束,且不是自描述的,这意味着它们需要外部 schema 描述。schema 会在运行时应用,并按每个查询缓存。 另请参见 Format Schema

数据类型匹配

下表展示了支持的数据类型,以及它们在 INSERTSELECT 查询中与 ClickHouse 数据类型 的对应关系。
  • 整数类型在输入和输出时可以相互转换。
  • 如需在 CapnProto 格式中使用 Enum,请使用 format_capn_proto_enum_comparising_mode 设置。
  • 数组可以嵌套,其参数也可以是 Nullable 类型。TupleMap 类型同样也可以嵌套。

使用示例

插入和查询数据

你可以使用以下命令,将文件中的 CapnProto 数据插入到 ClickHouse 表中:
其中,schema.capnp 的内容如下:
您可以使用以下命令从 ClickHouse 表中查询数据,并将其以 CapnProto 格式保存到文件中:

使用自动生成的 schema

如果你的数据没有外部 CapnProto schema,仍然可以借助自动生成的 schema,以 CapnProto 格式 输出或输入数据。 例如:
在这种情况下,ClickHouse 将使用函数 structureToCapnProtoSchema 根据表结构自动生成 CapnProto schema,并使用该 schema 以 CapnProto 格式序列化数据。 你也可以使用自动生成的 schema 读取 CapnProto 文件 (在这种情况下,文件必须使用相同的 schema 创建) :

格式设置

设置 format_capn_proto_use_autogenerated_schema 默认已启用,并且在未设置 format_schema 时生效。 你也可以在输入/输出时,使用设置 output_format_schema 将自动生成的 schema 保存到文件中。 例如:
在这种情况下,自动生成的 CapnProto schema 将保存到文件 path/to/schema/schema.capnp 中。
最后修改于 2026年7月2日