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

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型の値を引数として持つことができます。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 に保存されます。