本文主要是介绍Avro Schema格式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Avro Schema格式
Avro是一个数据序列化系统,主要用于支持大批量数据交换的应用。
特点:
- 支持二进制序列化方式,可以便捷、快速的处理大量数据;
- 动态语言有好,Avro提供的机制使动态语言可以方便的处理Avro数据
1.Avro Schema结构
{"type":"record","name":"aaa","namespace":"bbb","fields":[{"name":"ccc","type":"int","doc":"ccc","default":0},{"name":"ddd","type":"string","doc":"ddd","default":""}]
}
- “type”: “record” 必须栏位
- “name”: “aaa” 必须栏位,记录名
- “namespace”: “bbb” 包名
- “fields”: [] 必须栏位,列举所有属性,是json数组
- “name”:“ccc” 必须栏位,属性名
- “type”:“int” 必须栏位,属性类型
- “doc”:“ccc” 属性文档
- “default”:0 属性默认值,需要对应属性类型
2.简单数据类型
类型 | 说明 |
---|---|
null | 没有值 |
boolean | 布尔值 |
int | 32位有符号整数 |
long | 64位有符号整数 |
float | 单精度(32位)的IEEE 754浮点数 |
double | 双精度(64位)的IEEE 754浮点数 |
bytes | 8位无符号字节序列 |
string | 字符串 |
3.复杂数据类型
1).Array
{"type":"record","name":"aaa","namespace":"bbb","fields":[{"name":"ccc","type":{"type": "array","items": "string","default": []}}]
}
“items”: “string” array中元素的数据类型
2).Record
{"name":"aaa","default":null,"type":["null",{"type":"array","default":[],"items":{"name":"bbb","type":"record","fields":[{"name":"ccc","type":"string","doc":"ccc","default":""},{"name":"ddd","type":"string","doc":"ddd","default":""}]}}]
}
示例为array和record嵌套使用,适用于一个对象的元素包含其他对象的场景
3).Enum
{"type":"record","name":"aaa","namespace":"bbb","fields":[{"name":"ccc","type":"enum","symbols":["0","1","2"]}]
}
symbols:字符串数组,所有的枚举值(必填),不允许重复数据
4).Map
{"type":"record","name":"aaa","namespace":"bbb","fields":[{"name":"ccc","type":"map","values":"long"}]
}
map的key必须是string,示例为一个key为string,value为long的map
5).Union
组合类型,表示各种类型的组合,使用数组进行组合。比如[“null”, “string”]表示类型可以为null或者string。
Unions不能包含多个相同类型的Schema,除非是命名的record类型、命名的fixed类型和命名的enum类型。比如,如果unions中包含两个array类型,或者包含两个map类型都不允许;但是两个具有不同name的相同类型却可以。
6).Fixed
{"type":"record","name":"aaa","namespace":"bbb","fields":[{"name":"ccc","type":"fixed","size":16}]
}
size指声明的fixed类型数据为16字节
这篇关于Avro Schema格式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!