Типы столбцов нативного протокола
Общий обзор см. в разделе Data Types.
Совет
Кодирование числовых типов соответствует формату размещения в памяти в процессорах с порядком байт little endian, таких как AMD64 или ARM64, что обеспечивает очень эффективное кодирование и декодирование.
| Type | Encoding |
|---|---|
| Integers (Int/UInt) | 8, 16, 32, 64, 128 или 256 бит в формате little endian |
| Floats (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 = значение |
| UUID | Псевдоним FixedString(16), представляется в бинарном виде |
| Enum | Псевдоним Int8 или Int16, каждому целому числу сопоставлено строковое значение |
| LowCardinality | LowCardinality(T) = два столбца: Index T, Keys K, где K — UInt8/16/32/64. Index содержит уникальные значения, Keys содержит индексы в Index |
| Bool | Псевдоним UInt8: 0=false, 1=true |
Пример: кодирование Nullable
Пример кодирования LowCardinality