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布尔值
int32位有符号整数
long64位有符号整数
float单精度(32位)的IEEE 754浮点数
double双精度(64位)的IEEE 754浮点数
bytes8位无符号字节序列
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字节

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值