hive实现全自动动态分区--案例详解

需求:删除s_ls_yijj_syjglj_yhxx中所有分区中HD_FIND_DATE字段大于当前系统日期的数据删除

1.开启动态分区,并设置参数
    #--开启动态分区,默认是false (可通过这个语句查看:set hive.exec.dynamic.partition;) 
    set hive.exec.dynamic.partition=true;

    #--开启允许所有分区都是动态的,否则必须要有静态分区才能使用,默认是strict  
    set hive.exec.dynamic.partition.mode=nonstrict;

    #--调整参数:(在这里遇到过坑,分区数太多,超出默认限制)
    set hive.exec.max.dynamic.partitions.pernode=2000;
    表示每个maper或reducer可以允许创建的最大动态分区个数,默认是100,超出则会报错,一般可以设置大一点,这里设置为2000
    set hive.exec.max.dynamic.partitions =2000;
    表示一个动态分区语句可以创建的最大动态分区个数,超出报错,默认是1000
    set hive.exec.max.created.files =2000;
    表示全局可以创建的最大文件个数,超出报错,默认是1000

2.创建一张与原表(s_ls_yijj_syjglj_yhxx)表结构一致的临时表(s_ls_yijj_syjglj_yhxx_tmp)
create table if not exists biaozhun.s_ls_yijj_syjglj_yhxx_tmp like biaozhun.s_ls_yijj_syjglj_yhxx;

3.向临时表(s_ls_yijj_syjglj_yhxx_tmp)中插入数据
INSERT INTO TABLE biaozhun.s_ls_yijj_syjglj_yhxx_tmp PARTITION (date_id)
SELECT
place_name,addres,dlname,xlname,hd_desc,level_name,hd_find_date,is_rectify_once,assign_rectify_date,rectify_desc,accept_date,accept_desc,hd_status,dj_status,dj_inserttime,dj_updatetime,dj_id,dj_flag,exchangetime,formatted_address,local_coord_x,local_coord_y,adcode,date_id
FROM biaozhun.s_ls_yijj_syjglj_yhxx
WHERE SUBSTR(REPLACE(REPLACE(REPLACE(HD_FIND_DATE, '-',''),' ',''),':',''),1,14) <= SUBSTR(REPLACE(REPLACE(REPLACE(from_unixtime(unix_timestamp(),"yyyy-MM-dd HH:mm:ss"), '-',''),' ',''),':',''),1,14);
注意:原表s_ls_yijj_syjglj_yhxx中的分区字段date_id必须放在最后一个字段的位置
这样就将date_id的值作为分区的值,分成多个分区存储,也就是在hdfs中分成了多个目录进行存储。

4.检查临时表(s_ls_yijj_syjglj_yhxx_tmp)与原表(s_ls_yijj_syjglj_yhxx)的数据量、分区、内容是否一样,如果一致,就可以用临时表替换原表了
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值