CapnProto
| 输入 | 输出 | 别名 |
|---|---|---|
| ✔ | ✔ |
描述
CapnProto 格式是一种二进制消息格式,类似于 Protocol Buffers 格式和 Thrift,但与 JSON 或 MessagePack 不同。
CapnProto 消息是严格类型且不自描述的,这意味着它们需要外部模式描述。模式在运行时应用并为每个查询缓存。
另请参见 格式模式。
数据类型匹配
下表显示了支持的数据类型以及它们如何在 INSERT 和 SELECT 查询中与 ClickHouse 的 数据类型 匹配。
CapnProto 数据类型 (INSERT) | ClickHouse 数据类型 | CapnProto 数据类型 (SELECT) |
|---|---|---|
UINT8, BOOL | UInt8 | UINT8 |
INT8 | Int8 | INT8 |
UINT16 | UInt16, Date | UINT16 |
INT16 | Int16 | INT16 |
UINT32 | UInt32, DateTime | UINT32 |
INT32 | Int32, Decimal32 | INT32 |
UINT64 | UInt64 | UINT64 |
INT64 | Int64, DateTime64, Decimal64 | INT64 |
FLOAT32 | Float32 | FLOAT32 |
FLOAT64 | Float64 | FLOAT64 |
TEXT, DATA | String, FixedString | TEXT, DATA |
union(T, Void), union(Void, T) | Nullable(T) | union(T, Void), union(Void, T) |
ENUM | Enum(8/16) | ENUM |
LIST | Array | LIST |
STRUCT | Tuple | STRUCT |
UINT32 | IPv4 | UINT32 |
DATA | IPv6 | DATA |
DATA | Int128/UInt128/Int256/UInt256 | DATA |
DATA | Decimal128/Decimal256 | DATA |
STRUCT(entries LIST(STRUCT(key Key, value Value))) | Map | STRUCT(entries LIST(STRUCT(key Key, value Value))) |
- 整数类型在输入/输出期间可以相互转换。
- 在 CapnProto 格式中使用
Enum时,请使用设置 format_capn_proto_enum_comparising_mode。 - 数组可以嵌套,并且可以将
Nullable类型的值作为参数。Tuple和Map类型也可以嵌套。
示例用法
插入和选择数据
您可以通过以下命令将 CapnProto 数据从文件插入到 ClickHouse 表中:
其中 schema.capnp 看起来像这样:
您可以从 ClickHouse 表中选择数据,并使用以下命令将其保存到某个文件中,格式为 CapnProto:
使用自动生成的模式
如果您没有外部 CapnProto 模式用于您的数据,您仍然可以使用自动生成的模式在 CapnProto 格式中输出/输入数据。
例如:
在这种情况下,ClickHouse 将根据表结构使用函数 structureToCapnProtoSchema 自动生成 CapnProto 模式,并将使用此模式序列化 CapnProto 格式中的数据。
您还可以读取具有自动生成模式的 CapnProto 文件(在这种情况下,文件必须使用相同的模式创建):
格式设置
设置 format_capn_proto_use_autogenerated_schema 默认启用,并且适用于未设置 format_schema 的情况。
您还可以在输入/输出期间使用设置 output_format_schema 将自动生成的模式保存到文件中。
例如:
在这种情况下,自动生成的 CapnProto 模式将保存到文件 path/to/schema/schema.capnp 中。