Перейти к основному содержанию
Перейти к основному содержанию

Типы столбцов нативного протокола

Общий обзор см. в разделе Data Types.

Совет

Кодирование числовых типов соответствует формату размещения в памяти в процессорах с порядком байт little endian, таких как AMD64 или ARM64, что обеспечивает очень эффективное кодирование и декодирование.

TypeEncoding
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) = два последовательных столбца
MapMap(K, V) = три столбца: Offsets ColUInt64, Keys K, Values V. Количество строк в Keys/Values = последнее значение в Offsets
ArrayArray(T) = два столбца: Offsets ColUInt64, Data T. Количество строк в Data = последнее значение в Offsets
NullableNullable(T) = два столбца: Nulls ColUInt8, Values T с одинаковым количеством строк. Nulls — это маска: 1 = NULL, 0 = значение
UUIDПсевдоним FixedString(16), представляется в бинарном виде
EnumПсевдоним Int8 или Int16, каждому целому числу сопоставлено строковое значение
LowCardinalityLowCardinality(T) = два столбца: Index T, Keys K, где K — UInt8/16/32/64. Index содержит уникальные значения, Keys содержит индексы в Index
BoolПсевдоним UInt8: 0=false, 1=true

Пример: кодирование Nullable

To encode [null, "", "hello", null, "world"]:
  Values: ["", "", "hello", "", "world"] (len: 5)
  Nulls:  [ 1,  0,       0,  1,       0] (len: 5)

Пример кодирования LowCardinality

To encode ["Eko", "Eko", "Amadela", "Amadela", "Amadela", "Amadela"]:
  Index: ["Eko", "Amadela"] (String)
  Keys:  [0, 0, 1, 1, 1, 1] (UInt8)