تنسيقات بيانات الإدخال والإخراج
تنسيقات الإدخال
- تحليل البيانات المُمرَّرة إلى عبارات
INSERT - تنفيذ استعلامات
SELECTمن الجداول المستندة إلى ملفات، مثلFileأوURLأوHDFS - قراءة Dictionaries
- يُعد تنسيق Native أكثر تنسيقات الإدخال كفاءة، إذ يوفّر أفضل ضغط، وأقل استهلاك للموارد، وأدنى حمل إضافي للمعالجة على جانب الخادم.
- الضغط ضروري - إذ يقلل LZ4 حجم البيانات بأقل تكلفة ممكنة على CPU، بينما يوفّر ZSTD ضغطًا أعلى على حساب زيادة إضافية في استخدام CPU.
- للترتيب المسبق تأثير متوسط، لأن ClickHouse يرتّب البيانات بكفاءة بالفعل.
- يُحسّن التجميع الكفاءة بشكل كبير - فكلما كانت الدُفعات أكبر، انخفض الحمل الإضافي للإدراج وتحسّن معدل النقل.
تنسيقات الإخراج
- تنسيق نتائج استعلام
SELECT - تنفيذ عمليات
INSERTفي الجداول المعتمدة على الملفات
نظرة عامة على التنسيقات
مخطط التنسيق
format_schema.
ويجب تعيين هذا الإعداد عند استخدام أحد التنسيقين Cap'n Proto وProtobuf.
مخطط التنسيق هو عبارة عن اسم ملف متبوعًا باسم نوع الرسالة داخل هذا الملف، ويفصل بينهما نقطتان،
على سبيل المثال schemafile.proto:MessageType.
إذا كان الملف يحمل الامتداد القياسي للتنسيق (مثل .proto بالنسبة إلى Protobuf)،
فيمكن حذفه، وفي هذه الحالة يكون مخطط التنسيق بالشكل schemafile:MessageType.
إذا كنت تُدخل البيانات أو تُخرجها عبر العميل في الوضع التفاعلي، فإن اسم الملف المحدد في مخطط التنسيق
يمكن أن يتضمن مسارًا مطلقًا أو مسارًا نسبيًا إلى الدليل الحالي على العميل.
أما إذا كنت تستخدم العميل في وضع الدفعات، فيجب أن يكون مسار المخطط نسبيًا لأسباب أمنية.
إذا كنت تُدخل البيانات أو تُخرجها عبر واجهة HTTP، فإن اسم الملف المحدد في مخطط التنسيق
يجب أن يكون موجودًا في الدليل المحدد في format_schema_path
ضمن إعدادات الخادم.
تخطي الأخطاء
CSV وTabSeparated وTSKV وJSONEachRow وTemplate وCustomSeparated وProtobuf تخطي صف تالف عند حدوث خطأ في التحليل، ومواصلة التحليل من بداية الصف التالي. راجع إعدادَي input_format_allow_errors_num و
input_format_allow_errors_ratio.
القيود:
- عند حدوث خطأ في التحليل، يتخطى
JSONEachRowجميع البيانات حتى نهاية السطر (أو EOF)، لذا يجب أن تكون الصفوف مفصولة بـ\nلكي يُحتسب عدد الأخطاء بشكل صحيح. - يستخدم
TemplateوCustomSeparatedالفاصل بعد العمود الأخير والفاصل بين الصفوف لتحديد بداية الصف التالي، لذا لا يعمل تخطي الأخطاء إلا إذا كان أحدهما على الأقل غير فارغ.