| 入力 | 出力 | エイリアス |
|---|---|---|
| ✔ | ✔ |
説明
Buffers は、コンシューマーとプロデューサーの双方がスキーマとカラム順序をすでに把握している場合に、一時的なデータ交換のために使われる非常にシンプルなバイナリフォーマットです。
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 │
└───┴────┘