hive优化之动态分区--静态分区

本文深入探讨了Hive中动态分区的使用方法及其原理。通过具体案例,解析了如何通过设置参数实现动态分区,以及动态分区与静态分区的区别。动态分区允许在插入数据时根据查询结果自动创建分区,提高了数据导入的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做项目,hive表中导入数据时使用了一个之前没有见过的语法

set hive.exec.dynamic.partition.mode=nonstrict;

insert  overwrite table   dws_uv_detail_mn  partition( mn)
select  
  mid,
  ...
  ....
date_format('2019-02-03','yyyy-MM')
from XXXX

这个insert语句的分区中没有设置具体的值,并且上面还有一个配置参数的语句,再文档中解释是动态分区的用法,一头雾水,在网上查资料,给了我很多思路的文档如下:
https://blog.csdn.net/pengzonglu7292/article/details/81326983

set hive.exec.dynamic.partition=true;  启动动态分区
set hive.exec.dynamic.partition.mode=nonstrict;  设置动态分区的模式为非严格模式
动态表在导入数据时,分区字段没有指定具体的值,可以通过select语句的最后一个字段来表示
select子句中必须包含动态分区表中的普通列和分区列,并且字段顺序必须要和动态分区表的建表字段顺序一致,最后一个字段必须是动态分区字段,这样就会自行根据dt的value来分区。
字段顺序的这种要求是因为默认情况下(mode=strick)不允许分区列全部是动态的,那主分区(二级分区时的第一级分区是主分区)采用必须是静态列。但是通过设置参数(mode=nostrick)实现所有的分区列都是动态分区列,即可以根据select中的值来推断每个分区的值

写到这,忽然明白,动态分区,动态分区说的就是没有固定值的分区方式,之前insert数据时都是明确分区字段等于什么值的,但是大量复杂的数据可以使用动态分区将数据按照指定的格式再次整理

看来,遇到一个专业名词的时候要先往字面意义上想一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值