| الإدخال | الإخراج | الاسم البديل |
|---|---|---|
| ✔ | ✗ |
الوصف
يشبه تنسيق RowBinaryWithNamesAndTypes، ولكن مع بايت إضافي قبل كل خلية يحدّد ما إذا كان ينبغي استخدام القيمة DEFAULT الخاصة بالعمود — تمامًا كما في تنسيق RowBinaryWithDefaults. يدعم هذا الدمج عمليات INSERT القابلة للتكيّف مع تغيّر المخطط: إذ يمكن للكاتب حذف أعمدة من الترويسة (فتأخذ القيمة DEFAULT الخاصة بالعمود الهدف)، وبالنسبة إلى أي عمود يرسله، يمكنه تعليم خلايا منفردة على أنها "استخدم القيمة DEFAULT الخاصة بالعمود" من دون الخلط بين ذلك وبين NULL.
هذا التنسيق مخصّص للإدخال فقط.
التنسيق السلكي
الترويسة مطابقة لـ RowBinaryWithNamesAndTypes:
- قيمة
VarUIntتتضمن عدد الأعمدةN. Nمن قيمStringالمسبوقة بالطول، وتحتوي على أسماء الأعمدة.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 بثلاث طرق مختلفة لكل صف:
| Bytes | Meaning |
|---|---|
01 |
استخدم DEFAULT 42. |
00 01 |
مسار القيمة، ثم NULL من خلال النوع Nullable. |
00 00 … |
مسار القيمة، ثم قيمة داخلية غير NULL. |
تطور المخطط
| الحالة | السلوك |
|---|---|
| عمود مفقود بالكامل من ترويسة الملف | تُملأ قيمته في الجدول الهدف عبر insertDefaultsForNotSeenColumns؛ ويتحكم فيه defaults_for_omitted_fields. |
عمود موجود في الترويسة، مع وسم الخلية 0x01 |
insertDefault لكل صف. |
عمود موجود في الترويسة، مع وسم الخلية 0x00 |
تُحلَّل القيمة بشكل طبيعي. |
| عمود إضافي في الترويسة، غير موجود في الجدول الهدف | يُتجاهَل بصمت عندما تكون input_format_skip_unknown_fields = 1 (تُستهلك العلامة أولًا؛ إذا كانت 0x01، فلا شيء إضافي؛ وإذا كانت 0x00، فتُحلَّل القيمة المقيَّدة بالنوع ثم تُهمَل). |
مثال للاستخدام
SELECT * FROM format(
'RowBinaryWithNamesAndTypesAndDefaults',
'x Nullable(UInt32) DEFAULT 42',
unhex('01' || '0178' || '10' || hex('Nullable(UInt32)') || '01')
);┌──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 |