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はprotobufメッセージをlength-delimited
形式で入出力します。
これは、各メッセージの前にその長さが可変幅整数(varint)として記述される必要があることを意味します。
また、人気のある言語でlength-delimited 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
ステートメントを使用します。