Protobuf
入力 | 出力 | 別名 |
---|---|---|
✔ | ✔ |
説明
Protobuf
形式は、Protocol Buffers形式です。
この形式は、クエリ間でキャッシュされる外部形式スキーマを必要とします。
ClickHouseは以下をサポートします:
proto2
およびproto3
構文。Repeated
/optional
/required
フィールド。
使用例
基本的な例
使用例:
ここで、ファイル schemafile.proto
は次のようになります:
ClickHouseは、テーブルのカラムとProtocol Buffersのメッセージタイプのフィールドの対応を見つけるために、それらの名前を比較します。
この比較は大文字小文字を区別せず、_
(アンダースコア)と .
(ドット)は等しいと見なされます。
カラムとProtocol Buffersのメッセージのフィールドの型が異なる場合は、必要な変換が適用されます。
ネストされたメッセージもサポートされています。例えば、以下のメッセージタイプのフィールド z
の場合:
ClickHouseは、x.y.z
(または x_y_z
や X.y_Z
など)という名前のカラムを見つけようとします。
ネストされたメッセージは、ネストデータ構造の入力または出力に適しています。
以下のようなprotobufスキーマで定義されたデフォルト値は適用されず、テーブルのデフォルト値が代わりに使用されます:
ClickHouseは length-delimited
形式でprotobufメッセージを入力・出力します。
これは、各メッセージの前にその長さを可変幅整数(varint)として記述する必要があることを意味します。
参照: 人気のプログラミング言語での長さ区切りprotobufメッセージの読み書き方法。
自動生成スキーマの使用
データ用の外部Protobufスキーマがない場合でも、自動生成されたスキーマを使用してProtobuf形式でデータを出力・入力できます。
例えば:
この場合、ClickHouseはテーブル構造に従ってProtobufスキーマを自動生成し、structureToProtobufSchema
関数を使用します。
その後、このスキーマを使用してProtobuf形式でデータをシリアライズします。
自動生成されたスキーマを使用してProtobufファイルを読み込むこともできます。この場合、ファイルは同じスキーマを使って作成されている必要があります:
設定format_protobuf_use_autogenerated_schema
はデフォルトで有効で、format_schema
が設定されていない場合に適用されます。
入力・出力中に設定output_format_schema
を使用して自動生成スキーマをファイルに保存することもできます。例えば:
この場合、自動生成されたProtobufスキーマはファイル path/to/schema/schema.capnp
に保存されます。
Protobufキャッシュの削除
format_schema_path
から読み込まれたProtobufスキーマを再読み込みするには、SYSTEM DROP ... FORMAT CACHE
ステートメントを使用します。