Avro 数据格式和命令行

简介: 支持的原始类型:null,boolean,int,long,float,double,bytes,string 支持的复杂类型: records 必须:"type":"record" 必须:"name":"记录名" "namespace":"包名" "doc":"为schema提供文档" .
  • 支持的原始类型: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命令

  • 使用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
目录
相关文章
|
存储 Kubernetes 调度
Flink 批作业如何在 Master 节点出错重启后恢复执行进度?
本文由阿里云研发工程师李俊睿撰写,介绍了Flink 1.20版中新引入的批作业进度恢复功能。文章涵盖背景、解决思路、使用效果及启用方法。此前,若JobMaster故障,批作业需重头开始,造成进度丢失。新功能通过将JM状态持久化至外部存储并在故障后利用这些状态恢复作业进度,避免了这一问题。使用该功能需启用集群高可用并配置相关参数。
601 7
Flink 批作业如何在 Master 节点出错重启后恢复执行进度?
|
负载均衡 JavaScript Linux
做网站如何选择云服务器?(一)配置篇
选择服务器需考虑网站规模、技术需求和地理位置。个人博客适合基础配置,企业官网需4核CPU、8GB内存,电商平台则需更高配置并配备负载均衡。技术上,展示型网站用PHP+MySQL,互动社区需Node.js/Python环境,视频类网站要大带宽。地理位置影响服务器选择,国内用户选腾讯云/阿里云,海外用户选AWS等。主流服务器类型包括虚拟主机(入门级)、云服务器(推荐)和物理服务器(高端需求)。云服务商普遍提供免费试用,便于评估性能。
1378 1
|
人工智能 前端开发 Serverless
阿里云《AI 剧本生成与动画创作》解决方案技术评测
随着人工智能技术的发展,越来越多的工具和服务被应用于内容创作领域。阿里云推出的《AI 剧本生成与动画创作》解决方案,利用函数计算 FC 构建 Web 服务,结合百炼模型服务和 ComfyUI 工具,实现了从故事剧本撰写、插图设计、声音合成和字幕添加到视频合成的一站式自动化流程。本文将对该方案进行全面的技术评测,包括实现原理及架构介绍、部署文档指引、具体耗时分析以及实际使用体验。
921 16
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
32626 78
如何保证分布式文件系统的数据一致性
|
监控 小程序 安全
小程序全栈开发中的WebSocket实时通信实践是一种高效的开发模式。
随着移动互联网的发展,小程序成为企业拓展业务的新渠道。WebSocket作为一种实时通信协议,可在小程序中实现如实时聊天、推送、游戏等功能。它支持客户端与服务器间的全双工长连接通信,优于传统HTTP。开发者需注意安全、性能及兼容性等问题,以优化体验并保障稳定运行。掌握WebSocket有助于提升小程序功能性与用户体验。
294 1
|
Java 网络安全 Maven
Maven配置国内镜像源
Maven 是一个流行的 Java 项目构建工具,它依赖于互联网上的 Maven 中央仓库来下载和管理项目依赖库。但是,由于网络原因或其他问题,有时会导致从中央仓库下载依赖库的速度变慢或者无法下载,这就会影响项目的构建效率。 通过为 Maven 配置镜像源,可以使 Maven 从镜像源下载依赖库,而不是直接从中央仓库下载。这样做的好处在于: 1. 提高下载速度:由于国内的镜像源一般都部署在国内的服务器上,所以从镜像源下载依赖库的速度要快得多,可以大大提高项目构建的效率。
3888 2
|
数据采集 JavaScript 前端开发
使用HtmlUnit库的Java下载器:下载TikTok视频
使用Java和HtmlUnit构建TikTok视频下载器,模拟浏览器行为,绕过访问限制。通过爬虫代理配置代理服务器,隐藏真实IP,多线程技术提升下载效率。示例代码展示如何设置HtmlUnit,创建代理,启用JavaScript,下载并处理视频链接。学习了页面模拟、JavaScript交互、代理使用及多线程技术,为实际爬虫项目提供参考。
359 0
使用HtmlUnit库的Java下载器:下载TikTok视频
|
存储 人工智能 安全
JWT的详细讲解-- AI比我们呢更了解JWT(PS: 此文由AI生成)
JWT的详细讲解-- AI比我们呢更了解JWT(PS: 此文由AI生成)
766 0
|
分布式计算 Java Apache
快速体验Spark Connect
在Apache Spark 3.4中,引入了一个解耦的客户端-服务器架构的新模块Spark Connect,允许使用DataFrame API和未解析的逻辑计划作为协议远程连接到Spark集群。客户端

热门文章

最新文章