博客
关于我
Orcfile文件格式解析
阅读量:798 次
发布时间:2023-03-31

本文共 1170 字,大约阅读时间需要 3 分钟。

OrcFile是Hive 0.11版中引入的新存储格式,作为对之前的RCFile存储格式的优化。这项工作由HortonWorks团队完成,他们在代码实现上做了很多改进,相比RCFile,OrcFile的性能表现有了显著提升。

OrcFile的文件格式结构较为清晰,每个文件由一个或多个Stripe组成,每个Stripe的大小为250MB,这比RCFile的RowGroup概念从4MB提升了很多,有助于提升顺序读取的吞吐量。每个Stripe包含三部分:Index Data、Row Data和Stripe Footer。

  • Index Data:这是一个轻量级的索引结构,默认每隔10,000行创建一个索引。索引主要用于记录某行的字段在Row Data中的偏移量,同时还包含每个字段的最大值和最小值信息。

  • Row Data:存储具体的数据,与RCFile类似,OrcFile也会将部分行数据提取出来,并按列进行存储。与RCFile不同的是,OrcFile对每个列进行了编码,将其拆分为多个Stream进行存储,具体的编码方式将在后续文章中详细解析。

  • Stripe Footer:存储各个Stream的类型和长度信息。

  • 每个文件尾部都有一个File Footer,用于存储每个Stripe的行数以及各个字段的数据类型信息。文件的最后还有一个PostScript,记录压缩类型和File Footer的长度信息。读取文件时,需要从文件尾部开始读取,解析PostScript获取File Footer的长度,然后逐步解析各个Stripe信息,从末尾向前读取。

    相比RCFile,OrcFile在以下方面做了改进:

  • 类型模型:OrcFile不像RCFile那样忽略字段的类型信息,而是将其存储为Byte Stream。

  • 复杂字段支持:OrcFile能够有效存储复杂类型的字段,将其拆分为多个部分进行存储。

  • 快速找到分割块:OrcFile通过特定的机制快速定位到分割块的位置。

  • 默认列组大小:支持设置默认的列组大小。

  • 文件分组:每个文件可以包含多个分组。

  • 存储最小值、最大值、计数和求和:在每个Stripe中存储这些信息,有助于快速跳过不感兴趣的数据块。

  • 版本化元数据:支持元数据的版本控制。

  • 运行长度编码:对于整数类型,OrcFile采用了Run-Length编码技术。

  • 字符串编码:对于字符串类型,OrcFile使用字典编码。

  • 存储行数:每个Stripe会存储具体的行数。

  • 跳过压缩块:可以直接跳过压缩过的块。

  • 内部索引:存储了一个轻量级的内部索引。

  • 通过以上改进,OrcFile在存储效率和读取性能方面都有了显著提升。代码实现清晰明了,我们团队也进行了测试,发现压缩效果比RCFile提升了不少。如果你对具体的编码格式感兴趣,欢迎关注后续的文章。

    转载地址:http://zpefk.baihongyu.com/

    你可能感兴趣的文章
    ORA-00942 表或视图不存在
    查看>>
    ORA-01795: 列表中的最大表达式数为 1000
    查看>>
    ora-12541:tns:no listener
    查看>>
    【docker知识】联合文件系统(unionFS)原理
    查看>>
    ORACEL学习--理解over()函数
    查看>>
    oracle 10g crs命令,Oracle 10g CRS安装问题解决一例
    查看>>
    oracle 10g的安装配置
    查看>>
    Oracle 11g 使用RMAN备份数据库
    查看>>
    Oracle 11gR2学习之二(创建数据库及OEM管理篇)
    查看>>
    Oracle 11g中的snapshot standby特性
    查看>>
    Oracle 11g忘记sys、system、scott密码该这样修改!
    查看>>
    Oracle 11g数据库安装和卸载教程
    查看>>
    Oracle 11g超详细安装步骤
    查看>>
    Oracle BEQ方式连接配置
    查看>>
    ORACLE Bug 4431215 引发的血案—原因分析篇
    查看>>
    oracle dblink 创建使用 垮库转移数据
    查看>>
    oracle dblink结合同义词的用法 PLS-00352:无法访问另一数据库
    查看>>
    Oracle dbms_job.submit参数错误导致问题(ora-12011 无法执行1作业)
    查看>>
    oracle dg switchover,DG Switchover fails
    查看>>
    Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
    查看>>