Buffers 형식

Buffers 형식

Buffers는 일시적인 데이터 교환을 위한 아주 간단한 바이너리 형식이에요. 소비자와 생산자가 이미 스키마와 컬럼 순서를 알고 있을 때 사용하며, Native 형식과 달리 컬럼 이름, 컬럼 타입, 추가 메타데이터를 저장하지 않아요.

출처: 문서

본문

Input Output Alias

설명 (Description)

Buffers는 소비자와 생산자가 이미 스키마와 컬럼 순서를 알고 있는 일시적 데이터 교환을 위한 매우 간단한 바이너리 형식입니다. Native와 달리 컬럼 이름, 컬럼 타입, 추가 메타데이터를 저장하지 않아요.

이 형식에서 데이터는 블록 단위로 바이너리 형식으로 쓰고 읽습니다. Buffers는 Native 형식과 동일한 컬럼별 바이너리 표현을 사용하며 동일한 Native 형식 설정을 존중합니다.

각 블록에 대해 다음 시퀀스가 기록됩니다:

  1. 컬럼 수 (UInt64, little-endian).
  2. 행 수 (UInt64, little-endian).
  3. 각 컬럼에 대해:
  • 직렬화된 컬럼 데이터의 총 바이트 크기 (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 │
  └───┴────┘

형식 설정 (Format settings)

더 알아보기 (Learn more)