La codificación de los tipos numéricos coincide con la representación en memoria de las CPU little-endian, como AMD64 o ARM64, lo que permite una codificación y decodificación muy eficientes.
| Tipo | Codificación |
|---|---|
| Enteros (Int/UInt) | 8, 16, 32, 64, 128 o 256 bits en little endian |
| Flotantes (Float32/Float64) | representación binaria IEEE 754 |
| String | Array de cadenas como (len, value) |
| FixedString(N) | Array de secuencias de N bytes |
| IPv4 | Alias de UInt32, representado como UInt32 |
| IPv6 | Alias de FixedString(16), representado en binario |
| Tuple | Array de columnas codificadas de forma continua. Example: Tuple(String, UInt8) = dos columnas continuas |
| Map | Map(K, V) = tres columnas: Offsets ColUInt64, Keys K, Values V. El número de filas en Keys/Values = el último valor de Offsets |
| Array | Array(T) = dos columnas: Offsets ColUInt64, Data T. El número de filas en Data = el último valor de Offsets |
| Nullable | Nullable(T) = dos columnas: Nulls ColUInt8, Values T con el mismo número de filas. Nulls es una máscara: 1=null, 0=value |
| UUID | Alias de FixedString(16), representado en binario |
| Enum | Alias de Int8 o Int16, cada entero se asigna a un valor String |
| LowCardinality | LowCardinality(T) = dos columnas: Index T, Keys K donde K es UInt8/16/32/64. Index contiene valores únicos; Keys contiene índices de Index |
| Bool | Alias de UInt8: 0=false, 1=true |
To encode [null, "", "hello", null, "world"]:
Values: ["", "", "hello", "", "world"] (len: 5)
Nulls: [ 1, 0, 0, 1, 0] (len: 5)
To encode ["Eko", "Eko", "Amadela", "Amadela", "Amadela", "Amadela"]:
Index: ["Eko", "Amadela"] (String)
Keys: [0, 0, 1, 1, 1, 1] (UInt8)