الوصف
Protobuf هو تنسيق Protocol Buffers.
يتطلب هذا التنسيق مخطط تنسيق خارجيًا، ويُخزَّن مؤقتًا بين الاستعلامات.
يدعم ClickHouse ما يلي:
- صياغتي
proto2وproto3. - الحقول
Repeated/optional/required.
_ (الشرطة السفلية) و. (النقطة) على أنهما متساويان.
إذا اختلف نوع العمود عن نوع الحقل في رسالة Protocol Buffers، فسيُطبَّق التحويل اللازم.
الرسائل المتداخلة مدعومة. على سبيل المثال، بالنسبة إلى الحقل z في نوع الرسالة التالي:
x.y.z (أو x_y_z أو X.y_Z وما إلى ذلك).
تُعد الرسائل المتداخلة مناسبة للإدخال إلى بُنى البيانات المتداخلة أو للإخراج منها.
لا تُطبَّق القيم الافتراضية المعرَّفة في مخطط Protobuf مثل المخطط الوارد أدناه، بل تُستخدم القيم الافتراضية للجدول بدلًا منها:
input_format_protobuf_oneof_presence مضبوطًا، فإن ClickHouse يملأ العمود الذي يحدّد أيّ حقل ضمن oneof تم العثور عليه.
oneof.
الرسائل المتداخلة مدعومة (انظر basic-examples). كما أن الرسائل الفارغة مدعومة أيضًا.
الأنواع المسموح بها هي Int8 وUInt8 وInt16 وUInt16 وInt32 وUInt32 وInt64 وUInt64 وEnum وEnum8 أو Enum16.
يجب أن يحتوي Enum (وكذلك Enum8 أو Enum16) على جميع الوسوم المحتملة لـ oneof’، بالإضافة إلى 0 للإشارة إلى الغياب، ولا تهم التمثيلات النصية.
يكون الإعداد input_format_protobuf_oneof_presence معطّلًا افتراضيًا
يستقبل ClickHouse رسائل protobuf ويُخرجها بتنسيق length-delimited.
وهذا يعني أنه يجب كتابة طول كل رسالة قبلها على هيئة عدد صحيح بعرض متغير (varint).
مثال للاستخدام
قراءة البيانات وكتابتها
ملفات Exampleالملفات المستخدمة في هذا المثال متاحة في مستودع الأمثلة
protobuf_message.bin إلى ClickHouse جدول. ثم سنكتبها
مجددًا إلى ملف باسم protobuf_message_from_clickhouse.bin باستخدام format Protobuf.
بالنظر إلى الملف schemafile.proto:
إنشاء الملف الثنائي
إنشاء الملف الثنائي
إذا كنت تعرف بالفعل كيفية تسلسل البيانات وفك تسلسلها بتنسيق الآن، أنشئ ملف بايثون جديدًا باسم الآن شغّل السكربت من سطر الأوامر. يُوصى بتشغيله من
بيئة بايثون افتراضية، على سبيل المثال باستخدام ستحتاج إلى تثبيت مكتبات بايثون التالية:شغّل السكربت لإنشاء الملف الثنائي:
Protobuf، فيمكنك تخطي هذه الخطوة.سنستخدم بايثون لتسلسل بعض البيانات إلى protobuf_message.bin ثم قراءتها في ClickHouse.
إذا كنت تريد استخدام لغة أخرى، فراجع أيضًا: “كيفية قراءة/كتابة رسائل Protobuf المحددة بالطول في اللغات الشائعة”.شغّل الأمر التالي لإنشاء ملف بايثون باسم schemafile_pb2.py في
الدليل نفسه الذي يحتوي على schemafile.proto. يحتوي هذا الملف على فئات بايثون
التي تمثل رسالة UserData من نوع Protobuf:generate_protobuf_data.py، في الدليل
نفسه الذي يحتوي على schemafile_pb2.py. الصق فيه الشيفرة التالية:uv:Protobuf:
protobuf_message_from_clickhouse.bin.
قراءة البيانات وكتابتها باستخدام ClickHouse Cloud
format_protobuf_schema
لتحديد المخطَّط داخل الاستعلام. في هذا المثال، نوضّح كيفية قراءة البيانات المُسلسلة من جهازك المحلي
وإدراجها في جدول في ClickHouse Cloud.
كما في المثال السابق، أنشئ الجدول وفقًا لمخطط Protobuf الخاص بك في ClickHouse Cloud:
format_schema_source مصدر الإعداد format_schema
القيم المحتملة:
- ‘file’ (الافتراضي): غير مدعوم في Cloud
- ‘string’: يكون
format_schemaهو المحتوى الحرفي للمخطط. - ‘query’: يكون
format_schemaاستعلامًا لاسترجاع المخطط.
format_schema_source='string'
format_schema_source='query'
استخدام المخطط المُنشأ تلقائيًا
format_protobuf_use_autogenerated_schema.
على سبيل المثال:
structureToProtobufSchema. ثم سيستخدم هذا المخطط لتسلسل البيانات بتنسيق Protobuf.
يمكنك أيضًا قراءة ملف Protobuf باستخدام المخطط المُنشأ تلقائيًا. في هذه الحالة، يجب أن يكون الملف قد أُنشئ باستخدام المخطط نفسه:
format_protobuf_use_autogenerated_schema مفعّلًا افتراضيًا، ويُطبَّق إذا لم يتم تعيين format_schema.
يمكنك أيضًا حفظ المخطط المُنشأ تلقائيًا في الملف أثناء الإدخال/الإخراج باستخدام الإعداد output_format_schema. على سبيل المثال:
path/to/schema/schema.capnp.
حذف ذاكرة التخزين المؤقت لـ Protobuf
format_schema_path، استخدم تعليمة SYSTEM DROP ... FORMAT CACHE.