Buffers est un format binaire très simple pour l’échange de données éphémères, dans lequel le consommateur et le producteur connaissent déjà le schéma et l’ordre des colonnes.
Contrairement à Native, il ne stocke pas les noms de colonnes, les types de colonnes ni aucune métadonnée supplémentaire.
Dans ce format, les données sont écrites et lues par blocs, au format binaire. Buffers utilise la même représentation binaire par colonne que le format Native et respecte les mêmes paramètres que ce format.
Pour chaque bloc, la séquence suivante est écrite :
- Nombre de colonnes (UInt64, little-endian).
- Nombre de lignes (UInt64, little-endian).
- Pour chaque colonne :
- Taille totale en octets des données de colonne sérialisées (UInt64, little-endian).
- Octets des données de colonne sérialisées, exactement comme dans le format Native.
Écrire dans un fichier :
SELECT
number AS num,
number * number AS num_square
FROM numbers(10)
INTO OUTFILE 'squares.buffers'
FORMAT Buffers;
Lisez à nouveau avec des types de colonnes explicites :
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 vous avez une table avec les mêmes types de colonnes, vous pouvez la remplir directement :
CREATE TABLE number_squares
(
a UInt64,
b UInt64
) ENGINE = Memory;
INSERT INTO number_squares
FROM INFILE 'squares.buffers'
FORMAT Buffers;
Inspectez la table :
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 │
└───┴────┘
Dernière modification le 25 juin 2026