Buffers es un formato binario muy simple para el intercambio de datos efímeros, en el que tanto el consumidor como el productor ya conocen el esquema y el orden de las columnas.
A diferencia de Native, no almacena nombres ni tipos de columna, ni metadatos adicionales.
En este formato, los datos se escriben y se leen por bloques en formato binario. Buffers utiliza la misma representación binaria por columna que el formato Native y respeta la misma configuración del formato Native.
Para cada bloque, se escribe la siguiente secuencia:
- Número de columnas (UInt64, little-endian).
- Número de filas (UInt64, little-endian).
- Para cada columna:
- Tamaño total en bytes de los datos de columna serializados (UInt64, little-endian).
- Bytes de los datos de columna serializados, exactamente igual que en el formato Native.
Escribir en un archivo:
SELECT
number AS num,
number * number AS num_square
FROM numbers(10)
INTO OUTFILE 'squares.buffers'
FORMAT Buffers;
Vuelva a leerlo especificando explícitamente los tipos de columna:
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 │
└───────┴───────┘
Si tiene una tabla con los mismos tipos de columna, puede rellenarla directamente:
CREATE TABLE number_squares
(
a UInt64,
b UInt64
) ENGINE = Memory;
INSERT INTO number_squares
FROM INFILE 'squares.buffers'
FORMAT Buffers;
Inspeccione la tabla:
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 │
└───┴────┘
Última modificación el 10 de junio de 2026