CapnProto
入力 | 出力 | エイリアス |
---|---|---|
✔ | ✔ |
説明
CapnProto
フォーマットは、Protocol Buffers
フォーマットやThriftに似たバイナリメッセージフォーマットですが、JSONやMessagePackとは異なります。
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設定を使用してください。 - 配列はネスト可能で、
Nullable
型の値を持つことができます。また、Tuple
やMap
型もネスト可能です。
使用例
データの挿入と選択
次のコマンドを使用して、ファイルからClickHouseテーブルにCapnProtoデータを挿入できます。
schema.capnp
は次のようになります。
次のコマンドを使用して、ClickHouseテーブルからデータを選択し、CapnProto
フォーマットでファイルに保存できます。
自動生成されたスキーマの使用
データに対する外部のCapnProto
スキーマがない場合でも、自動生成されたスキーマを使用してCapnProto
フォーマットでデータを出力/入力できます。
例えば:
この場合、ClickHouseはテーブル構造に従ってCapnProtoスキーマを自動生成し、関数structureToCapnProtoSchemaを使用してデータをCapnProtoフォーマットでシリアライズするためにこのスキーマを使用します。
自動生成されたスキーマでCapnProtoファイルを読み取ることも可能です(この場合、ファイルは同じスキーマを使用して作成されている必要があります)。
フォーマット設定
設定format_capn_proto_use_autogenerated_schema
はデフォルトで有効であり、format_schema
が設定されていない場合に適用されます。
また、設定output_format_schema
を使用して、入力/出力中に自動生成されたスキーマをファイルに保存することもできます。
例えば:
この場合、自動生成されたCapnProto
スキーマはファイルpath/to/schema/schema.capnp
に保存されます。