释放数据效率:探索Hive表存储格式 - ORC与Text File的对比
1、hive表存储格式介绍
-
文本文件(Text File):文本文件是Hadoop最基本的存储格式,以文本形式存储数据,每行记录都是一个文本字符串。优势是易于理解和处理,适用于简单的数据分析任务。
-
列式存储(Columnar Storage):列式存储将每个列的数据存储在一起,相同列的数据连续存储。它提供了更高的压缩率和查询性能,特别适合于分析型查询。常见的列式存储格式包括Parquet和ORC。
-
Parquet:Parquet是一种优化的列式存储格式,它支持高效的压缩和列裁剪(Column Pruning),以减少I/O和提高查询性能。它适用于大规模数据分析和数据仓库场景。
-
ORC(Optimized Row Columnar):ORC是另一种优化的列式存储格式,它结合了行式存储和列式存储的优点,提供了更高的压缩率和查询性能。它适用于Hive中大型表和复杂查询的性能优化。
-
-
Avro:Avro是一种数据序列化系统,可以将数据结构以JSON格式进行存储。它支持动态模式演化和数据压缩,并且适用于数据交换和存储的场景。
-
RCFile(Record Columnar File):RCFile是一种将数据按照记录和列进行组织的混合存储格式。它提供了更好的数据压缩比和查询性能,并且适用于Hive中的大规模数据处理。
每种存储格式都有其优势和适用场景。例如,文本文件格式易于理解和处理,适用于简单的数据分析。而列式存储格式(如Parquet和ORC)可以提供更高的压缩率和查询性能,适用于大规模数据分析和数据仓库。Avro提供了动态模式演化和数据压缩的能力,适用于数据交换和存储。RCFile则是混合存储格式,提供了较好的压缩比和查询性能。选择适当的存储格式取决于具体的数据特点、查询需求和性能要求。
2、如何创建表并指定存储格式
在Hive中,默认的表格式是文本文件格式(Text File)。当你使用Hive创建表时,如果没有显式指定表的存储格式,Hive将默认使用文本文件格式存储数据。
如果你想指定其他格式来创建表,可以通过以下方式进行设置:
- 使用存储格式属性(STORED AS):在创建表的语句中,可以使用
STORED AS子句来指定所需的存储格式。Hive支持多种存储格式,如Parquet、ORC、Avro等。例如,要将表存储为Parquet格式,可以使用以下语法:
CREATE TABLE table_name
...
STORED AS Parquet;
- 使用表属性(TBLPROPERTIES):你还可以使用表属性来指定存储格式。表属性是键值对的形式,用于在创建表时指定额外的选项。可以使用
tblproperties关键字并指定存储格式属性(如'stored-as')和相应的值(如'parquet')来设置存储格式。例如:
CREATE TABLE table_name
...
TBLPROPERTIES ('stored-as' = 'parquet');
需要注意的是,使用特定的存储格式需要确保对应的存储格式插件在Hive环境中可用。你可能需要安装和配置相应的插件才能使用某些存储格式。
此外,你还可以通过修改Hive的默认存储格式配置来更改Hive创建表的默认存储格式。可以在Hive的配置文件中(如hive-site.xml)设置相关属性,如hive.default.fileformat,并将其值设置为所需的存储格式(如Parquet)。
总结起来,Hive默认创建的表使用文本文件格式存储数据。你可以使用STORED AS子句或表属性(TBLPROPERTIES)来指定其他存储格式,如Parquet、ORC、Avro等。同时,你也可以通过修改Hive的默认存储格式配置来更改默认的存储格式。
3、Text File和ORC的两种存储方式的对比
3.1、ORC存储格式架构图:
+-----------------------------------------------------------------+ | ORC File | +-----------------------------------------------------------------+ | File Header | |-----------------------------------------------------------------| | Postscript | |-----------------------------------------------------------------| | File Footer | |-----------------------------------------------------------------| | Stripes | | +------------------------------------------------------------+ | | | Stripe | | | +------------------------------------------------------------+ | | | Stripe Footer | Stripe Data | | | |-------------------------------|---------------------------| | | | Column Indexes | Column Data | | | | | (compressed) | | | +------------------------------------------------------------+ | | | Stripe Footer | Stripe Data | | | |-------------------------------|---------------------------| | | | Column Indexes | Column Data | | | | | (compressed) | | | +------------------------------------------------------------+ | | ... | |-----------------------------------------------------------------| | File Metadata | +-----------------------------------------------------------------+
上述架构图详细描述了ORC(Optimized Row Columnar)存储格式的组成部分:
-
File Header(文件头):包含ORC文件的基本元数据和文件版本信息。
-
Postscript(文件后缀):包含一些文件相关的参数,如压缩算法、压缩块大小等。
-
File Footer(文件尾部):包含ORC文件的元数据,如Schema定义、统计信息等。
-
Stripes(数据条带):ORC文件被分成多个条带,每个条带都是独立的数据单元。
-
Stripe(条带):每个条带由Stripe Footer和Stripe Data组成。
-
Stripe Footer(条带尾部):包含当前条带的元数据,如列偏移量、压缩信息和索引信息。
-
Stripe Data(条带数据):包含列数据和相关索引。列数据可以使用压缩算法进行压缩。
-
-
Column Indexes(列索引):每个条带都有自己的列索引,用于快速定位和访问数据。列索引包含有关列值的统计信息和位置信息。
-
Column Data(列数据):存储了实际的列值数据。列数据可以使用适用的压缩算法进行压缩。
-
File Metadata(文件元数据):存储了整个ORC文件的元数据信息,如列名、类型、统计信息和Schema等。
这些组成部分共同构成了ORC文件的结构。ORC存储格式利用列式存储、压缩算法、索引和元数据信息等技术,以提高数据存储效率和查询性能。
3.2、Text File vs ORC
ORC在压缩比和查询性能方面提供了显著的优势。
-
压缩比: ORC格式在存储数据时采用了多种压缩算法和技术,以减小数据的存储空间。相比之下,Text File格式以纯文本形式存储数据,没有内建的压缩功能。由于ORC采用列式存储,它可以应用列级别的压缩,例如使用字典编码、位图编码和使用基于列值统计的压缩算法。这些技术可以显著减小存储空间,从而提供更高的压缩比,尤其在大型数据集上效果更为明显。
-
查询性能: ORC格式在查询性能方面也具有优势。由于ORC以列存储的方式组织数据,它可以仅读取查询所需的列,而不需要读取整个行。这种列裁剪(Column Pruning)减少了磁盘读取量,提高了查询的效率。此外,ORC还支持谓词下推(Predicate Pushdown),将过滤操作下推到存储层级,减少了需要加载到内存的数据量,进一步提高了查询性能。另外,ORC使用索引和统计信息来加速元数据和数据的读取,优化了查询计划的生成和执行。
综合来说,ORC相对于Text File格式在存储空间和查询性能方面都提供了显著的改进。它可以通过更高的压缩比减小存储需求,并通过列存储和压缩算法提高查询性能。尤其在大型数据集和复杂查询场景下,ORC格式的优势更加明显,可以提供更高效的数据存储和查询分析能力。

浙公网安备 33010602011771号