メインコンテンツまでスキップ
メインコンテンツまでスキップ

CapnProto

Not supported in ClickHouse Cloud
入力出力エイリアス

説明

CapnProtoフォーマットは、Protocol BuffersフォーマットやThriftに似たバイナリメッセージフォーマットですが、JSONMessagePackとは異なります。
CapnProtoメッセージは厳密に型付けされており、自己記述型ではないため、外部のスキーマ記述が必要です。スキーマはその場で適用され、各クエリ用にキャッシュされます。

フォーマットスキーマも参照してください。

データ型の対応

以下の表は、サポートされているデータ型と、それがINSERTおよびSELECTクエリにおけるClickHouseのデータ型にどのように対応するかを示しています。

CapnProtoデータ型(INSERTClickHouseデータ型CapnProtoデータ型(SELECT
UINT8, BOOLUInt8UINT8
INT8Int8INT8
UINT16UInt16, DateUINT16
INT16Int16INT16
UINT32UInt32, DateTimeUINT32
INT32Int32, Decimal32INT32
UINT64UInt64UINT64
INT64Int64, DateTime64, Decimal64INT64
FLOAT32Float32FLOAT32
FLOAT64Float64FLOAT64
TEXT, DATAString, FixedStringTEXT, DATA
union(T, Void), union(Void, T)Nullable(T)union(T, Void), union(Void, T)
ENUMEnum(8/16)ENUM
LISTArrayLIST
STRUCTTupleSTRUCT
UINT32IPv4UINT32
DATAIPv6DATA
DATAInt128/UInt128/Int256/UInt256DATA
DATADecimal128/Decimal256DATA
STRUCT(entries LIST(STRUCT(key Key, value Value)))MapSTRUCT(entries LIST(STRUCT(key Key, value Value)))
  • 整数型は、入力/出力中に相互に変換できます。
  • CapnProtoフォーマットのEnumを扱うには、format_capn_proto_enum_comparising_mode設定を使用してください。
  • 配列はネスト可能で、Nullable型の値を持つことができます。また、TupleMap型もネスト可能です。

使用例

データの挿入と選択

次のコマンドを使用して、ファイルから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に保存されます。