الانتقال إلى المحتوى الرئيسي
الإدخالالإخراجالاسم البديل

الوصف

يشبه تنسيق RowBinaryWithNamesAndTypes، ولكن مع بايت إضافي قبل كل خلية يحدّد ما إذا كان ينبغي استخدام القيمة DEFAULT الخاصة بالعمود — تمامًا كما في تنسيق RowBinaryWithDefaults. يدعم هذا الدمج عمليات INSERT القابلة للتكيّف مع تغيّر المخطط: إذ يمكن للكاتب حذف أعمدة من الترويسة (فتأخذ القيمة DEFAULT الخاصة بالعمود الهدف)، وبالنسبة إلى أي عمود يرسله، يمكنه تعليم خلايا منفردة على أنها “استخدم القيمة DEFAULT الخاصة بالعمود” من دون الخلط بين ذلك وبين NULL. هذا التنسيق مخصّص للإدخال فقط.

التنسيق السلكي

الترويسة مطابقة لـ RowBinaryWithNamesAndTypes:
  1. قيمة VarUInt تتضمن عدد الأعمدة N.
  2. N من قيم String المسبوقة بالطول، وتحتوي على أسماء الأعمدة.
  3. N من أنواع الأعمدة — إما أسماء نصية أو ترميزًا ثنائيًا مضغوطًا، وذلك وفقًا لإعدادات output_format_binary_encode_types_in_binary_format / input_format_binary_decode_types_in_binary_format.
بعد الترويسة، يتكوّن كل صف من N خلية. ولكل خلية:
  • بايت وسم واحد من نوع UInt8.
    • 0x01 — استخدم التعبير DEFAULT الخاص بالعمود الهدف. ولا تتبعه أي بايتات للقيمة.
    • 0x00 — تتبعه قيمة، وتُسلسَل باستخدام مُسلسِل RowBinary الخاص بنوع العمود. بالنسبة إلى Nullable(T)، تبدأ بايتات القيمة ببايت NULL الخاص بـ Nullable (0 للقيم غير NULL، و1 لـ NULL)، ثم القيمة الداخلية إذا لم تكن NULL.

القيم الافتراضية مقابل NULL

مؤشر القيمة الافتراضية لكل خلية وبايت null المضمّن في Nullable مستقلان عن بعضهما. ويمكن إرسال عمود Nullable(UInt32) DEFAULT 42 بثلاث طرق مختلفة لكل صف:
BytesMeaning
01استخدم DEFAULT 42.
00 01مسار القيمة، ثم NULL من خلال النوع Nullable.
00 00 …مسار القيمة، ثم قيمة داخلية غير NULL.

تطور المخطط

الحالةالسلوك
عمود مفقود بالكامل من ترويسة الملفتُملأ قيمته في الجدول الهدف عبر insertDefaultsForNotSeenColumns؛ ويتحكم فيه defaults_for_omitted_fields.
عمود موجود في الترويسة، مع وسم الخلية 0x01insertDefault لكل صف.
عمود موجود في الترويسة، مع وسم الخلية 0x00تُحلَّل القيمة بشكل طبيعي.
عمود إضافي في الترويسة، غير موجود في الجدول الهدفيُتجاهَل بصمت عندما تكون input_format_skip_unknown_fields = 1 (تُستهلك العلامة أولًا؛ إذا كانت 0x01، فلا شيء إضافي؛ وإذا كانت 0x00، فتُحلَّل القيمة المقيَّدة بالنوع ثم تُهمَل).

مثال للاستخدام

Query
SELECT * FROM format(
    'RowBinaryWithNamesAndTypesAndDefaults',
    'x Nullable(UInt32) DEFAULT 42',
    unhex('01' || '0178' || '10' || hex('Nullable(UInt32)') || '01')
);
Response
┌──x─┐
│ 42 │
└────┘
  • تحتوي الترويسة على عمود واحد باسم x من النوع Nullable(UInt32).
  • تستخدم الخلية الوحيدة الوسم 0x01، ما يعني “استخدام DEFAULT 42”.

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

الإعدادات التالية مشتركة بين جميع التنسيقات من نوع RowBinary.
الإعدادالوصفالافتراضي
format_binary_max_string_sizeالحد الأقصى المسموح به لحجم String في تنسيق RowBinary.1GiB
output_format_binary_encode_types_in_binary_formatيتيح كتابة الأنواع في الترويسة باستخدام الترميز الثنائي بدلًا من السلاسل النصية التي تتضمن أسماء الأنواع في تنسيق الإخراج RowBinaryWithNamesAndTypes.false
input_format_binary_decode_types_in_binary_formatيتيح قراءة الأنواع في الترويسة باستخدام الترميز الثنائي بدلًا من السلاسل النصية التي تتضمن أسماء الأنواع في تنسيق الإدخال RowBinaryWithNamesAndTypes.false
output_format_binary_write_json_as_stringيتيح كتابة قيم نوع البيانات JSON كقيم JSON من نوع String في تنسيق الإخراج RowBinary.false
input_format_binary_read_json_as_stringيتيح قراءة قيم نوع البيانات JSON كقيم JSON من نوع String في تنسيق الإدخال RowBinary.false
آخر تعديل في ٢٥ يونيو ٢٠٢٦