يحلّل التنسيق BSONEachRow البيانات على هيئة تسلسل من مستندات Binary JSON (BSON) من دون أي فاصل بينها.
يُنسَّق كل صف على شكل مستند واحد، ويُنسَّق كل عمود كحقل واحد في مستند BSON، بحيث يكون اسم العمود هو المفتاح.
في الإخراج، تُستخدم المطابقة التالية بين أنواع ClickHouse وأنواع BSON:
| نوع ClickHouse | نوع BSON |
|---|
| Bool | \x08 boolean |
| Int8/UInt8/Enum8 | \x10 int32 |
| Int16/UInt16/Enum16 | \x10 int32 |
| Int32 | \x10 int32 |
| UInt32 | \x12 int64 |
| Int64/UInt64 | \x12 int64 |
| Float32/Float64 | \x01 double |
| Date/Date32 | \x10 int32 |
| DateTime | \x12 int64 |
| DateTime64 | \x09 datetime |
| Decimal32 | \x10 int32 |
| Decimal64 | \x12 int64 |
| Decimal128 | \x05 binary, \x00 binary subtype, الحجم = 16 |
| Decimal256 | \x05 binary, \x00 binary subtype, الحجم = 32 |
| Int128/UInt128 | \x05 binary, \x00 binary subtype, الحجم = 16 |
| Int256/UInt256 | \x05 binary, \x00 binary subtype, الحجم = 32 |
| String/FixedString | \x05 binary, \x00 binary subtype أو \x02 string إذا كان الإعداد output_format_bson_string_as_string ممكّنًا |
| UUID | \x05 binary, \x04 uuid subtype, الحجم = 16 |
| Array | \x04 array |
| Tuple | \x04 array |
| Named Tuple | \x03 document |
| Map | \x03 document |
| IPv4 | \x10 int32 |
| IPv6 | \x05 binary, \x00 binary subtype |
في الإدخال، تُستخدم المطابقة التالية بين أنواع BSON وأنواع ClickHouse:
| نوع BSON | نوع ClickHouse |
|---|
\x01 double | Float32/Float64 |
\x02 string | String/FixedString |
\x03 مستند | Map/Named Tuple |
\x04 مصفوفة | Array/Tuple |
\x05 binary, \x00 النوع الفرعي الثنائي | String/FixedString/IPv6 |
\x05 binary, \x02 النوع الفرعي الثنائي القديم | String/FixedString |
\x05 binary, \x03 النوع الفرعي القديم uuid | UUID |
\x05 binary, \x04 النوع الفرعي uuid | UUID |
\x07 ObjectId | String/FixedString |
\x08 boolean | Bool |
\x09 datetime | DateTime64 |
\x0A قيمة NULL | NULL |
\x0D JavaScript code | String/FixedString |
\x0E symbol | String/FixedString |
\x10 int32 | Int32/UInt32/Decimal32/IPv4/Enum8/Enum16 |
\x12 int64 | Int64/UInt64/Decimal64/DateTime64 |
أنواع BSON الأخرى غير مدعومة. بالإضافة إلى ذلك، يُجري هذا التنسيق تحويلًا بين الأنواع الصحيحة المختلفة.
فعلى سبيل المثال، يمكن إدراج قيمة BSON من النوع int32 في ClickHouse بصفتها UInt8.
يمكن تحليل الأعداد الصحيحة الكبيرة والقيم العشرية مثل Int128/UInt128/Int256/UInt256/Decimal128/Decimal256 من قيمة BSON من نوع Binary ذات النوع الفرعي الثنائي \x00.
في هذه الحالة، سيتحقق التنسيق من أن حجم البيانات الثنائية يساوي حجم القيمة المتوقعة.
لا يعمل هذا التنسيق بشكل صحيح على المنصات ذات ترتيب البايتات Big-Endian.
باستخدام ملف BSON باسم football.bson ويحتوي على البيانات التالية:
┌───────date─┬─season─┬─home_team─────────────┬─away_team───────────┬─home_team_goals─┬─away_team_goals─┐
1. │ 2022-04-30 │ 2021 │ Sutton United │ Bradford City │ 1 │ 4 │
2. │ 2022-04-30 │ 2021 │ Swindon Town │ Barrow │ 2 │ 1 │
3. │ 2022-04-30 │ 2021 │ Tranmere Rovers │ Oldham Athletic │ 2 │ 0 │
4. │ 2022-05-02 │ 2021 │ Port Vale │ Newport County │ 1 │ 2 │
5. │ 2022-05-02 │ 2021 │ Salford City │ Mansfield Town │ 2 │ 2 │
6. │ 2022-05-07 │ 2021 │ Barrow │ Northampton Town │ 1 │ 3 │
7. │ 2022-05-07 │ 2021 │ Bradford City │ Carlisle United │ 2 │ 0 │
8. │ 2022-05-07 │ 2021 │ Bristol Rovers │ Scunthorpe United │ 7 │ 0 │
9. │ 2022-05-07 │ 2021 │ Exeter City │ Port Vale │ 0 │ 1 │
10. │ 2022-05-07 │ 2021 │ Harrogate Town A.F.C. │ Sutton United │ 0 │ 2 │
11. │ 2022-05-07 │ 2021 │ Hartlepool United │ Colchester United │ 0 │ 2 │
12. │ 2022-05-07 │ 2021 │ Leyton Orient │ Tranmere Rovers │ 0 │ 1 │
13. │ 2022-05-07 │ 2021 │ Mansfield Town │ Forest Green Rovers │ 2 │ 2 │
14. │ 2022-05-07 │ 2021 │ Newport County │ Rochdale │ 0 │ 2 │
15. │ 2022-05-07 │ 2021 │ Oldham Athletic │ Crawley Town │ 3 │ 3 │
16. │ 2022-05-07 │ 2021 │ Stevenage Borough │ Salford City │ 4 │ 2 │
17. │ 2022-05-07 │ 2021 │ Walsall │ Swindon Town │ 0 │ 3 │
└────────────┴────────┴───────────────────────┴─────────────────────┴─────────────────┴─────────────────┘
أدرِج البيانات:
INSERT INTO football FROM INFILE 'football.bson' FORMAT BSONEachRow;
اقرأ البيانات بتنسيق BSONEachRow:
SELECT *
FROM football INTO OUTFILE 'docs_data/bson/football.bson'
FORMAT BSONEachRow
BSON هو تنسيق ثنائي لا يُعرض في الطرفية بصيغة مقروءة للبشر. استخدم INTO OUTFILE لإخراج ملفات BSON.
| الإعداد | الوصف | الافتراضي |
|---|
output_format_bson_string_as_string | استخدم النوع BSON String بدلاً من Binary في أعمدة String. | false |
input_format_bson_skip_fields_with_unsupported_types_in_schema_inference | اسمح بتخطي الأعمدة ذات الأنواع غير المدعومة أثناء استدلال المخطط للصيغة BSONEachRow. | false |