الانتقال إلى المحتوى الرئيسي
تُعدِّل معظم استعلامات ALTER TABLE إعدادات الجدول أو بياناته:
لا تُدعَم معظم استعلامات ALTER TABLE إلا في جداول *MergeTree وMerge وDistributed.
تتعامل عبارات ALTER التالية مع طرق العرض:
StatementDescription
ALTER TABLE … MODIFY QUERYتُعدِّل بنية العرض المادي.
تُعدِّل عبارات ALTER التالية الكيانات المرتبطة بالتحكم بالوصول المستند إلى الأدوار:
StatementDescription
ALTER TABLE … MODIFY COMMENTيضيف تعليقات إلى الجدول أو يعدّلها أو يزيلها، سواء كانت مُعيَّنة مسبقًا أم لا.
ALTER NAMED COLLECTIONيُعدِّل المجموعات المسماة.

عمليات التعديل

تُنفَّذ استعلامات ALTER التي تهدف إلى تعديل بيانات الجدول بآلية تُسمى “عمليات التعديل”، وأبرزها ALTER TABLE … DELETE وALTER TABLE … UPDATE. وهي عمليات غير متزامنة تُنفَّذ في الخلفية، وتشبه عمليات الدمج في جداول MergeTree، إذ تُنتج إصدارات جديدة “معدَّلة” من الأجزاء. بالنسبة إلى جداول *MergeTree، تُنفَّذ عمليات التعديل عبر إعادة كتابة أجزاء البيانات بالكامل. ولا توجد خاصية atomicity — إذ تُستبدل الأجزاء بأجزاء معدَّلة فور جهوزيتها، وسيعرض استعلام SELECT الذي يبدأ تنفيذه أثناء عملية التعديل بيانات من أجزاء عُدِّلت بالفعل إلى جانب بيانات من أجزاء لم تُعدَّل بعد. تُرتَّب عمليات التعديل ترتيبًا كليًا بحسب ترتيب إنشائها، وتُطبَّق على كل جزء وفق هذا الترتيب. كما توجد علاقة ترتيب جزئي بينها وبين استعلامات INSERT INTO: فالبيانات التي أُدرجت في الجدول قبل إرسال عملية التعديل ستُعدَّل، أما البيانات التي أُدرجت بعد ذلك فلن تُعدَّل. لاحظ أن عمليات التعديل لا تحظر عمليات الإدراج بأي شكل. يعيد استعلام التعديل النتيجة فور إضافة إدخال عملية التعديل (في حالة الجداول المُكرَّرة إلى ZooKeeper، وفي حالة الجداول غير المُكرَّرة إلى نظام الملفات). وتُنفَّذ عملية التعديل نفسها بشكل غير متزامن باستخدام إعدادات profile الخاصة بالنظام. ولمتابعة تقدّم عمليات التعديل، يمكنك استخدام جدول system.mutations. وستستمر عملية التعديل التي أُرسلت بنجاح في التنفيذ حتى لو أُعيد تشغيل خوادم ClickHouse. ولا توجد طريقة للتراجع عن عملية التعديل بعد إرسالها، ولكن إذا توقفت لسبب ما، فيمكن إلغاؤها باستخدام استعلام KILL MUTATION. لا تُحذف إدخالات عمليات التعديل المكتملة فورًا (ويُحدَّد عدد الإدخالات المحفوظة بواسطة المَعلمة finished_mutations_to_keep الخاصة بمحرك التخزين). وتُحذف إدخالات عمليات التعديل الأقدم.

تزامن استعلامات ALTER

بالنسبة إلى الجداول غير المكررة، تُنفَّذ جميع استعلامات ALTER بشكل متزامن. أما بالنسبة إلى الجداول المكررة، فلا يضيف الاستعلام سوى تعليمات بالإجراءات المناسبة إلى ZooKeeper، بينما تُنفَّذ هذه الإجراءات نفسها في أقرب وقت ممكن. ومع ذلك، يمكن أن ينتظر الاستعلام حتى تكتمل هذه الإجراءات على جميع النسخ المتماثلة. بالنسبة إلى استعلامات ALTER التي تُنشئ عمليات التعديل (مثل UPDATE وDELETE وMATERIALIZE INDEX وMATERIALIZE PROJECTION وMATERIALIZE COLUMN وAPPLY DELETED MASK وAPPLY PATCHES وCLEAR STATISTIC وMATERIALIZE STATISTIC، على سبيل المثال لا الحصر)، فإن التزامن يحدده الإعداد mutations_sync. أما استعلامات ALTER الأخرى التي لا تعدّل سوى البيانات الوصفية، فيمكنك استخدام الإعداد alter_sync لضبط الانتظار. يمكنك تحديد مدة الانتظار (بالثواني) حتى تنفّذ النسخ المتماثلة غير النشطة جميع استعلامات ALTER باستخدام الإعداد replication_wait_for_inactive_replica_timeout.
بالنسبة إلى جميع استعلامات ALTER، إذا كانت قيمة alter_sync = 2 وكانت بعض النسخ المتماثلة غير نشطة لمدة تتجاوز الوقت المحدد في الإعداد replication_wait_for_inactive_replica_timeout، فسيتم طرح الاستثناء UNFINISHED.
آخر تعديل في ٢٥ يونيو ٢٠٢٦