Avro 数据格式和命令行
- 支持的原始类型: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":"属性默认值"
-
案例
{ "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命令
- 使用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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JavaScript如何正确处理Unicode编码问题!
原文:JavaScript 如何正确处理 Unicode 编码问题! 作者:前端小智 Fundebug经授权转载,版权归原作者所有。 JavaScript 处理 Unicode 的方式至少可以说是令人惊讶的。本文解释了 JavaScript 中的 处理 Unicode 相关的痛点,提供了常见问题的解决方案,并解释了ECMAScript 6 标准如何改进这种情况。 Unicode 基础知识 在深入研究 JavaScript 之前,先解释一下 Unicode 一些基础知识,这样在 Unicode 方面,我们至少都了解一些。 Unicode 是目前绝大多数程序使用的字符编码,定义也很简单,用一个 码位(code point) 映射一个字符。码位值的范围是从 U+0000 到 U+10FFFF,可以表示超过 110 万个字符。下面是一些字符与它们的码位。 A 的码位 U+0041 a 的码位 U+0061 © 的码位 U+00A9 的码位 U+2603 的码位 U+1F4A9 码位 通常被格式化为十六进制数字,零填充至少四位数,格式为 U +前缀。 Unicode 最前面的 65536 个字符...
- 下一篇
Avro序列化和RPC实现
序列化和反序列化 Maven:Pom.xml <dependencies> <dependency> <groupId>org.apache.avro</groupId> <artifactId>avro</artifactId> <version>1.8.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.avro</groupId> <artifactId>avro...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作