Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

دعم نقل تغييرات المخطط

يمكن لـ ClickPipes for MySQL اكتشاف تغييرات المخطط في الجداول المصدر، وفي بعض الحالات، نقل هذه التغييرات تلقائيًا إلى الجداول الوجهة. آلية التعامل مع كل عملية DDL موثقة أدناه:

نوع تغيير المخطط السلوك
إضافة عمود جديد (ALTER TABLE ADD COLUMN ...) يتم نقلها تلقائيًا. ستتم تعبئة الأعمدة الجديدة لجميع الصفوف التي جرى نسخها بعد تغيير المخطط
إضافة عمود جديد بقيمة افتراضية (ALTER TABLE ADD COLUMN ... DEFAULT ...) يتم نقلها تلقائيًا. تُضاف أيضًا القيم الافتراضية المدعومة إلى عمود ClickHouse، لذا تنطبق على الصفوف الموجودة بالفعل في ClickHouse وكذلك الصفوف التي جرى نسخها بعد تغيير المخطط.
حذف عمود موجود (ALTER TABLE DROP COLUMN ...) يُكتشف، ولكن لا يتم نقلها. ستُملأ الأعمدة المحذوفة بالقيمة NULL لجميع الصفوف التي جرى نسخها بعد تغيير المخطط

القيم الافتراضية للأعمدة المضافة

بالنسبة إلى العمود المضاف، ينقل ClickPipes القيمة الافتراضية فقط عندما يتمكن من تحويلها بأمان إلى ClickHouse. وعند نقل قيمة افتراضية، يستخدمها ClickHouse عند قراءة أجزاء البيانات الأسبق من العمود الجديد. ونتيجةً لذلك، تحصل الصفوف الموجودة مسبقًا في ClickHouse على القيمة الافتراضية للمصدر دون إعادة تحديث الجدول بالكامل.

ينقل ClickPipes القيم الحرفية للأعداد الصحيحة والعشرية وذات الفاصلة العائمة، والقيم المنطقية، وقيم السلاسل النصية والتواريخ البسيطة، وقيم enum أو set عندما يوفر خادم MySQL البيانات الوصفية الكاملة للصفوف في binlog. ويعيد كتابة القيم الحرفية للسلاسل النصية باستخدام اقتباس متوافق مع ClickHouse.

يتعمد ClickPipes استبعاد القيم الافتراضية التي ليست قيمًا حرفية قابلة للنقل، بما في ذلك NULL، والقيم الحرفية للبتات، واستدعاءات الدوال مثل CURRENT_TIMESTAMP وNOW() وUUID()، وقيم السلاسل النصية التي تحتوي على شرطات مائلة عكسية أو محارف تحكم. يُضاف العمود مع ذلك، لكن ClickHouse يستخدم القيمة الافتراضية المعتادة لنوع البيانات في الأجزاء الأسبق من العمود. يلزم إجراء تحديث كامل للجدول إذا كان ينبغي أن تحتوي تلك الصفوف الموجودة على القيمة الافتراضية للمصدر.

ينقل ClickPipes القيم الافتراضية فقط ضمن ALTER TABLE ADD COLUMN. ولا ينقل إلى ClickHouse العمليات اللاحقة التي تغيّر القيمة الافتراضية للعمود أو تزيلها.

قيود MySQL 5.x

إصدارات MySQL الأقدم من 8.0.1 لا تتضمن بيانات وصفية كاملة للأعمدة في binlog (binlog_row_metadata=FULL)، لذا تتعقّب ClickPipes الأعمدة بحسب ترتيبها. وهذا يعني ما يلي:

  • إضافة عمود في النهاية (ALTER TABLE ADD COLUMN ...) مدعومة.
  • أي DDL يغيّر ترتيب الأعمدة سيؤدي إلى ظهور خطأ في المسار، لأنه لن يعود بالإمكان بعد ذلك مطابقة المواضع الترتيبية بشكل موثوق. ويشمل ذلك:
    • ALTER TABLE DROP COLUMN ...
    • ALTER TABLE ADD COLUMN ... AFTER ... / FIRST
    • ALTER TABLE MODIFY COLUMN ... AFTER ... / FIRST
    • ALTER TABLE CHANGE COLUMN ... AFTER ... / FIRST

إذا واجهت هذا الخطأ، فستحتاج إلى إعادة مزامنة المسار.

Navigation