parquet与avro嵌套列存结构比较

本文对比分析了Parquet和Avro两种列存格式,重点讨论了它们在处理嵌套列结构时的区别。Parquet通过Repetition levels和Definition levels支持嵌套属性,而Avro列存没有行组概念,所有记录需一次性加载内存。Parquet允许单独读取嵌套列,而Avro读取必须从顶层字段开始。
摘要由CSDN通过智能技术生成

paruet列存文件结构图:


如上图,文件由一个或者多个行组Row Group组成,每个行组由多个列组成,每个列由多个页面组成,页面由其头部和Repetition levels、Definition levels和列的值values组成。

以上结构可以在加载时追加record,record首先存在内存中,当内存不够用时,将此时内存中所有的record组成一个行组Row Group输出到文件中,内存清空。

而在avro列存中没有行组的概念,只能将所有record全部加载到内存中,然后一起写到disk中。


parquet是可以存储嵌套属性的,实现这一点,Repetition levels和Definition levels很重要。以下是对这两个值的介绍。

Definition levels表示,在这条嵌套路径上repeated field和optional field不为null的个数,不包括required field。

Repetition levels表示,这个值是在嵌套路径上的哪个级别新建,针对repeated field。


以下是一个嵌套的avro中schema例子,record A嵌套record B数组嵌套record C数组。

{"name": "A", "type": "record",

 "fields": [

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

    {"name": "nestArray1",

        "type": {"type": "array",

            "it

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值