如何表示 Avro 模式中的重复字段?
How to represent repeated fields in Avro schema?
我的数据模型有几个固定字段和一大块可变字段。变量字段作为一个块,在同一条记录中可以重复o到n次。
这个可以用对象person来类比。名称在每条记录中只有一个条目,但他可以有o到n个地址,字段地址也有结构。有没有办法循环遍历该人拥有的任意数量地址的地址模式?我如何在 Avro 模式文件中提到它?
您是否尝试过使用嵌套的 Avro 架构。那应该可以解决您的一个人多个地址的要求。这是一个有帮助的模式。
{
"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 模式生成代码时,您会得到人 class 和地址 class。为人 class(仅字段声明)自动生成的 class 看起来像
/**
* 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;
地址class(仅字段声明)看起来像
/**
* 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;
这是您要找的吗?
我的数据模型有几个固定字段和一大块可变字段。变量字段作为一个块,在同一条记录中可以重复o到n次。
这个可以用对象person来类比。名称在每条记录中只有一个条目,但他可以有o到n个地址,字段地址也有结构。有没有办法循环遍历该人拥有的任意数量地址的地址模式?我如何在 Avro 模式文件中提到它?
您是否尝试过使用嵌套的 Avro 架构。那应该可以解决您的一个人多个地址的要求。这是一个有帮助的模式。
{
"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 模式生成代码时,您会得到人 class 和地址 class。为人 class(仅字段声明)自动生成的 class 看起来像
/**
* 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;
地址class(仅字段声明)看起来像
/**
* 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;
这是您要找的吗?