Типы столбцов в собственном протоколе
См. Типы данных для общего ознакомления.
Совет
Кодирование числовых типов соответствует представлению данных в памяти процессоров с порядком байтов little-endian, таких как AMD64 или ARM64, что обеспечивает очень эффективное кодирование и декодирование.
| Тип | Кодирование |
|---|---|
| Целые числа (Int/UInt) | 8, 16, 32, 64, 128 или 256 бит в формате little-endian |
| Числа с плавающей точкой (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