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

Типы столбцов

См. раздел Типы данных для общей информации.

Числовые типы

Совет

Кодирование числовых типов соответствует расположению в памяти на процессорах с порядком байт little-endian, таких как AMD64 или ARM64.

Это позволяет реализовать очень эффективное кодирование и декодирование.

Целые числа

Последовательность значений Int и UInt размером 8, 16, 32, 64, 128 или 256 бит в формате little-endian.

Числа с плавающей запятой

Float32 и Float64 в двоичном представлении IEEE 754.

String

Просто массив строк (String), т. е. (len, value).

FixedString(N)

Массив последовательностей длиной N байт.

IP

IPv4 — это псевдоним числового типа UInt32 и хранится как значение UInt32.

IPv6 — это псевдоним FixedString(16) и хранится непосредственно в двоичном виде.

Tuple

Tuple — это просто массив столбцов. Например, Tuple(String, UInt8) — это просто два столбца, закодированные последовательно.

Map

Map(K, V) состоит из трёх столбцов: Offsets ColUInt64, Keys K, Values V.

Количество строк в столбцах Keys и Values соответствует последнему значению в Offsets.

Массив

Array(T) состоит из двух столбцов: Offsets ColUInt64, Data T.

Число строк в Data — это последнее значение в Offsets.

Nullable

Nullable(T) состоит из Nulls ColUInt8 и Values T с одинаковым количеством строк.

// Nulls — это маска nullable-значений для столбца Values.
// Например, для кодирования [null, "", "hello", null, "world"]
//      Values: ["", "", "hello", "", "world"] (len: 5)
//      Nulls:  [ 1,  0,       0,  1,       0] (len: 5)

UUID

Псевдоним типа FixedString(16), значение UUID, хранящееся в бинарном виде.

Enum

Псевдоним типа Int8 или Int16, но каждому целому числу соответствует некоторое значение типа String.

Тип LowCardinality

LowCardinality(T) состоит из Index T, Keys K, где K — один из (UInt8, UInt16, UInt32, UInt64) в зависимости от размера индекса Index.

// Столбец Index (т. е. словарь) содержит уникальные значения, столбец Keys содержит
// последовательность индексов в столбце Index, представляющих фактические значения.
//
// Например, ["Eko", "Eko", "Amadela", "Amadela", "Amadela", "Amadela"] может
// быть закодирован следующим образом:
//      Index: ["Eko", "Amadela"] (String)
//      Keys:  [0, 0, 1, 1, 1, 1] (UInt8)
//
// CardinalityKey выбирается в зависимости от размера Index, т. е. максимальное значение
// выбранного типа должно позволять представить любой индекс элемента Index.

Bool

Псевдоним для типа UInt8, где 0 — ложь, а 1 — истина.