HIVE中常见文件存储格式比较

文件格式

在HIVE中,常见的文件存储格式有

  • TextFile
  • Parquet
  • ORC
  • Sequence
  • RC
  • AVRO

建表语句

这里我们根据不同的文件格式,新建测试表。

--textfile文件格式
CREATE TABLE `test_textfile`(`id` STRING,,`desc` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS textfile;
--parquet文件格式
CREATE TABLE `test_parquet`(`id` STRING,,`desc` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS parquet;
--orc文件格式
CREATE TABLE `test_orc`(`id` STRING,,`desc` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS orc;
--sequence文件格式
CREATE TABLE `test_sequence`(`id` STRING,,`desc` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS sequence;
--rc文件格式
CREATE TABLE `test_rc`(`id` STRING,,`desc` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS rc;
--avro文件格式
CREATE TABLE `test_avro`(`id` STRING,,`desc` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS avro;

区别比较

我们从同一个源表新增数据到这六张测试表,为了体现存储数据的差异性,我们选取了一张数据量比较大的源表(源表数据量为30000000条)。
下面从存储空间和SQL查询两个方面进行比较。
其中SQL查询为包含group by的计量统计和不含group by的计量统计。

sql01:select count(*) from test_table;
sql02:select id,count(*) from test_table group by id;

相关的查询结果如下(为了防止出现偶然性,我们每条SQL至少执行三次,取平均值)

文件存储格式HDFS存储空间不含group by含group by
TextFile7.3 G105s370s
Parquet769.0 M28s195s
ORC246.0 M34s310s
Sequence7.8 G135s385s
RC6.9 G92s330s
AVRO8.0G240s530s

结论

从上面的测试结果可以看出

  • 从占用存储空间来看,ORC和Parquet文件格式占用的空间相对而言要小得多。
  • 从执行SQL效率来看,Parquet文件格式查询耗时要相对而言要小得多。

实际情况

从目前所得的结论来看,Hive中选用ORC和Parquet文件格式似乎更好一点,但是为什么Hive默认的文件存储格式是TextFile?
这是因为大多数情况下源数据文件都是以text文件格式保存(便于查看验数和防止乱码),这样TextFile文件格式的Hive表能直接load data数据。
如果说我们想使用ORC文件或者Parquet文件格式的表数据,可以先通过TextFile表加载后再insert到指定文件存储格式的表中。而这些不同文件格式的表我们可以通过数据分层保存,便于后期进行数据统计。

    原文作者:henrrywan
    原文地址: https://blog.csdn.net/henrrywan/article/details/90719015
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞