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スキーマで定義されたデフォルト値は適用されず、代わりにテーブルデフォルトが使用されます:
メッセージがoneofを含む場合で、input_format_protobuf_oneof_presence
が設定されている場合、ClickHouseはどのoneofフィールドが見つかったかを示すカラムを埋めます。
出現を示すカラムの名前はoneofの名前と同じでなければなりません。ネストされたメッセージもサポートされています(basic-examplesを参照)。 許可されている型はInt8、UInt8、Int16、UInt16、Int32、UInt32、Int64、UInt64、Enum、Enum8またはEnum16です。 Enum(およびEnum8またはEnum16)は、すべてのoneofの可能なタグと0を含む必要があり、0は不在を示します。文字列表現は重要ではありません。
設定input_format_protobuf_oneof_presence
はデフォルトで無効です。
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
ステートメントを使用します。