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类型,必要字段)