次のような 2 つ (またはそれ以上) の異なるレコードの結合を含むレコードで構成される Avro スキーマを定義しました。
{
"type":"record",
"name":"MyCompositeRecord",
"fields":
[
{"name":"SomeCommonData","type":"string"},
{"name":"MoreCommonData","type":"float"},
{"name":"CompositeRecord","type":
[
{
"type":"record",
"name":"FirstOption",
"fields":
[
{"name":"x","type":"string"},
{"name":"y","type":"long"}
]
},
{
"type":"record",
"name":"SecondOption",
"fields":
[
{"name":"z","type":"int"},
{"name":"w","type":"float"},
{"name":"m","type":"double"},
{"name":"l","type":"boolean"}
]
}
]
}
]
}
あまり明確に見えませんが、理解していただければ幸いです。いくつかのデータ ("SomeCommonData" と "MoreCommonData") で構成されるレコードと、2 つの異なるタイプのレコード ("FirstOption" と "SecondOption") の和集合があります。 . シリアル化/逆シリアル化時に、2 つのサブレコードのいずれかを作成し、「MyCompositeRecord」をシリアル化できるはずです。
一般的なレコードのみを使用することを計画しているため、スキーマのコードを生成しようとはしていません。ただし、そのような一般的なレコードをシリアル化できるかどうか、またどのようにシリアル化できるかはわかりません。オンラインで例が見つかりません。Javaを使用してシリアライズ/デシリアライズします。次のように、スキーマのライター/リーダーを作成できました。
Schema.Parser parser = new Schema.Parser();
Schema schema = parser.parse(COMPOSITE_SCHEMA);
DatumWriter<GenericRecord> writer = new GenericDatumWriter<>(schema);
DatumReader<GenericRecord> reader = new GenericDatumReader<>(schema);
GenericRecord datum = new GenericData.Record(schema);
ここから実際にレコードを作成する方法についてのアイデアはありますか?
ありがとう