-
分区是hive非常高效的一种存储方式,将列值作为目录进行存储数据,当使用where条件过滤的时候就会直接扫描对应的目录下的数据,不扫描其他不关联的分区,快速定位,查询节约大量时间。分区分为动态和静态两种分区。那么今天我们就来看看这其中需要注意的事项和容易采的坑。
-
动态分区
- 不显示的给出分区名,根据列的取值自动建立对应的分区,有多少种取值就有多少种分区,所以这在实际生产中很容易导致生成大量的分区,也就导致HDFS生成大量的小文件(这里是需要注意的),所以我们要设置最大分区数。
SET hive.exec.dynamic.partition=true; SET hive.exec.max.dynamic.partitions.pernode=1000; SET hive.exec.max.dynamic.partitions=3000;
- 分区全部使用动态分区,还要设置为nonstatic模式,否则无法运行。
set hive.exec.dynamic.partition.mode=nonstrict;
- 动态分区时按位置对应的,跟名称无关。所以在select后面必须按照动态分区顺序进行查询。
-
接下来我们看看动态分区和静态分区混用的时候需要注意的点。
insert overwrite table user_info partition (dt='2016-05-17', media,type) select id, name, phone, media, 'type' as type from user
Hive踩坑之动态和静态分区混合使用
最新推荐文章于 2022-10-24 11:22:54 发布