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 │
└───┴────┘
Последнее изменение 10 июня 2026 г.