原生协议列数据类型
常规说明请参见 数据类型。
提示
数值类型的编码与 AMD64 或 ARM64 等小端序 CPU 的内存布局一致,因此可以实现非常高效的编码与解码。
| 类型 | 编码 |
|---|---|
| 整数 (Int/UInt) | 采用小端序的 8、16、32、64、128 或 256 位 |
| 浮点数 (Float32/Float64) | IEEE 754 二进制表示 |
| String | 字符串数组,表示为 (len, value) |
| FixedString(N) | N 字节序列数组 |
| IPv4 | UInt32 的别名,以 UInt32 表示 |
| IPv6 | FixedString(16) 的别名,以二进制表示 |
| Tuple | 连续编码的列数组。示例:Tuple(String, UInt8) = 两个连续的列 |
| Map | Map(K, V) = 三列:Offsets ColUInt64, Keys K, Values V。Keys/Values 中的行数 = 最后一个 Offsets 值 |
| Array | Array(T) = 两列:Offsets ColUInt64, Data T。Data 中的行数 = 最后一个 Offsets 值 |
| Nullable | Nullable(T) = 两列:Nulls ColUInt8, Values T,两者行数相同。Nulls 为掩码:1=null,0=value |
| UUID | FixedString(16) 的别名,以二进制表示 |
| Enum | Int8 或 Int16 的别名,每个整数都映射到一个 String 值 |
| LowCardinality | LowCardinality(T) = 两列:Index T, Keys K,其中 K 为 UInt8/16/32/64。Index 包含唯一值,Keys 包含指向 Index 的索引 |
| Bool | UInt8 的别名:0=false,1=true |
示例:Nullable 编码
示例:LowCardinality 编码