云优惠
 云服务器优惠大全

首页    编程语言    Avro 数据格式和命令行介绍

Avro 数据格式和命令行介绍

创建时间:2019-01-07 16:32
浏览量:0
收藏

2


支持的原始类型:null,boolean,int,long,float,double,bytes,string

支持的复杂类型:


records


必须:"type":"record"

必须:"name":"记录名"

"namespace":"包名"

"doc":"为schema提供文档"

"aliases":"json的一个string数组,为这条记录提供别名"

必须:"fields":"json数组,列举所有属性,每个fields都是一个json对象并包含如下属性"


必须:"name":"属性名"

必须:"type":"属性类型"

"doc":"属性文档"

"order":"默认升序"

"default":"属性默认值"

markdown_img_paste_20181103110442275


- 案例

  {

    "namespace": "example.avro",

    "type": "record",

    "name": "User",

    "fields": [

         {"name": "name", "type": "string"},

         {"name": "favorite_number",  "type": ["int", "null"]},

         {"name": "favorite_color", "type": ["string", "null"]}

    ]

  }

enums


必须:"type":"enum"

必须:"name":"enum名"

"namespace":"限定和修饰name属性,包名"

必须:"symbols":"string数组,列举所有枚举"

"aliases":"string数组,为enum提供别名"

"doc":"为此schema提供文档"

{

    "type": "enum",

    "name": "Suit",

    "symbols": [

        "SPADES",

        "HEARTS",

        "DIAMONDS",

        "CLUBS"

    ]

}

arrays


必须:"items":"array中元素的Schema"

{

  "type": "record",

  "name": "ArrAvro",

  "fields" : [

    {"name": "arr", "type": ["null",{"type":"array", "items":"string"}]}

  ]

}

编译后是:  @Deprecated public java.util.List<java.lang.CharSequence> arr;

maps


必须:"values":"定义map的值的Schema,Maps的key都是string"

Map定义为

{

    "type": "record",

    "name": "MapAvro",

    "fields": [

        {

            "name": "map",

            "type": [

                "null",

                {

                    "type": "map",

                    "values": "long"

                }

            ]

        }

    ]

}

编译后:  @Deprecated public java.util.Map<java.lang.CharSequence,java.lang.Long> map

unions


Unions就像JSON的数组表示:["string", "null"],声明了一个union的Schema,其元素即可以是string,也可以是null。

Unions不能包含多个相同类型的Schema,除非是命名的record类型、命名的fixed类型和命名的enum类型。比如,如果unions中包含两个array类型,或者包含两个map类型都不允许;但是两个具有不同name的相同类型却可以。由此可见,union是通过Schema的name来区分元素Schema的,因为array和map没有name属性,当然只能存在一个array或者map。(使用name作为解析的原因是这样做会使得读写unions更加高效)。unions不能紧接着包含其他的union。

组合类型,表示各种类型的组合,使用数组进行组合。比如[“null”, “string”]表示类型可以为null或者string。

组合类型的默认值是看组合类型的第一个元素,因此如果一个组合类型包括null类型,那么null类型一般都会放在第一个位置,这样子的话这个组合类型的默认值就是null。

组合类型中不允许同一种类型的元素的个数不会超过1个,除了record,fixed和enum。比如组合类中有2个array类型或者2个map类型,这是不允许的。

组合类型不允许嵌套组合类型。

fixed.


必须:"name":"名字"

"namespace":"包名"

"aliases":"别名"

必须:"size":"一个整数,表示每个值的字节数"

比如16字节的fixed可以声明为:{"type": "fixed", "size": 16, "name": "md5"}

avro命令

1



使用avro工具将json文件转换成avro文件:java -jar avro-tools-1.8.0.jar fromjson --schema-file user.avsc user.json > user.avro

可以设置压缩格式:java -jar avro-tools-1.8.0.jar fromjson --codec snappy --schema-file user.avsc user.json > user2.avro

将avro文件反转换成json文件:

java -jar avro-tools-1.8.0.jar tojson user.avro

java -jar avro-tools-1.8.0.jar --pretty tojson user.avro

得到avro文件的meta:java -jar avro-tools-1.8.0.jar getmeta user.avro


输出:

avro.codec    null

avro.schema    {"type":"record","name":"User","namespace":"example.avro","fields":[{"name":"name","type":"string"},{"name":"favorite_number","type":"int"},{"name":"favorite_color","type":"string"}]}

得到avro文件的schema:java -jar avro-tools-1.8.0.jar getschema user.avro

将文本文件转换成avro文件:java -jar avro-tools-1.8.0.jar fromtext user.txt usertxt.avro


免费领取阿里云1888元代金券大礼包

 

阿里云新老用户均可领取!
自领取后:限时7天使用!

阿里云服务器2折优惠:低至293元/年

 

 

突发性能实例t5 1核1G:293元/年

突发性能实例t5 1核2G:459元/年

突发性能实例t5 2核4G:798元/年

共享型xn4实例1核1G内存:394元/年

共享型n4实例1核2G内存:653元/年

计算网络增强型实例2核4G内存:1566元/年

计算网络增强型实例4核8G内存:2991元/年

点此查看2折活动详情

阿里云高性能云服务器

 

 

网络增强型云服务器:2核4G ¥720元/年

高频应用云服务器:8核16G ¥4109元/年

本地SSD型云服务器:4核16G ¥6218.40元/年

大数据型云服务器:8核32G ¥11375.00元/年

GPU异构云服务器:16核40G ¥15563.00元/年

新用户满立减:每满1000立减50

 

1、到阿里云官网选购产品
2、加入到购物车
3、结算时立享满减

注意:新用户首次购买时必须先加到购物车,然后一起结算才享受此优惠。

腾讯云CVM云服务器22.07元起

 

 

腾讯云1核1G:22.07元/月、794.73元/3年

腾讯云2核2G:36.48元/月、1313.35元/3年

腾讯云2核4G:43.01元/月、1548.5元/3年

腾讯云4核8G:178.5元/月、6426元/3年