- DETACH PARTITION|PART — ينقل قسمًا أو جزءًا إلى الدليل
detachedويفصله. - DROP PARTITION|PART — يحذف قسمًا أو جزءًا.
- DROP DETACHED PARTITION|PART - يحذف جزءًا أو جميع أجزاء قسم من
detached. - FORGET PARTITION — يحذف البيانات الوصفية لقسم من ZooKeeper إذا كان فارغًا.
- ATTACH PARTITION|PART — يضيف قسمًا أو جزءًا من الدليل
detachedإلى الجدول. - ATTACH PARTITION FROM — ينسخ قسم البيانات من جدول إلى آخر ثم يضيفه.
- REPLACE PARTITION — ينسخ قسم البيانات من جدول إلى آخر ثم يستبدله.
- MOVE PARTITION TO TABLE — ينقل قسم البيانات من جدول إلى آخر.
- CLEAR COLUMN IN PARTITION — يعيد تعيين قيمة عمود محدد في قسم.
- CLEAR INDEX IN PARTITION — يعيد تعيين الفهرس الثانوي المحدد في قسم.
- FREEZE PARTITION — ينشئ نسخة احتياطية لقسم.
- UNFREEZE PARTITION — يزيل نسخة احتياطية لقسم.
- FETCH PARTITION|PART — ينزّل جزءًا أو قسمًا من خادم آخر.
- MOVE PARTITION|PART — ينقل القسم/جزء البيانات إلى قرص أو وحدة تخزين أخرى.
- UPDATE IN PARTITION — يحدّث البيانات داخل القسم وفقًا لشرط.
- DELETE IN PARTITION — يحذف البيانات داخل القسم وفقًا لشرط.
- REWRITE PARTS — يعيد كتابة الأجزاء في الجدول بالكامل (أو في قسم محدد).
DETACH PARTITION|PART
detached. ويتعامل الخادم مع قسم البيانات المفصول كما لو أنه غير موجود. ولن يكون الخادم على علم بهذه البيانات حتى تُجري استعلام ATTACH.
مثال:
detached — حذفها من نظام الملفات أو تركها كما هي.
هذا الاستعلام مُكرَّر — إذ ينقل البيانات إلى الدليل detached على جميع النسخ المتماثلة. لاحظ أنه لا يمكنك تنفيذ هذا الاستعلام إلا على نسخة متماثلة قائدة. لمعرفة ما إذا كانت النسخة المتماثلة قائدة، نفِّذ استعلام SELECT على جدول system.replicas. وبدلًا من ذلك، من الأسهل تنفيذ استعلام DETACH على جميع النسخ المتماثلة — فجميع النسخ المتماثلة ستُطلق استثناءً، باستثناء النسخ المتماثلة القائدة (إذ يُسمح بوجود عدة قادة).
DROP PARTITION|PART
DROP DETACHED PARTITION|PART
detached.
اقرأ المزيد عن كيفية تعيين تعبير القسم في قسم كيفية تعيين تعبير القسم.
FORGET PARTITION
ATTACH PARTITION|PART
detached. ويمكن إضافة بيانات لقسم كامل أو لجزء منفصل. أمثلة:
detached.
إذا وُجدت البيانات، يتحقق الاستعلام من سلامتها. وإذا كان كل شيء صحيحًا، يضيف الاستعلام البيانات إلى الجدول.
إذا عثرت النسخة المتماثلة غير المُبادِرة، التي تستقبل أمر الإرفاق، على الجزء ذي قيم التحقق الصحيحة في مجلد detached الخاص بها، فإنها تُرفق البيانات من دون جلبها من النسخ المتماثلة الأخرى.
إذا لم يوجد جزء ذو قيم تحقق صحيحة، تُنزَّل البيانات من أي نسخة متماثلة تحتوي على هذا الجزء.
يمكنك وضع البيانات في دليل detached على إحدى النسخ المتماثلة واستخدام استعلام ALTER ... ATTACH لإضافتها إلى الجدول على جميع النسخ المتماثلة.
ATTACH PARTITION FROM
table1 إلى table2.
لاحظ ما يلي:
- لن تُحذف البيانات من
table1ولا منtable2. - قد يكون
table1جدولًا مؤقتًا.
- يجب أن يكون للجدولين البنية نفسها.
- يجب أن يكون للجدولين مفتاح التقسيم نفسه، ومفتاح ORDER BY نفسه، والمفتاح الأساسي نفسه.
- يجب أن تكون للجدولين سياسة التخزين نفسها.
- يجب أن يتضمن جدول الوجهة جميع الفهارس والإسقاطات الموجودة في الجدول المصدر. إذا كان الإعداد
enforce_index_structure_match_on_partition_manipulationمُمكّنًا في جدول الوجهة، فيجب أن تكون الفهارس والإسقاطات متطابقة. وإلا، فيمكن أن يشتمل جدول الوجهة على جميع فهارس الجدول المصدر وإسقاطاته، بالإضافة إلى فهارس وإسقاطات أخرى.
REPLACE PARTITION
table1 إلى table2 ويستبدل القسم الموجود في table2. هذه العملية ذرية.
لاحظ ما يلي:
- لن تُحذف البيانات من
table1. - يمكن أن يكون
table1جدولًا مؤقتًا.
- يجب أن تكون للجدولين البنية نفسها.
- يجب أن يكون للجدولين مفتاح التقسيم نفسه، ومفتاح ORDER BY نفسه، والمفتاح الأساسي نفسه.
- يجب أن تكون للجدولين سياسة التخزين نفسها.
- يجب أن يتضمن الجدول الوجهة جميع الفهارس والإسقاطات الموجودة في الجدول المصدر. إذا كان الإعداد
enforce_index_structure_match_on_partition_manipulationمُمكّنًا في الجدول الوجهة، فيجب أن تكون الفهارس والإسقاطات متطابقة. وإلا، يمكن أن يشتمل الجدول الوجهة على مجموعة فائقة من فهارس الجدول المصدر وإسقاطاته.
MOVE PARTITION TO TABLE
table_source إلى table_dest مع حذف البيانات من table_source.
لكي يعمل الاستعلام بنجاح، يجب استيفاء الشروط التالية:
- يجب أن يكون للجدولين البنية نفسها.
- يجب أن يكون للجدولين مفتاح التقسيم نفسه، ومفتاح ORDER BY نفسه، والمفتاح الأساسي نفسه.
- يجب أن تكون للجدولين سياسة التخزين نفسها.
- يجب أن ينتمي الجدولان إلى الفئة نفسها من المحرك (replicated أو non-replicated).
- يجب أن يتضمن جدول الوجهة جميع الفهارس والإسقاطات الموجودة في جدول المصدر. إذا كان الإعداد
enforce_index_structure_match_on_partition_manipulationمُمكّنًا في جدول الوجهة، فيجب أن تكون الفهارس والإسقاطات متطابقة تمامًا. وإلا، يمكن أن يضم جدول الوجهة مجموعةً أشمل من فهارس جدول المصدر وإسقاطاته.
CLEAR COLUMN IN PARTITION
DEFAULT محددًا عند إنشاء جدول، فإن هذا الاستعلام يعيّن قيمة العمود إلى القيمة الافتراضية المحددة.
مثال:
FREEZE PARTITION
PARTITION، ينشئ الاستعلام نسخة احتياطية لجميع الأقسام دفعة واحدة.
تُنفَّذ عملية النسخ الاحتياطي بالكامل من دون إيقاف الخادم.
2019) — وعندئذٍ ينشئ الاستعلام نسخة احتياطية لجميع الأقسام المطابقة. اقرأ عن تعيين تعبير القسم في قسم كيفية تعيين تعبير القسم.
عند التنفيذ، ولإنشاء لقطة بيانات، ينشئ الاستعلام روابط صلبة لبيانات الجدول. وتوضع هذه الروابط الصلبة في الدليل /var/lib/clickhouse/shadow/N/...، حيث:
- يمثّل
/var/lib/clickhouse/دليل العمل الخاص بـ ClickHouse والمحدَّد في ملف config. - يمثّل
Nالرقم التزايدي للنسخة الاحتياطية. - إذا جرى تحديد المعلَمة
WITH NAME، فتُستخدم قيمة المعلَمة'backup_name'بدلًا من الرقم التزايدي.
إذا كنت تستخدم مجموعة من الأقراص لتخزين البيانات في جدول، فسيظهر الدليل
shadow/N على كل قرص، مع تخزين أجزاء البيانات التي طابقتها عبارة PARTITION./var/lib/clickhouse/. وينفّذ الاستعلام chmod على جميع الملفات، بما يمنع الكتابة إليها.
بعد إنشاء النسخة الاحتياطية، يمكنك نسخ البيانات من /var/lib/clickhouse/shadow/ إلى الخادم البعيد ثم حذفها من الخادم المحلي. لاحظ أن الاستعلام ALTER t FREEZE PARTITION لا يُكرَّر. فهو ينشئ نسخة احتياطية محلية على الخادم المحلي فقط.
ينشئ الاستعلام النسخة الاحتياطية على الفور تقريبًا (لكنه ينتظر أولًا حتى تنتهي الاستعلامات الحالية على الجدول المعني من التنفيذ).
ينسخ ALTER TABLE t FREEZE PARTITION البيانات فقط، وليس بيانات وصفي الجدول. ولإنشاء نسخة احتياطية من بيانات وصفي الجدول، انسخ الملف /var/lib/clickhouse/metadata/database/table.sql
لاستعادة البيانات من نسخة احتياطية، اتبع ما يلي:
- أنشئ الجدول إذا لم يكن موجودًا. لعرض الاستعلام، استخدم ملف .sql (واستبدل
ATTACHفيه بـCREATE). - انسخ البيانات من الدليل
data/database/table/داخل النسخة الاحتياطية إلى الدليل/var/lib/clickhouse/data/database/table/detached/. - شغّل استعلامات
ALTER TABLE t ATTACH PARTITIONلإضافة البيانات إلى جدول.
max_threads.
لمزيد من المعلومات حول النسخ الاحتياطي واستعادة البيانات، راجع قسم “النسخ الاحتياطي والاستعادة في ClickHouse”.
UNFREEZE PARTITION
frozen ذات الاسم المحدد من القرص. وإذا حُذفت عبارة PARTITION، يزيل الاستعلام النسخة الاحتياطية لجميع الأقسام دفعةً واحدة.
CLEAR INDEX IN PARTITION
CLEAR COLUMN، لكنه يعيد تعيين فهرس بدلًا من بيانات عمود.
FETCH PARTITION|PART
- ينزّل القسم|الجزء من الشظية المحددة. في ‘path-in-zookeeper’ يجب تحديد مسار إلى الشظية في ZooKeeper.
- ثم يضع الاستعلام البيانات التي تم تنزيلها في الدليل
detachedللجدولtable_name. استخدم الاستعلام ATTACH PARTITION|PART لإضافة البيانات إلى الجدول.
- FETCH PARTITION
- FETCH PART
- إن الاستعلام
ALTER ... FETCH PARTITION|PARTلا يُكرَّر عبر النسخ المتماثلة. فهو يضع الجزء أو القسم في الدليلdetachedعلى الخادم المحلي فقط. - إن الاستعلام
ALTER TABLE ... ATTACHيُكرَّر عبر النسخ المتماثلة. فهو يضيف البيانات إلى جميع النسخ المتماثلة. وتُضاف البيانات إلى إحدى النسخ المتماثلة من الدليلdetached، وإلى النسخ الأخرى من النسخ المتماثلة المجاورة.
ALTER TABLE، فإنه لا يغيّر بنية الجدول ولا يغيّر فورًا البيانات المتاحة في الجدول.
MOVE PARTITION|PART
MergeTree. راجع استخدام عدة أجهزة تخزين كتلية لتخزين البيانات.
ALTER TABLE t MOVE:
- غير مكرّر، لأن النسخ المتماثلة المختلفة قد تكون لها سياسات تخزين مختلفة.
- يُرجع خطأً إذا لم يكن القرص أو وحدة التخزين المحددة مُهيّأة. ويُرجع الاستعلام أيضًا خطأً إذا تعذّر تطبيق شروط نقل البيانات المحددة في سياسة التخزين.
- قد يُرجع خطأً إذا كانت البيانات المطلوب نقلها قد نُقلت بالفعل بواسطة عملية في الخلفية، أو بواسطة استعلام
ALTER TABLE t MOVEآخر متزامن، أو نتيجة دمج البيانات في الخلفية. ولا ينبغي للمستخدم اتخاذ أي إجراءات إضافية في هذه الحالة.
UPDATE IN PARTITION
مثال
انظر أيضًا
DELETE IN PARTITION
مثال
REWRITE PARTS
use_const_adaptive_granularity لا تُطبَّق افتراضيًا إلا على الأجزاء التي أُعيدت كتابتها حديثًا.
مثال
راجع أيضًا
كيفية تحديد تعبير التقسيم
ALTER ... PARTITION بطرق مختلفة:
- كقيمة من العمود
partitionفي جدولsystem.parts. على سبيل المثال:ALTER TABLE visits DETACH PARTITION 201901. - باستخدام keyword
ALL. ولا يمكن استخدامه إلا مع DROP/DETACH/ATTACH/ATTACH FROM. على سبيل المثال:ALTER TABLE visits ATTACH PARTITION ALL. - كـ Tuple من expressions أو الثوابت يطابق (من حيث الأنواع) Tuple الخاص بـ partitioning key للجدول. وفي حالة partitioning key المكوَّن من عنصر واحد، يجب تضمين تعبير التقسيم داخل الدالة
tuple (...). على سبيل المثال:ALTER TABLE visits DETACH PARTITION tuple(toYYYYMM(toDate('2019-01-25'))). - باستخدام partition ID. وهو معرّف String للقسم (human-readable إن أمكن) يُستخدم كاسم للأقسام في نظام الملفات وفي ZooKeeper. ويجب تحديد partition ID في clause
PARTITION IDبين single quotes. على سبيل المثال:ALTER TABLE visits DETACH PARTITION ID '201901'. - في استعلامَي ALTER ATTACH PART وDROP DETACHED PART، لتحديد اسم part، استخدم string literal بقيمة من العمود
nameفي جدول system.detached_parts. على سبيل المثال:ALTER TABLE visits ATTACH PART '201901_1_1_0'.
String، يجب تحديده بين علامتَي اقتباس ('). أما النوعان Date وInt* فلا يحتاجان إلى علامات اقتباس.
تنطبق جميع القواعد المذكورة أعلاه أيضًا على استعلام OPTIMIZE. وإذا كنت بحاجة إلى تحديد القسم الوحيد عند تحسين جدول غير مُقسَّم، فاضبط expression PARTITION tuple(). على سبيل المثال:
IN PARTITION القسم الذي تُطبَّق عليه تعبيرات UPDATE أو DELETE نتيجةً لاستعلام ALTER TABLE. ولا تُنشأ أجزاء جديدة إلا من القسم المحدَّد. وبهذه الطريقة، يساعد IN PARTITION على تقليل الحمل عندما يكون الجدول مُقسَّمًا إلى عدد كبير من الأقسام، ولا تحتاج إلا إلى تحديث البيانات بشكل موضعي.
تُعرَض أمثلة على استعلامات ALTER ... PARTITION في الاختبارين 00502_custom_partitioning_local و00502_custom_partitioning_replicated_zookeeper.