Apache Avro 学习
参考官方文档:https://avro.apache.org/docs/current/spec.html#schema_record
1.Schema的定义
Schema的结构其实就是一种json格式。
基本数据类型
基本数据类型一共有8种: null,boolean,int,long,float,double,bytes,string。{"type":"string"}代表的就是类型是string的schema
复杂数据类型
Avro提供了六种复杂数据类型:record,enums,arrays,maps,unions,fixed
Records
Records有以下属性:
name:提供record的的名称(string类型,必要参数)namespace:提供全限定名称(string类型)doc:提供说明的文档内容(string类型)aliases:别名(string的array类型)fields:列举字段的属性和值type:一个schema (schema类型,必要参数)name:定义字段 (string类型 必要参数)doc:描述内容(string类型)order:排序方式,默认升序aliases:别名(string类型)default:默认值

例子
{
"type": "record",
"name": "LongList",
"aliases": ["LinkedLongs"], // old name for this
"fields" : [
{"name": "value", "type": "long"}, // each element has a long
{"name": "next", "type": ["null", "LongList"]} // optional next element
]
}
Enums
Enums有以下属性:
name:提供enmu的名称(string类型,必要字段)namespace:全限定名称(string类型)aliases:别名(string的array类型)doc:说明文档内容(string类型)symbols:列举符号,禁止重复,必须匹配正则表达式(json数组类型)default:默认值
例子
{
"type": "enum",
"name": "Suit",
"symbols" : ["SPADES", "HEARTS", "DIAMONDS", "CLUBS"]
}
Arrays
Arrays提供了一个的属性:
items:提供了数组的items
例如一个string类型的数组定义如下
{
"type": "array",
"items" : "string",
"default": []
}
Maps
Maps提供了一个属性:
values:map的values
例如一个string转成long的map定义如下
{
"type": "map",
"values" : "long",
"default": {}
}
Unions
类型就是一个json数组
Fixed
Fixed有以下属性:
name:提供fiexd的名称(string类型,必要字段)namespace:命名空间((string类型)aliases:别名(string的array类型)doc:描述内容文档(string类型)size: 指定每个值的字节数(integer类型,必要字段)

浙公网安备 33010602011771号