列类型
请参阅 数据类型 获取一般参考。
数值类型
提示
数值类型的编码与 AMD64 或 ARM64 等小端 CPU 的内存布局匹配。
这允许实现非常高效的编码和解码。
整数
8、16、32、64、128 或 256 位的 Int 和 UInt 字符串,采用小端序。
浮点数
IEEE 754 二进制表示中的 Float32 和 Float64。
字符串
只是一个字符串数组,即 (长度,值)。
FixedString(N)
一个 N 字节序列的数组。
IP
IPv4 是 UInt32
数值类型的别名,并表示为 UInt32。
IPv6 是 FixedString(16)
的别名,并直接表示为二进制。
元组
元组只是一个列数组。例如,Tuple(String, UInt8) 只是两个连续编码的列。
映射
Map(K, V)
由三个列组成:Offsets ColUInt64、Keys K、Values V
。
Keys
和 Values
列中的行数是 Offsets
中的最后一个值。
数组
Array(T)
由两个列组成:Offsets ColUInt64、Data T
。
Data
中的行数是 Offsets
中的最后一个值。
可空
Nullable(T)
由 Nulls ColUInt8、Values T
组成,行数相同。
// Nulls is nullable "mask" on Values column.
// For example, to encode [null, "", "hello", null, "world"]
// Values: ["", "", "hello", "", "world"] (len: 5)
// Nulls: [ 1, 0, 0, 1, 0] (len: 5)
UUID
FixedString(16)
的别名,UUID 值表示为二进制。
枚举
Int8
或 Int16
的别名,但每个整数都映射到某个 String
值。
低基数
LowCardinality(T)
由 Index T、Keys K
组成,其中 K
是 (UInt8、UInt16、UInt32、UInt64) 中的一个,具体取决于 Index
的大小。
// Index (i.e. dictionary) column contains unique values, Keys column contains
// sequence of indexes in Index column that represent actual values.
//
// For example, ["Eko", "Eko", "Amadela", "Amadela", "Amadela", "Amadela"] can
// be encoded as:
// Index: ["Eko", "Amadela"] (String)
// Keys: [0, 0, 1, 1, 1, 1] (UInt8)
//
// The CardinalityKey is chosen depending on Index size, i.e. maximum value
// of chosen type should be able to represent any index of Index element.
布尔值
UInt8
的别名,其中 0
为假,1
为真。