يسمح بتخزين وسم خاص (NULL) يشير إلى "قيمة مفقودة" إلى جانب القيم العادية التي يسمح بها T. على سبيل المثال، يمكن لعمود من النوع Nullable(Int8) تخزين قيم من نوع Int8، بينما تُخزَّن NULL في الصفوف التي لا تحتوي على قيمة.
لا يمكن أن يكون T أيًا من أنواع البيانات المركبة التالية:
ومع ذلك، يمكن لأنواع البيانات المركبة أن تتضمن قيمًا من النوع Nullable، مثل Array(Nullable(Int8)) أو Tuple(Nullable(String), Nullable(Int64)).
لا يمكن تضمين حقل من النوع Nullable في فهارس الجدول.
تكون NULL هي القيمة الافتراضية لأي نوع Nullable، ما لم يُحدَّد خلاف ذلك في إعدادات خادم ClickHouse.
ميزات التخزين
لتخزين قيم النوع Nullable في عمود بجدول، يستخدم ClickHouse ملفًا منفصلًا لأقنعة NULL بالإضافة إلى الملف العادي الذي يحتوي على القيم. وتُمكّن البيانات الموجودة في ملف الأقنعة ClickHouse من التمييز بين NULL وdefault value لنوع البيانات المقابل في كل صف من صفوف الجدول. وبسبب هذا الملف الإضافي، يستهلك العمود Nullable مساحة تخزين إضافية مقارنةً بعمود عادي مماثل.
العثور على NULL
يمكن العثور على قيم NULL في عمود باستخدام العمود الفرعي null من دون قراءة العمود بأكمله. ويُرجع 1 إذا كانت القيمة المقابلة هي NULL، و0 في غير ذلك.
مثال
CREATE TABLE nullable (`n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple();
INSERT INTO nullable VALUES (1) (NULL) (2) (NULL);
SELECT n.null FROM nullable;┌─n.null─┐
│ 0 │
│ 1 │
│ 0 │
│ 1 │
└────────┘مثال على الاستخدام
CREATE TABLE t_null(x Int8, y Nullable(Int8)) ENGINE TinyLogINSERT INTO t_null VALUES (1, NULL), (2, 3)SELECT x + y FROM t_null┌─plus(x, y)─┐
│ ᴺᵁᴸᴸ │
│ 5 │
└────────────┘