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

Типы колонок

Смотрите Типы данных для общего справочника.

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

подсказка

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

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

Целые числа

Строка Int и UInt размером 8, 16, 32, 64, 128 или 256 бит, в малом порядке байтов.

Вещественные числа

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

Строка

Просто массив строк, т.е. (длина, значение).

FixedString(N)

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

IP

IPv4 является псевдонимом типа UInt32 и представлен как UInt32.

IPv6 является псевдонимом FixedString(16) и представлен в двоичном виде напрямую.

Кортеж

Кортеж — это просто массив колонок. Например, 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 — это "маска" null для колонки Values.
// Например, для кодирования [null, "", "hello", null, "world"]
//      Values: ["", "", "hello", "", "world"] (длина: 5)
//      Nulls:  [ 1,  0,       0,  1,       0] (длина: 5)

UUID

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

Enum

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

Низкая кардинальность

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 — это false, а 1 — это true.