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

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

フォーマット設定