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ステートメントを使用します。