الانتقال إلى المحتوى الرئيسي
يسمح بتخزين وسم خاص (NULL) يشير إلى “قيمة مفقودة” إلى جانب القيم العادية التي يسمح بها T. على سبيل المثال، يمكن لعمود من النوع Nullable(Int8) تخزين قيم من نوع Int8، بينما تُخزَّن NULL في الصفوف التي لا تحتوي على قيمة. لا يمكن أن يكون T أيًا من أنواع البيانات المركبة التالية:
  • Array — غير مدعوم
  • Map — غير مدعوم
  • Tuple — يتوفر دعم تجريبي*
ومع ذلك، يمكن لأنواع البيانات المركبة أن تتضمن قيمًا من النوع Nullable، مثل Array(Nullable(Int8)) أو Tuple(Nullable(String), Nullable(Int64)).
بيتا: Nullable Tuples
لا يمكن تضمين حقل من النوع Nullable في فهارس الجدول. تكون NULL هي القيمة الافتراضية لأي نوع Nullable، ما لم يُحدَّد خلاف ذلك في إعدادات خادم ClickHouse.

ميزات التخزين

لتخزين قيم النوع Nullable في عمود بجدول، يستخدم ClickHouse ملفًا منفصلًا لأقنعة NULL بالإضافة إلى الملف العادي الذي يحتوي على القيم. وتُمكّن البيانات الموجودة في ملف الأقنعة ClickHouse من التمييز بين NULL وdefault value لنوع البيانات المقابل في كل صف من صفوف الجدول. وبسبب هذا الملف الإضافي، يستهلك العمود Nullable مساحة تخزين إضافية مقارنةً بعمود عادي مماثل.
يؤثر استخدام Nullable سلبًا في الأداء في الغالب، لذا ضع ذلك في الحسبان عند تصميم قواعد البيانات لديك.

العثور على NULL

يمكن العثور على قيم NULL في عمود باستخدام العمود الفرعي null من دون قراءة العمود بأكمله. ويُرجع 1 إذا كانت القيمة المقابلة هي NULL، و0 في غير ذلك. مثال
Query
CREATE TABLE nullable (`n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple();

INSERT INTO nullable VALUES (1) (NULL) (2) (NULL);

SELECT n.null FROM nullable;
Response
┌─n.null─┐
│      0 │
│      1 │
│      0 │
│      1 │
└────────┘

مثال على الاستخدام

CREATE TABLE t_null(x Int8, y Nullable(Int8)) ENGINE TinyLog
INSERT INTO t_null VALUES (1, NULL), (2, 3)
SELECT x + y FROM t_null
┌─plus(x, y)─┐
│       ᴺᵁᴸᴸ │
│          5 │
└────────────┘
آخر تعديل في ٢٩ يونيو ٢٠٢٦