私のデータモデルには、いくつかの固定フィールドと可変フィールドのブロックがあります。ブロックとしての変数フィールドは、同じレコード内でoからn回繰り返すことができます。
オブジェクトパーソンは、これのアナロジーとして使用できます。名前には各レコードに1つのエントリしかありませんが、oからnの数のアドレスを持つことができ、フィールドアドレスにも構造があります。その人が持っている任意の数の住所の住所スキーマをループする方法はありますか?Avroスキーマファイルでこれをどのように言及しますか?
ネストされたAvroスキーマを使用してみましたか。これで、1人または複数のアドレスの要件が解決されます。これが役立つスキーマです。
{
"type": "record",
"name" : "person",
"namespace" : "com.testavro",
"fields": [
{ "name" : "personname", "type": ["null","string"] },
{ "name" : "personId", "type": ["null","string"] },
{ "name" : "Addresses", "type": {
"type": "array",
"items": [ {
"type" : "record",
"name" : "Address",
"fields" : [
{ "name" : "addressLine1", "type": ["null", "string"] },
{ "name" : "addressLine2", "type": ["null", "string"] },
{ "name" : "city", "type": ["null", "string"] },
{ "name" : "state", "type": ["null", "string"] },
{ "name" : "zipcode", "type": ["null", "string"] }
]
}]
}
}
]
}
上記のavroスキーマを使用してコードを生成すると、personクラスとAddressクラスが取得されます。個人クラスの自動生成されたクラス(フィールド宣言のみ)は次のようになります
/**
* RecordBuilder for person instances.
*/
public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<person>
implements org.apache.avro.data.RecordBuilder<person> {
private java.lang.String personname;
private java.lang.String personId;
private java.util.List<java.lang.Object> Addresses;
Addressクラス(フィールド宣言のみ)は次のようになります。
/**
* RecordBuilder for Address instances.
*/
public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase<Address>
implements org.apache.avro.data.RecordBuilder<Address> {
private java.lang.String addressLine1;
private java.lang.String addressLine2;
private java.lang.String city;
private java.lang.String state;
private java.lang.String zipcode;
これはあなたが探していたものですか?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加