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字节