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

CapnProto

Not supported in ClickHouse Cloud
输入输出别名

描述

CapnProto 格式是一种二进制消息格式,类似于 Protocol Buffers 格式和 Thrift,但与 JSONMessagePack 不同。 CapnProto 消息是严格类型且不具自描述性的,这意味着它们需要一个外部模式描述。该模式在查询时动态应用并且针对每个查询进行缓存。

另请参见 格式模式

数据类型匹配

下表显示了支持的数据类型以及它们如何与 ClickHouse 的 数据类型INSERTSELECT 查询中进行匹配。

CapnProto 数据类型 (INSERT)ClickHouse 数据类型CapnProto 数据类型 (SELECT)
UINT8, BOOLUInt8UINT8
INT8Int8INT8
UINT16UInt16, DateUINT16
INT16Int16INT16
UINT32UInt32, DateTimeUINT32
INT32Int32, Decimal32INT32
UINT64UInt64UINT64
INT64Int64, DateTime64, Decimal64INT64
FLOAT32Float32FLOAT32
FLOAT64Float64FLOAT64
TEXT, DATAString, FixedStringTEXT, DATA
union(T, Void), union(Void, T)Nullable(T)union(T, Void), union(Void, T)
ENUMEnum(8/16)ENUM
LISTArrayLIST
STRUCTTupleSTRUCT
UINT32IPv4UINT32
DATAIPv6DATA
DATAInt128/UInt128/Int256/UInt256DATA
DATADecimal128/Decimal256DATA
STRUCT(entries LIST(STRUCT(key Key, value Value)))MapSTRUCT(entries LIST(STRUCT(key Key, value Value)))
  • 整数类型之间可以在输入/输出时进行转换。
  • 在 CapnProto 格式中使用 Enum 时,请使用 format_capn_proto_enum_comparising_mode 设置。
  • 数组可以嵌套,并且可以以 Nullable 类型的值为参数。TupleMap 类型也可以被嵌套。

示例用法

插入和选择数据

您可以通过以下命令将 CapnProto 数据从文件插入到 ClickHouse 表中:

其中 schema.capnp 的内容如下所示:

您可以从 ClickHouse 表中选择数据,并使用以下命令将其保存到某个文件中,以 CapnProto 格式输出:

使用自动生成的模式

如果您没有外部的 CapnProto 模式,仍然可以使用自动生成的模式输入/输出 CapnProto 格式的数据。

例如:

在这种情况下,ClickHouse 将根据表结构自动生成 CapnProto 模式,并使用该模式以 CapnProto 格式序列化数据,使用的函数为 structureToCapnProtoSchema

您还可以读取具有自动生成模式的 CapnProto 文件(在这种情况下,该文件必须使用相同的模式创建):

格式设置

设置 format_capn_proto_use_autogenerated_schema 默认是启用的,并在未设置 format_schema 时适用。

您还可以在输入/输出期间使用设置 output_format_schema 将自动生成的模式保存到文件中。

例如:

在这种情况下,自动生成的 CapnProto 模式将被保存到文件 path/to/schema/schema.capnp 中。