説明
Apache Avro は、効率的なデータ処理のためにバイナリエンコーディングを使用する、行指向のシリアライゼーションフォーマットです。AvroConfluent フォーマットは、Confluent スキーマレジストリ (または API 互換のサービス) を使用した、Avro エンコード済みメッセージの読み書きをサポートします。
各メッセージは Confluent のワイヤ形式に従います。これは、マジックバイト (0x00) に続いて 4 バイトのビッグエンディアンのスキーマ ID が配置され、その後に Avro のバイナリデータが続く形式です。読み取り時には、ClickHouse はレジストリに問い合わせてスキーマ ID を解決します。書き込み時には、ClickHouse は出力カラムから導出したスキーマを登録し、生成された ID を各行の先頭に付加します。最適なパフォーマンスを得るため、スキーマはキャッシュされます。
データ型マッピング
次の表は、Apache Avro フォーマットでサポートされるすべてのデータ型と、INSERT および SELECT クエリでそれぞれに対応する ClickHouse のデータ型を示しています。
bytesがデフォルトで、設定output_format_avro_string_column_patternで制御されます
null をフィールド値として暗黙的に受け入れるため、たとえば Avro の union(T1, T2, null) は Variant(T1, T2) に変換されます。
そのため、ClickHouse から Avro を生成する際には、Avro の union 型の候補に常に null 型を含める必要があります。これは、スキーマ推論の時点では、実際に null となる値があるかどうか分からないためです。
*** Avro 論理型
サポートされていない Avro 論理データ型:
time-millistime-microsduration
フォーマット設定
例
Kafka からの読み込み
Kafka table engine を使用して Avro でエンコードされた Kafka トピックを読み込むには、format_avro_schema_registry_url 設定でスキーマレジストリの URL を指定します。
Kafka への書き込み
AvroConfluent メッセージを Kafka トピック に書き込むには、スキーマレジストリの URL と subject 名の両方を設定します。スキーマは最初の書き込み時に、自動的にレジストリへ登録されます。Basic認証を使用する
スキーマレジストリでBasic認証が必要な場合 (例: Confluent Cloud を使用している場合) 、format_avro_schema_registry_url 設定に URL エンコードされた認証情報を指定できます。
トラブルシューティング
インジェストの進行状況を監視し、Kafkaコンシューマーのエラーをデバッグするには、system.kafka_consumers システムテーブルをクエリします。デプロイ環境に複数のレプリカがある場合 (例: ClickHouse Cloud) は、clusterAllReplicas テーブル関数を使用する必要があります。