我試圖在我們的軟件中使用C++ avro庫,並且遇到了重大障礙。我有一個「Value」類來包裝一系列類型,我想用avro來讀/寫它。這不僅包括簡單類型,而且包括類型,任意類和更多的std :: vectors。包含多個陣列的Avro工會
我想爲我的「Value」類指定一個avro模式。在我的例子中,我將它限制爲空,int,long,int整數和long數組。
我的模式是一個記錄,它有兩個字段,一個標識包含的類型和一個聯合來保存包含的對象。我有它的架構如下...
{
"type": "record",
"name": "Value",
"fields": [
{
"name": "ilk",
"type": "string"
},
{
"name": "contents",
"type": [
"null",
"boolean",
"int",
{
"type": "array",
"items": "int"
},
"long",
{
"type": "array",
"items": "long"
}
]
}
]
}
我不指定JSON,但構建其打印出來,上面的Avro的C++模式層級。雖然驗證該架構層次結構失敗。通過C++代碼嗅探,即使數組或地圖中的類型不同,它也會阻止在聯合中有多個數組或地圖。
這實際上是否是avro標準的一部分,還是它在C++實現中的錯誤?我得到指定兩次相同的類型是一件愚蠢的事情,但我不會認爲具有不同包含類型的數組和地圖將被允許。
這不能與我們的內部類型系統一起工作,我通過將每個數組類型包裝在一個虛擬記錄中來解決這個問題。 – brunobignose