CapnProto
| 입력 | 출력 | 별칭 |
|---|---|---|
| ✔ | ✔ |
설명
CapnProto 포맷은 Protocol Buffers 포맷 및 Thrift와 유사한 이진 메시지 포맷이며, JSON이나 MessagePack과는 다릅니다.
CapnProto 메시지는 엄격하게 타입이 지정되어 있으며 자기 기술(self-describing) 방식이 아니므로 외부 스키마 정의가 필요합니다. 이 스키마는 실행 시점에 동적으로 적용되며 각 쿼리마다 캐시됩니다.
Format Schema도 참고하십시오.
CapnProto와 데이터 타입 매칭
아래 표는 지원되는 데이터 타입과 INSERT 및 SELECT 쿼리에서 각각이 ClickHouse 데이터 타입과 어떻게 매칭되는지 보여줍니다.
CapnProto 데이터 타입 (INSERT) | ClickHouse 데이터 타입 | CapnProto 데이터 타입 (SELECT) |
|---|---|---|
UINT8, BOOL | UInt8 | UINT8 |
INT8 | Int8 | INT8 |
UINT16 | UInt16, Date | UINT16 |
INT16 | Int16 | INT16 |
UINT32 | UInt32, DateTime | UINT32 |
INT32 | Int32, Decimal32 | INT32 |
UINT64 | UInt64 | UINT64 |
INT64 | Int64, DateTime64, Decimal64 | INT64 |
FLOAT32 | Float32 | FLOAT32 |
FLOAT64 | Float64 | FLOAT64 |
TEXT, DATA | String, FixedString | TEXT, DATA |
union(T, Void), union(Void, T) | Nullable(T) | union(T, Void), union(Void, T) |
ENUM | Enum(8/16) | ENUM |
LIST | Array | LIST |
STRUCT | Tuple | STRUCT |
UINT32 | IPv4 | UINT32 |
DATA | IPv6 | DATA |
DATA | Int128/UInt128/Int256/UInt256 | DATA |
DATA | Decimal128/Decimal256 | DATA |
STRUCT(entries LIST(STRUCT(key Key, value Value))) | Map | STRUCT(entries LIST(STRUCT(key Key, value Value))) |
- 정수 타입은 입력/출력 시 서로 변환될 수 있습니다.
- CapnProto 포맷에서
Enum을 사용하려면 format_capn_proto_enum_comparising_mode SETTING을 사용하십시오. Array는 중첩될 수 있으며, 인자로Nullable타입(널 허용 타입)의 값을 가질 수 있습니다.Tuple및Map타입 또한 중첩될 수 있습니다.
사용 예제
데이터 삽입 및 조회
다음 명령을 사용하여 파일에서 CapnProto 데이터를 ClickHouse 테이블에 삽입할 수 있습니다:
이때 schema.capnp 파일은 다음과 같습니다:
다음 명령을 사용하여 ClickHouse 테이블에서 데이터를 선택해 CapnProto 형식의 파일로 저장할 수 있습니다:
자동 생성된 스키마 사용
데이터에 대한 외부 CapnProto 스키마가 없더라도 자동 생성된 스키마를 사용하여 데이터를 CapnProto 형식으로 입력/출력할 수 있습니다.
예를 들어:
이 경우 ClickHouse는 함수 structureToCapnProtoSchema를 사용하여 테이블 구조에 따라 CapnProto 스키마를 자동으로 생성하고, 이 스키마를 사용하여 데이터를 CapnProto 형식으로 직렬화합니다.
자동으로 생성된 스키마를 사용하여 CapnProto 파일을 읽을 수도 있습니다(이 경우 파일은 동일한 스키마로 생성되어야 합니다):
형식 설정
format_capn_proto_use_autogenerated_schema 설정은 기본적으로 활성화되어 있으며, format_schema가 설정되지 않은 경우에 적용됩니다.
입력/출출을 수행할 때 output_format_schema 설정을 사용하여 자동 생성된 스키마를 파일로 저장할 수도 있습니다.
예를 들면 다음과 같습니다:
이 경우 자동 생성된 CapnProto 스키마는 path/to/schema/schema.capnp 파일에 저장됩니다.