Avro schema Specification

本文介绍了Apache Avro的数据格式及应用。Avro是一种数据序列化系统,支持丰富的数据结构并具备灵活的schema演化特性。文章详细解释了Avro中的各种数据类型,包括基本类型、复杂类型等,并给出了具体的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Introduction

    此文档定义了Apache Avro,它是权威的指南,Avro的实现必须遵循此文档。

Schema Declaration

    schema是以Json的形式展现,存在以下几种形式:
    1)Json字符串,命名为以定义类型。
    2)Json对象,形式:{"type": "typeName" ...attributes...},typename要么是原始类型或派生类型。在文档中为定义的attribute可以作为元数据,但不能影响序列化数据的格式。
    3)Json数组,代表了内嵌类型的联合体

Primitive types

    基础数据类型如下:
    1)null:无指
    2)boolean:二进制值
    3)int:32位有符号整数
    4)long:64位有符号整数
    5)float:单精度(32位)浮点数
    6)double:双精度(64位)浮点数
    7)bytes:8位bit字节序列
    8)string:unicode字符序列
    基本类型没有指定的属性,{"type":"string"}

Complex Types

    avro支持六种复杂类型:records,enums,arrays,maps,unions和fixed。

record

records:使用name为"record",支持三种属性。
        1)name:json字符串,提供record的名称
        2)namespace:name的全名。
        3)doc:此schema的描述
        4)aliases:json的字符串数组,name的替代值。
        5)fields:json数组,filed列表,每一个filed是一个json对象,其属性如下:
           1)name:json字符串
           2)doc:field的描述
           3)type:json对象的定义schema。
           4)default:此filed的默认值

           5)order:指定此record中filed的压缩排序顺序。有效值为ascending descending ignore

{
  "type": "record", 
  "name": "LongList",
  "aliases": ["LinkedLongs"],                      // old name for this
  "fields" : [
    {"name": "value", "type": "long"},             // each element has a long
    {"name": "next", "type": ["LongList", "null"]} // optional next element
  ]
}

Enums

    枚举使用类型名称为"enum",支持一下属性:
    1)name:json字符串
    2)namespace:全名
    3)aliases:json字符串数组,别名
    4)doc:此schema的描述
    5)symbols:json数组,symbols列表
{ "type": "enum",
  "name": "Suit",
  "symbols" : ["SPADES", "HEARTS", "DIAMONDS", "CLUBS"]
}

Arrays

    使用type的名称为array,支持单个属性。items:数组元素的schema。
{"type": "array", "items": "string"}

Maps

   使用type的名称为map,支持一个属性。values:map的value的schema。map的keys设定为字符串。
{"type": "map", "values": "long"}

Unions

   Union使用json数组代表,如["string","null"],声明schema要么是null要么是null。对于同一个类型,union不会包含多于一个的schema。

Fixed

   支持两个属性。
   1)name,此filed的名称 
   2)namespace:全名
   3)aliases:别名,json字符串数组
   4)size:integer,每个值的字节数
{"type": "fixed", "size": 16, "name": "md5"} 

Data Serialization

    avro data序列化伴随着schema。存储Avro数据的文件也包括此数据的schema。Avro的RPC系统必须保证远程数据接受者写数据时有schema的备份。因为当数据读取时,写入数据的schema通常是可获取的,所以Avro数据本身并不包含类型信息。一般来说,序列化和反序列化的过程是:深度优先,由左至右遍历schema。
Encodings
    avro提供了两种学裂化编码方式:二进制和Json。大多数使用二进制编码,因为小巧,快速。基于调试和web的application,Json编码会更加合适。
Binary Encoding
    

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值