Apache Parquet 与Apache ORC简介

来源:互联网 发布:二叉树的前序遍历java 编辑:程序博客网 时间:2024/04/27 09:03

1.列存储的优势

传统的 RDBMS 大多使用的行存储方式,现如今随着大数据技术的发展,对于存储的要求越来越高,列存储相对有自己明显的优势:列数据相对来说比较类似,压缩比更高;一般的查询只涉及几列,列存储的查询性能也更高;可以方便地新增列等。在某些场景下,选择列存储是非常不错的选择,从节省存储的角度来说就非常吸引人了。

目前,比较有名的开源实现有 Apache Parquet 和 Apache ORC。ORC 官网介绍 Facebook 和 Yahoo 都使用了 ORC。

2.Parquet

pache Parquet 是 Apache 的顶级项目,是一个自描述语言无关的列存储,最初的设计动机是为了存储嵌套数据,可以将 ProtoBuf、Thrift、Avro 等格式的数据转换为列格式来存储,这是其最大的优势。此外,也有基本的功能,数据压缩、基本的索引功能、支持复杂类型等。主要在 Apache Drill 中使用。

从 Hive 0.13 开始,Hive 开始原生支持 Parquet,注意不是全部类型都支持,详情请参考 Hive 官方文档。使用方法很简单,只需要在建表语句的时候,声明存储格式即可。

-- 建表,通过修改 parquet.compression 参数来修改压缩算法CREATE TABLE parquet_test ( id int, str string, mp MAP<STRING,STRING>, lst ARRAY<STRING>, strct STRUCT<A:STRING,B:STRING>)PARTITIONED BY (part string)STORED AS PARQUET TBLPROPERTIES ("parquet.compression"="SNAPPY");-- 数据迁移只需要将原来的表数据重新插入一遍即可INSERT OVERWRITE TABLE parquet_test SELECT * FROM old_test;

数据存储格式图
这里写图片描述

3.ORC

ORC(OptimizedRC File)也是 Apache 的顶级项目,也是自描述的列存储,源自于RC(RecordColumnar File),主要是在 Hive 中使用,支持数据压缩、索引功能、update 操作、ACID 操作、支持复杂类型等,其查询性能相对 Parquet 略有优势。

从 Hive 0.11 版本开始引入,使用方法也很简单。

CREATE TABLE ORC_test (  ...) STORED AS ORC TBLPROPERTIES ("orc.compress"="NONE");-- merge small ORC files into a larger file, starting in hive 0.14ALTER TABLE ORC_test PARTITION(...) CONCATENATE;

数据存储格式图
这里写图片描述

0 0