본문으로 바로가기
본문으로 바로가기

Buffers

InputOutputAlias

설명

Buffers는 소비자와 생산자 모두가 이미 스키마와 컬럼 순서를 알고 있는 상황에서 휘발성 데이터 교환을 위한 매우 단순한 이진 형식입니다.

Native와 달리, 컬럼 이름, 컬럼 타입 또는 추가 메타데이터를 저장하지 않습니다.

이 형식에서는 데이터가 이진 형식의 블록 단위로 쓰이고 읽힙니다. Buffers는 Native 형식과 동일한 컬럼별 이진 표현을 사용하며, 동일한 Native 형식 설정을 따릅니다.

각 블록마다 다음 순서로 데이터가 기록됩니다:

  1. 컬럼 개수 (UInt64, 리틀 엔디언).
  2. 행 개수 (UInt64, 리틀 엔디언).
  3. 각 컬럼에 대해:
  • 직렬화된 컬럼 데이터의 전체 바이트 크기 (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 │
  └───┴────┘

형식 설정