iki soru var:Avro şema evrimi
mümkün Aynı okuyucuyu kullanmak ve uyumlu, örneğin iki şemalar ile yazılmıştır kayıtları ayrıştırmak için misadece
Schema V1
ile karşılaştırıldığında ek bir isteğe bağlı alana sahip ve ben okuyucu hem anlamak isterim? Bence cevap burada hayır, ama eğer evet ise, bunu nasıl yaparım?Ben
Schema V1
ile rekor yazma veSchema V2
ile okumaya çalıştılar, ancak aşağıdaki hatayı alıyorum:org.apache.avro.AvroTypeException: bekliyor, foo Bulunan foo
Ben avro-1.7.3 ve kullanılmış:
writer = new GenericDatumWriter<GenericData.Record>(SchemaV1);
reader = new GenericDatumReader<GenericData.Record>(SchemaV2, SchemaV1);
İşte (Ben de bir ad alanını ekleyerek denedim ama hiç şansım) iki şemalar örnekleridir.
Şema V1:
{
"name": "foo",
"type": "record",
"fields": [{
"name": "products",
"type": {
"type": "array",
"items": {
"name": "product",
"type": "record",
"fields": [{
"name": "a1",
"type": "string"
}, {
"name": "a2",
"type": {"type": "fixed", "name": "a3", "size": 1}
}, {
"name": "a4",
"type": "int"
}, {
"name": "a5",
"type": "int"
}]
}
}
}]
}
Şema V2: önceden
{
"name": "foo",
"type": "record",
"fields": [{
"name": "products",
"type": {
"type": "array",
"items": {
"name": "product",
"type": "record",
"fields": [{
"name": "a1",
"type": "string"
}, {
"name": "a2",
"type": {"type": "fixed", "name": "a3", "size": 1}
}, {
"name": "a4",
"type": "int"
}, {
"name": "a5",
"type": "int"
}]
}
}
},
{
"name": "purchases",
"type": ["null",{
"type": "array",
"items": {
"name": "purchase",
"type": "record",
"fields": [{
"name": "a1",
"type": "int"
}, {
"name": "a2",
"type": "int"
}]
}
}]
}]
}
teşekkürler.
Varsayılan değerler şarttır. Okuyucu şemasında bulunan, ancak yazar şemasında bulunmayan bir alan için varsayılan bir değer sağlamazsanız, Avro bu yeni alanı ayrıştırılmış yapıda nasıl oluşturacağınızı anlayamaz. – LiMuBei