ترميز الأنواع الرقمية مطابق لتخطيط الذاكرة في المعالجات ذات ترتيب البايت 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 |
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)