Buffers 형식
Buffers 형식
Buffers는 일시적인 데이터 교환을 위한 아주 간단한 바이너리 형식이에요. 소비자와 생산자가 이미 스키마와 컬럼 순서를 알고 있을 때 사용하며, Native 형식과 달리 컬럼 이름, 컬럼 타입, 추가 메타데이터를 저장하지 않아요.
출처: 문서
본문
| Input | Output | Alias |
|---|---|---|
| ✔ | ✔ |
설명 (Description)
Buffers는 소비자와 생산자가 이미 스키마와 컬럼 순서를 알고 있는 일시적 데이터 교환을 위한 매우 간단한 바이너리 형식입니다. Native와 달리 컬럼 이름, 컬럼 타입, 추가 메타데이터를 저장하지 않아요.
이 형식에서 데이터는 블록 단위로 바이너리 형식으로 쓰고 읽습니다. Buffers는 Native 형식과 동일한 컬럼별 바이너리 표현을 사용하며 동일한 Native 형식 설정을 존중합니다.
각 블록에 대해 다음 시퀀스가 기록됩니다:
- 컬럼 수 (UInt64, little-endian).
- 행 수 (UInt64, little-endian).
- 각 컬럼에 대해:
- 직렬화된 컬럼 데이터의 총 바이트 크기 (UInt64, little-endian).
- Native 형식과 정확히 동일한 직렬화된 컬럼 데이터 바이트.
사용 예시 (Example usage)
파일에 쓰기:
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 │
└───┴────┘