الانتقال إلى المحتوى الرئيسي
بنية بيانات مُجهَّزة اختيارية لاستخدامها في عمليات JOIN.
في ClickHouse Cloud، إذا كانت خدمتك قد أُنشئت بإصدار أقدم من 25.4، فستحتاج إلى ضبط التوافق على 25.4 على الأقل باستخدام SET compatibility=25.4.

إنشاء جدول

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
) ENGINE = Join(join_strictness, join_type, k1[, k2, ...])
راجع الوصف التفصيلي لاستعلام CREATE TABLE.

معلمات المحرك

join_strictness

join_strictnessدرجة صرامة JOIN.

join_type

join_typeنوع JOIN.

الأعمدة المفتاحية

k1[, k2, ...] – الأعمدة المفتاحية من عبارة USING التي تُجرى بها عملية JOIN. أدخِل المعلَمين join_strictness وjoin_type من دون علامات اقتباس، على سبيل المثال: Join(ANY, LEFT, col1). يجب أن يتطابقا مع عملية JOIN التي سيُستخدم الجدول فيها. إذا لم تتطابق المعلَمات، فلن يُصدر ClickHouse استثناءً وقد يعيد بيانات غير صحيحة.

تفاصيل وتوصيات

تخزين البيانات

توجد بيانات جدول Join دائمًا في RAM. عند إدراج صفوف في جدول، يكتب ClickHouse كتل البيانات إلى الدليل على القرص لكي يمكن استعادتها عند إعادة تشغيل الخادم. إذا أُعيد تشغيل الخادم بصورة غير سليمة، فقد تُفقد كتلة البيانات الموجودة على القرص أو تتلف. في هذه الحالة، قد تحتاج إلى حذف الملف الذي يحتوي على البيانات التالفة يدويًا.

اختيار البيانات وإدراجها

يمكنك استخدام استعلامات INSERT لإضافة البيانات إلى جداول المحرك Join. إذا أُنشئ الجدول بدرجة الصرامة ANY، فسيتم تجاهل البيانات ذات المفاتيح المكررة. أما مع درجة الصرامة ALL، فتُضاف جميع الصفوف. حالات الاستخدام الرئيسية لجداول المحرك Join هي كما يلي:
  • ضع الجدول في الطرف الأيمن ضمن عبارة JOIN.
  • استدعِ الدالة joinGet، التي تتيح لك استخراج البيانات من الجدول بالطريقة نفسها التي تستخرج بها البيانات من القاموس.

حذف البيانات

تُنفَّذ استعلامات ALTER DELETE الخاصة بجداول المحرك Join على شكل عمليات تعديل. وتقرأ عملية التعديل DELETE البيانات المُصفّاة وتُعيد كتابة البيانات في الذاكرة وعلى القرص.

القيود والإعدادات

عند إنشاء جدول، تُطبَّق الإعدادات التالية:

join_use_nulls

join_use_nulls

max_rows_in_join

max_rows_in_join

max_bytes_in_join

max_bytes_in_join

join_overflow_mode

join_overflow_mode

join_any_take_last_row

join_any_take_last_row

join_use_nulls

الاستمرارية

تعطّل الاستمرارية لمحركي الجدول Join وSet. تقلّل من عبء عمليات الإدخال/الإخراج. وهي مناسبة للسيناريوهات التي تركّز على الأداء ولا تتطلب الاستمرارية. القيم الممكنة:
  • 1 — مُمكّن.
  • 0 — معطّل.
القيمة الافتراضية: 1. لا يمكن استخدام الجداول ذات المحرك Join في عمليات GLOBAL JOIN. يسمح المحرك Join بتحديد الإعداد join_use_nulls في عبارة CREATE TABLE. ويجب أن تكون قيمة join_use_nulls في استعلام SELECT هي نفسها.

أمثلة الاستخدام

إنشاء الجدول في الجانب الأيسر:
CREATE TABLE id_val(`id` UInt32, `val` UInt32) ENGINE = TinyLog;
INSERT INTO id_val VALUES (1,11), (2,12), (3,13);
إنشاء جدول Join للجانب الأيمن:
CREATE TABLE id_val_join(`id` UInt32, `val` UInt8) ENGINE = Join(ANY, LEFT, id);
INSERT INTO id_val_join VALUES (1,21), (1,22), (3,23);
ضمّ الجداول:
SELECT * FROM id_val ANY LEFT JOIN id_val_join USING (id);
┌─id─┬─val─┬─id_val_join.val─┐
│  1 │  11 │              21 │
│  2 │  12 │               0 │
│  3 │  13 │              23 │
└────┴─────┴─────────────────┘
بدلًا من ذلك، يمكنك استرجاع البيانات من جدول Join مع تحديد قيمة مفتاح الربط:
SELECT joinGet('id_val_join', 'val', toUInt32(1));
┌─joinGet('id_val_join', 'val', toUInt32(1))─┐
│                                         21 │
└────────────────────────────────────────────┘
حذف صف من جدول Join:
ALTER TABLE id_val_join DELETE WHERE id = 3;
┌─id─┬─val─┐
│  1 │  21 │
└────┴─────┘
آخر تعديل في ٢٩ يونيو ٢٠٢٦