前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive ORC文件格式

Hive ORC文件格式

作者头像
smartsi
发布2019-08-07 10:12:02
4.6K0
发布2019-08-07 10:12:02
举报
文章被收录于专栏:SmartSiSmartSi

1. ORC文件格式

在Hive 0.11.0版本引入此功能

ORCOptimized Row Columnar 的缩写,ORC 文件格式提供一种高效的方法来存储Hive数据。旨在解决其他Hive文件格式的局限。当Hive读取,写入和处理数据时,使用 ORC 文件格式可以提高性能。

例如,与 RCFile 文件格式相比,ORC 文件格式具有许多优点,例如:

  • 每个任务输出文件只有一个,这样可以减轻 NameNode 的负载;
  • 支持的Hive数据类型包括 datetime, decimal, 以及一些复杂类型(struct, list, map, union);
  • 存储在文件中的轻量级索引;
  • 基于数据类型的块级别压缩:Integer类型的列用行程长度编码(Run Length Encoding),String类型的列用字典编码(Dictionary Encoding);
  • 使用多个互相独立的RecordReaders并行读相同的文件;
  • 无需扫描markers就可以分割文件;
  • 绑定读写所需要的内存;
  • 使用Protocol Buffers存储Metadata,可以支持添加和删除一些字段。
1.1 文件结构

ORC 文件包含了多个 Stripe。除此之外,File Footer 还包含了一些额外辅助信息。在文件的末尾,PostScript 保存了压缩参数和压缩页脚的大小。Stripe 默认大小为250MB。大的 Stripe 可实现 HDFS 的高效读取。File Footer 包含了文件中的 Stripe 列表,每个 Stripe 有多少行以及每列的数据类型。还包了一些含列级聚合的计数,最小值,最大值以及总和。

下图说明了ORC文件结构:

1.2 Stripe结构

从上图我们可以看出,每个 Stripe 都包含 Index dataRow data 以及 Stripe FooterStripe Footer 包含流位置的目录(a directory of stream locations)。Row data 在表扫描的时候会用到。

Index data 包含每列的最大值和最小值以及每列所在的行(还可以包括位字段或布隆过滤器)。行索引里面提供了偏移量,它可以跳到正确的压缩块位置以及解压缩块的字节位置。请注意,ORC索引仅用于选择 Stripe 和行组,而不用于查询。

尽管 Stripe 大小很大,具有相对频繁的行索引,可以跳过 Stripe 内很多行快速读取。在默认情况下,最大可以跳过10000行。通过过滤谓词,可以跳过大量的行,你可以根据表的 Secondary Keys 进行排序,从而大幅减少执行时间。例如,你的表的主分区是交易日期,那么你可以在 state、zip code以及last name 上进行排序。然后在一个 state 中查找记录将跳过所有其他 state 的记录。

2. 语法

文件格式在表(或分区)级别指定。你可以使用HiveQL语句指定ORC文件格式,例如:

代码语言:javascript
复制
CREATE TABLE Addresses (
  name string,
  street string,
  city string,
  state string,
  zip int
)
STORED AS orc tblproperties ("orc.compress"="NONE");

除此之外,还可以为表指定压缩算法:

代码语言:javascript
复制
CREATE TABLE Addresses (
  name string,
  street string,
  city string,
  state string,
  zip int
)
STORED AS orc tblproperties ("orc.compress"="Zlib");

通常不需要设置压缩算法,因为Hive会设置默认的压缩算法 hive.exec.orc.default.compress=ZLIB

我们通常的做法是将 HDFS 中的数据作为文本,在其上创建 Hive 外部表,然后将数据以 ORC 格式存储在Hive中:

代码语言:javascript
复制
CREATE TABLE Addresses_ORC STORED AS ORC AS SELECT * FROM Addresses_TEXT;

3. 高级设置

属性全部放在 TBLPROPERTIES 中。ORC具有通常不需要修改的属性。但是,对于特殊情况,你可以修改下表中列出的属性:

从Hive 0.14.0开始 ALTER TABLE table_name [PARTITION partition_spec] CONCATENATE 可用于将小的ORC文件合并为一个更大的文件。合并发生在 Stripe 级别,这可以避免对数据进行解压缩和解码。

参考: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC

https://www.iteblog.com/archives/1014.html#HiveORCFile

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. ORC文件格式
    • 1.1 文件结构
      • 1.2 Stripe结构
      • 2. 语法
      • 3. 高级设置
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档