Buffers هو تنسيق ثنائي بسيط جدًا لتبادل البيانات العابرة، حيث يكون كلٌّ من المستهلك والمنتِج على معرفة مسبقة بالمخطط وترتيب الأعمدة.
وعلى خلاف Native، فهو لا يخزّن أسماء الأعمدة أو أنواعها أو أي بيانات وصفية إضافية.
في هذا التنسيق، تُكتب البيانات وتُقرأ على هيئة كتل بتنسيق ثنائي. ويستخدم Buffers التمثيل الثنائي نفسه لكل عمود كما في تنسيق Native، كما يلتزم بإعدادات تنسيق Native نفسها.
لكل كتلة، يُكتب التسلسل التالي:
- عدد الأعمدة (UInt64، little-endian).
- عدد الصفوف (UInt64، little-endian).
- لكل عمود:
- الحجم الإجمالي بالبايت لبيانات العمود المُسلسلة (UInt64، little-endian).
- بايتات بيانات العمود المُسلسلة، تمامًا كما في تنسيق Native.
اكتب في ملف:
SELECT
number AS num,
number * number AS num_square
FROM numbers(10)
INTO OUTFILE 'squares.buffers'
FORMAT Buffers;
اقرأه مجددًا مع تحديد أنواع الأعمدة صراحةً:
SELECT
*
FROM file(
'squares.buffers',
'Buffers',
'col_1 UInt64, col_2 UInt64'
);
┌─col_1─┬─col_2─┐
│ 0 │ 0 │
│ 1 │ 1 │
│ 2 │ 4 │
│ 3 │ 9 │
│ 4 │ 16 │
│ 5 │ 25 │
│ 6 │ 36 │
│ 7 │ 49 │
│ 8 │ 64 │
│ 9 │ 81 │
└───────┴───────┘
إذا كان لديك جدول له أنواع الأعمدة نفسها، فيمكنك ملؤه مباشرةً:
CREATE TABLE number_squares
(
a UInt64,
b UInt64
) ENGINE = Memory;
INSERT INTO number_squares
FROM INFILE 'squares.buffers'
FORMAT Buffers;
عاين الجدول:
SELECT * FROM number_squares;
┌─a─┬──b─┐
│ 0 │ 0 │
│ 1 │ 1 │
│ 2 │ 4 │
│ 3 │ 9 │
│ 4 │ 16 │
│ 5 │ 25 │
│ 6 │ 36 │
│ 7 │ 49 │
│ 8 │ 64 │
│ 9 │ 81 │
└───┴────┘
آخر تعديل في ٢٥ يونيو ٢٠٢٦