الانتقال إلى المحتوى الرئيسي

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

يدعم ClickHouse معظم تنسيقات البيانات النصية والثنائية المعروفة. ويتيح ذلك دمجه بسهولة في أي خط أنابيب بيانات تقريبًا للاستفادة من مزايا ClickHouse.

تنسيقات الإدخال

تُستخدم تنسيقات الإدخال في:
  • تحليل البيانات المُمرَّرة إلى عبارات INSERT
  • تنفيذ استعلامات SELECT من الجداول المستندة إلى ملفات، مثل File أو URL أو HDFS
  • قراءة Dictionaries
يُعد اختيار تنسيق الإدخال المناسب أمرًا بالغ الأهمية لتحقيق كفاءة إدخال البيانات في ClickHouse. ومع توفر أكثر من 70 تنسيقًا مدعومًا، فإن اختيار الخيار الأفضل أداءً يمكن أن يؤثر بشكل كبير في سرعة الإدراج، واستخدام CPU والذاكرة، والكفاءة العامة للنظام. ولمساعدتك على المفاضلة بين هذه الخيارات، أجرينا مقارنة معيارية لأداء إدخال البيانات عبر التنسيقات المختلفة، وكشفت عن أبرز النتائج التالية:
  • يُعد تنسيق Native أكثر تنسيقات الإدخال كفاءة، إذ يوفّر أفضل ضغط، وأقل استهلاك للموارد، وأدنى حمل إضافي للمعالجة على جانب الخادم.
  • الضغط ضروري - إذ يقلل LZ4 حجم البيانات بأقل تكلفة ممكنة على CPU، بينما يوفّر ZSTD ضغطًا أعلى على حساب زيادة إضافية في استخدام CPU.
  • للترتيب المسبق تأثير متوسط، لأن ClickHouse يرتّب البيانات بكفاءة بالفعل.
  • يُحسّن التجميع الكفاءة بشكل كبير - فكلما كانت الدُفعات أكبر، انخفض الحمل الإضافي للإدراج وتحسّن معدل النقل.
للاطلاع بتعمق على النتائج وأفضل الممارسات، اقرأ تحليل المقارنة المعيارية الكامل. وللاطلاع على نتائج الاختبار كاملةً، استكشف لوحة FastFormats عبر الإنترنت.

تنسيقات الإخراج

تُستخدم تنسيقات الإخراج المدعومة من أجل:
  • تنسيق نتائج استعلام SELECT
  • تنفيذ عمليات INSERT في الجداول المعتمدة على الملفات

نظرة عامة على التنسيقات

التنسيقات المدعومة هي:
التنسيقالإدخالالإخراج
TabSeparated
TabSeparatedRaw
TabSeparatedWithNames
TabSeparatedWithNamesAndTypes
TabSeparatedRawWithNames
TabSeparatedRawWithNamesAndTypes
Template
TemplateIgnoreSpaces
CSV
CSVWithNames
CSVWithNamesAndTypes
CustomSeparated
CustomSeparatedWithNames
CustomSeparatedWithNamesAndTypes
SQLInsert
Values
Vertical
JSON
JSONAsString
JSONAsObject
JSONStrings
JSONColumns
JSONColumnsWithMetadata
JSONCompact
JSONCompactStrings
JSONCompactColumns
JSONEachRow
PrettyJSONEachRow
JSONEachRowWithProgress
JSONStringsEachRow
JSONStringsEachRowWithProgress
JSONCompactEachRow
JSONCompactEachRowWithNames
JSONCompactEachRowWithNamesAndTypes
JSONCompactEachRowWithProgress
JSONCompactStringsEachRow
JSONCompactStringsEachRowWithNames
JSONCompactStringsEachRowWithNamesAndTypes
JSONCompactStringsEachRowWithProgress
JSONObjectEachRow
BSONEachRow
TSKV
Pretty
PrettyNoEscapes
PrettyMonoBlock
PrettyNoEscapesMonoBlock
PrettyCompact
PrettyCompactNoEscapes
PrettyCompactMonoBlock
PrettyCompactNoEscapesMonoBlock
PrettySpace
PrettySpaceNoEscapes
PrettySpaceMonoBlock
PrettySpaceNoEscapesMonoBlock
Prometheus
Protobuf
ProtobufSingle
ProtobufList
Avro
AvroConfluent
Parquet
ParquetMetadata
Arrow
ArrowStream
ORC
One
Npy
RowBinary
RowBinaryWithNames
RowBinaryWithNamesAndTypes
RowBinaryWithDefaults
RowBinaryWithNamesAndTypesAndDefaults
Native
Buffers
Null
Hash
XML
CapnProto
LineAsString
LineAsStringWithNames
LineAsStringWithNamesAndTypes
Regexp
RawBLOB
MsgPack
MySQLDump
GeoJSON
DWARF
Markdown
Form
يمكنك التحكّم في بعض معلمات معالجة التنسيق باستخدام إعدادات ClickHouse. لمزيد من المعلومات، راجع قسم الإعدادات.

مخطط التنسيق

يُحدَّد اسم الملف الذي يحتوي على مخطط التنسيق بواسطة الإعداد 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 الفاصل بعد العمود الأخير والفاصل بين الصفوف لتحديد بداية الصف التالي، لذا لا يعمل تخطي الأخطاء إلا إذا كان أحدهما على الأقل غير فارغ.
آخر تعديل في ٢٥ يونيو ٢٠٢٦