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

Protobuf

Not supported in ClickHouse Cloud
入力出力エイリアス

説明

Protobufフォーマットは、Protocol Buffersフォーマットです。

このフォーマットは、クエリ間でキャッシュされる外部フォーマットスキーマを必要とします。

ClickHouseは以下をサポートします:

  • proto2およびproto3構文の両方。
  • Repeated/optional/requiredフィールド。

使用例

基本的な例

使用例:

ファイルschemafile.protoは次のようになります:

ClickHouseは、テーブルのカラムとProtocol Buffersのメッセージタイプのフィールド間の対応を見つけるために、それらの名前を比較します。 この比較は大文字と小文字を区別せず、_(アンダースコア)と.(ドット)の文字は等しいものと見なされます。 カラムとProtocol Buffersのメッセージのフィールドの型が異なる場合、必要な変換が適用されます。

入れ子メッセージもサポートされています。例えば、次のメッセージタイプのフィールドzの場合:

ClickHouseはx.y.z(またはx_y_zX.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ステートメントを使用します。

フォーマット設定