BSONEachRow 형식

BSONEachRow 형식

BSONEachRow 형식은 데이터를 구분자 없이 연속된 Binary JSON(BSON) 문서 시퀀스로 파싱해요. 각 행은 단일 문서로, 각 컬럼은 컬럼 이름을 키로 하는 단일 BSON 문서 필드로 형식화됩니다.

출처: 문서

본문

Input Output Alias

설명 (Description)

BSONEachRow 형식은 구분자 없이 데이터를 일련의 Binary JSON(BSON) 문서로 파싱합니다. 각 행은 단일 문서로 형식화되고, 각 컬럼은 컬럼 이름을 키로 하는 단일 BSON 문서 필드로 형식화됩니다.

데이터 타입 매칭 (Data types matching)

출력에서는 ClickHouse 타입과 BSON 타입 사이에 다음과 같은 대응을 사용합니다:

ClickHouse type BSON Type
Bool \x08 boolean
Int8/UInt8 / Enum8 \x10 int32
Int16/UInt16 / Enum16 \x10 int32
Int32 \x10 int32
UInt32 \x12 int64
Int64/UInt64 \x12 int64
Float32/Float64 \x01 double
Date / Date32 \x10 int32
DateTime \x12 int64
DateTime64 \x09 datetime
Decimal32 \x10 int32
Decimal64 \x12 int64
Decimal128 \x05 binary, \x00 binary subtype, size = 16
Decimal256 \x05 binary, \x00 binary subtype, size = 32
Int128/UInt128 \x05 binary, \x00 binary subtype, size = 16
Int256/UInt256 \x05 binary, \x00 binary subtype, size = 32
String / FixedString \x05 binary, \x00 binary subtype or \x02 string if setting output_format_bson_string_as_string is enabled
UUID \x05 binary, \x04 uuid subtype, size = 16
Array \x04 array
Tuple \x04 array
Named Tuple \x03 document
Map \x03 document
IPv4 \x10 int32
IPv6 \x05 binary, \x00 binary subtype

입력에서는 BSON 타입과 ClickHouse 타입 사이에 다음과 같은 대응을 사용합니다:

BSON Type ClickHouse Type
\x01 double Float32/Float64
\x02 string String / FixedString
\x03 document Map / Named Tuple
\x04 array Array / Tuple
\x05 binary, \x00 binary subtype String / FixedString / IPv6
\x05 binary, \x02 old binary subtype String / FixedString
\x05 binary, \x03 old uuid subtype UUID
\x05 binary, \x04 uuid subtype UUID
\x07 ObjectId String / FixedString
\x08 boolean Bool
\x09 datetime DateTime64
\x0A null value NULL
\x0D JavaScript code String / FixedString
\x0E symbol String / FixedString
\x10 int32 Int32/UInt32 / Decimal32 / IPv4 / Enum8/Enum16
\x12 int64 Int64/UInt64 / Decimal64 / DateTime64

다른 BSON 타입은 지원되지 않습니다. 또한 다른 정수 타입 간의 변환을 수행합니다. 예를 들어 BSON int32 값을 UInt8로 ClickHouse에 삽입할 수 있어요.

Int128/UInt128/Int256/UInt256/Decimal128/Decimal256과 같은 큰 정수와 소수는 \x00 binary subtype을 가진 BSON Binary 값에서 파싱할 수 있습니다. 이 경우 형식은 바이너리 데이터의 크기가 예상 값의 크기와 같은지 검증합니다.

이 형식은 Big-Endian 플랫폼에서는 제대로 작동하지 않아요.

사용 예시 (Example usage)

데이터 삽입 (Inserting data)

football.bson이라는 이름의 BSON 파일에 다음 데이터가 있다고 가정해 볼게요:

    ┌───────date─┬─season─┬─home_team─────────────┬─away_team───────────┬─home_team_goals─┬─away_team_goals─┐
 1. │ 2022-04-30 │   2021 │ Sutton United         │ Bradford City       │               1 │               4 │
 2. │ 2022-04-30 │   2021 │ Swindon Town          │ Barrow              │               2 │               1 │
 3. │ 2022-04-30 │   2021 │ Tranmere Rovers       │ Oldham Athletic     │               2 │               0 │
 4. │ 2022-05-02 │   2021 │ Port Vale             │ Newport County      │               1 │               2 │
 5. │ 2022-05-02 │   2021 │ Salford City          │ Mansfield Town      │               2 │               2 │
 6. │ 2022-05-07 │   2021 │ Barrow                │ Northampton Town    │               1 │               3 │
 7. │ 2022-05-07 │   2021 │ Bradford City         │ Carlisle United     │               2 │               0 │
 8. │ 2022-05-07 │   2021 │ Bristol Rovers        │ Scunthorpe United   │               7 │               0 │
 9. │ 2022-05-07 │   2021 │ Exeter City           │ Port Vale           │               0 │               1 │
10. │ 2022-05-07 │   2021 │ Harrogate Town A.F.C. │ Sutton United       │               0 │               2 │
11. │ 2022-05-07 │   2021 │ Hartlepool United     │ Colchester United   │               0 │               2 │
12. │ 2022-05-07 │   2021 │ Leyton Orient         │ Tranmere Rovers     │               0 │               1 │
13. │ 2022-05-07 │   2021 │ Mansfield Town        │ Forest Green Rovers │               2 │               2 │
14. │ 2022-05-07 │   2021 │ Newport County        │ Rochdale            │               0 │               2 │
15. │ 2022-05-07 │   2021 │ Oldham Athletic       │ Crawley Town        │               3 │               3 │
16. │ 2022-05-07 │   2021 │ Stevenage Borough     │ Salford City        │               4 │               2 │
17. │ 2022-05-07 │   2021 │ Walsall               │ Swindon Town        │               0 │               3 │
    └────────────┴────────┴───────────────────────┴─────────────────────┴─────────────────┴─────────────────┘

데이터를 삽입합니다:

INSERT INTO football FROM INFILE 'football.bson' FORMAT BSONEachRow;

데이터 읽기 (Reading data)

BSONEachRow 형식을 사용하여 데이터를 읽습니다:

SELECT *
FROM football INTO OUTFILE 'docs_data/bson/football.bson'
FORMAT BSONEachRow

BSON은 터미널에서 사람이 읽을 수 있는 형태로 표시되지 않는 바이너리 형식입니다. BSON 파일을 출력하려면 INTO OUTFILE을 사용하세요.

형식 설정 (Format settings)

Setting Description Default
output_format_bson_string_as_string String 컬럼에 Binary 대신 BSON String 타입 사용. false
input_format_bson_skip_fields_with_unsupported_types_in_schema_inference BSONEachRow 형식의 스키마 추론 중 지원되지 않는 타입의 컬럼 건너뛰기 허용. false

더 알아보기 (Learn more)