| 输入 | 输出 | 别名 |
|---|---|---|
| ✔ | ✔ |
说明
Buffers 是一种非常简单的二进制格式,用于临时性数据交换,此时消费者和生产者都已知晓 schema 和列顺序。
与 Native 不同,它不存储列名、列类型或任何额外元数据。
在这种格式中,数据按块以二进制格式读写。Buffers 对每一列都使用与 Native 格式相同的二进制表示,并遵循相同的 Native 格式设置。
对于每个块,会写入以下内容:
- 列数 (UInt64,小端序) 。
- 行数 (UInt64,小端序) 。
- 对每一列:
- 序列化后列数据的总字节数 (UInt64,小端序) 。
- 序列化后的列数据字节,与 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 │
└───┴────┘