在同一个hive表上进行多次压缩

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在同一个hive表上进行多次压缩相关的知识,希望对你有一定的参考价值。

我有一个按年/月分区的Hive表,它包含至少7年的数据。我想要做的是通过Snappy压缩最新的数据(比如1到1岁),但通过更好的压缩技术(如gzip等)来压缩旧数据。如何在Hive中执行此操作?

答案

您可以使用不同的压缩设置覆盖不同的分区。配置压缩编解码器,并使用此编解码器插入要压缩的分区。

对于快活:

set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec; 
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

使用snappy编解码器覆盖分区:

--enable dynamic partitions
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

--use where conditions to limit new data only
insert overwrite table table_name partition(partition_key)
select * from table_name where partition_key <your condition here> ;

对于gzip,请使用GzipCodec:

set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec; 
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.GzipCodec;

使用gzipcodec覆盖分区:

--enable dynamic partitions
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

--use where conditions to limit OLD data only
insert overwrite table table_name partition(partition_key)
select * from table_name where partition_key <your condition here> ;

通过这种方式,您可以为不同的分区使用不同的压缩编解码器。在选择这些表时,您无需指定编解码器。 Hive会自动识别哪个编解码器应该用于解压缩。

当然,这不是关于ORC或镶木地板等自包含文件格式。它们可以有自己的压缩属性。例如orc.compress = SNAPPY

以上是关于在同一个hive表上进行多次压缩的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Hive 中的常量列上进行分组?

通过 Hive JDBC 在 Tez 上进行 Hive - 错误

hive常见表结构

Azure Synapse 中的 Hive

hive里的分区

是否可以在 NOT-a-type 上进行多次调度?